关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »5个最佳的Android测试框架(带示例)

    5个最佳的Android测试框架(带示例)

    2015-04-20 00:00:00 出处:Mr.Simple的专栏
    分享

    谷歌的Android生态系统正在不断地迅速扩张。有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸、ROM /固件、芯片组以及等等等等,层出不穷。于是乎,对于Android开发人员而言,处理存储碎片变得越来越困窘。

    不过幸运的是,Android(还有iOS)开发人员可以无限制地访问一些先进的基于云的解决方案,如Testdroid Cloud,就可以在大规模的真实设备上执行自动化测试以确保质量,赞吧。此外,不同的Android测试框架的出现也大大减轻了Android开发人员的负担。

    今天,我们就要说说5款最常用的Android测试框架,并且每个框架都给出了基本的代码示例。

    1.Robotium

    不可否认,Robotium曾是Android世界之初使用最广泛的Android测试框架,风靡一时。由于它与Android有着相似的Selenium,所以它能够使得API的测试变得简单起来。

    Robotium是一个扩展于JUnit的开源库,运用多种有用的方法来支持Android UI测试。它提供的强大的自动化黑箱测试范例,可用于Android应用(原生的和混合的)和web测试。只要源代码允许,你就可以通过Robotium写功能、系统和验收测试方案,以及测试应用。

    Robotium的代码示例:

    // Public void for the operation
    public void testRecorded() throws Exception {
    // Wait for the text 'Hello!' to be shown for newbie
    if (solo.waitForText("Hello!")) {
    // R class ID identifier for 'Sign in' - and click it
    solo.clickOnView(solo.findViewById("com.twitter.android.R.id.sign_in"));
    // R class ID identifier for entering username
    solo.enterText((EditText) solo.findViewById("com.twitter.android.R.id.login_username"),"username");
    // R class ID identifier for entering password
    solo.enterText((EditText) solo.findViewById("com.twitter.android.R.id.login_password"),"password");
    // R class ID identifier for clicking log in
    solo.clickOnView(solo.findViewById("com.twitter.android.R.id.login_login"));
    // Wait until log in is done
    solo.waitForActivity("HomeTabActivity");
    }
    // Activate the text field to compose a tweet
    solo.clickOnView(solo.findViewById("com.twitter.android.R.id.menu_compose_tweet"));
    // Type the tweet
    solo.enterText((EditText) solo.findViewById("com.twitter.android.R.id.edit"), "Testdroid");
    // Tweeting!
    solo.clickOnView(solo.findViewById("com.twitter.android.R.id.composer_post"));
    }

    为了给大家提供便捷,还有一个用Robotium构建的用于测试脚本创建的一个非常棒的记录工具——Testdroid Recorder。当你在真实设备上执行实际行动时,它可以记录你的每一个步骤和每一个行为,并转换成JavaScript,以便于你进一步的修改。

    并且,你还可以全权下载和使用它的扩展库——ExtSolo,它里面包含了多种还没有被纳入到Robotium中的实用方法,例如:

    支持任意分辨率的x、Y点击自动缩放 多路径拖动 测试故障时自动截图 模拟地点 更改设备语言 控制WiFi连接

    官方网站:https://code.google.com/p/robotium/

    2.uiautomator

    虽然Robotium是一个很好的测试框架,但是uiautomator能让你在测试Android应用和Android游戏时做得更多。谷歌的测试框架允许你在一个或多个设备上测试原生Android应用的用户界面(UI)。Uiautomator的另一个优点是,它运行的JUnit测试用例是有特殊权限的,这意味着测试用例可以跨越不同的进程。它还提供了五种不同的类给开发人员使用:

    com.android.uiautomator.core.UiCollection;
    com.android.uiautomator.core.UiDevice;
    com.android.uiautomator.core.UiObject;
    com.android.uiautomator.core.UiScrollable;
    com.android.uiautomator.core.UiSelector

    遗憾的是,uiautomator只能工作于API16或更高级别的Android设备上。它的另一个缺点是不支持web视图,也没有办法直接访问Android对象。

    uiautomator的代码示例:

    // Public void for the operation
    public void testSignInAndTweet() throws Exception {
    // Starting application:
    getUiDevice().wakeUp(); // Press Home button to ensure we're on homescreen
    getUiDevice().pressHome(); // Select 'Apps' and click button
    new UiObject(new UiSelector().description("Apps")).click(); // Select 'Twitter' and click
    new UiObject(new UiSelector().text("Twitter")).click(); // Locate and select 'Sign in'
    UiSelector signIn = new UiSelector().text("Sign In"); // If button is available, click
    UiObject signInButton = new UiObject(signIn);
    if (signInButton.exists()) {
    signInButton.click(); // Set the username
    new UiObject(new
    UiSelector().className("android.widget.EditText").instance(0)).setText("username");
    new UiObject(new
    UiSelector().className("android.widget.EditText").instance(1)).setText("password");
    new UiObject(new UiSelector().className("android.widget.Button").
    text("Sign In").instance(0)).click(); // Wait Sign in progress window
    getUiDevice().waitForWindowUpdate(null, 2000); // Wait for main window
    getUiDevice().waitForWindowUpdate(null, 30000);
    }
    new UiObject(new UiSelector().description("New tweet")).click(); // Typing text for a tweet
    new UiObject(new UiSelector().className("android.widget.LinearLayout").instance(8)).
    setText("Awesome #Testdroid!"); // Tweeting!
    new UiObject(new UiSelector().text("Tweet")).click();

    官方网站:http://developer.android.com/tools/help/uiautomator/index.html

    3.Espresso

    Espresso是由Google开源的一款最新的Android自动化测试框架,有助于于开发人员和测试人员锤炼出中意的用户界面。Espresso的API体积小、可预见、简单易学,构建在Android仪表框架的基础上。使用它,能让你快速编写出简洁可靠的Android UI测试。它支持API level 8级(Froyo)、10(Gingerbread),和15(Ice Cream Sandwich)及后续。

    一方面它相当可靠,因为和UI线程是同步的,另一方面又非常之快,因为没有任何睡眠的必要(当某个毫秒,应用程序空转时,运行测试)。不过它同样不支持web视图。

    Espresso的代码示例:

    public void testEspresso() {
    // Check if view with the text 'Hello.' is shown
    onView(withText("Hello.")).check(matches(isDisplayed()));
    // R class ID identifier for 'Sign in' - and click it
    onView(withId(getInstrumentation().getTargetContext().getResources()
    .getIdentifier("com.twitter.android:id/sign_in", null, null))).perform(click());
    // R class ID identifier for entering username
    onView(withId(getInstrumentation().getTargetContext().getResources()
    .getIdentifier("com.twitter.android:id/login_username", null, null))).perform((typeText("username")));
    // R class ID identifier for entering password
    onView(withId(getInstrumentation().getTargetContext().getResources()
    .getIdentifier("com.twitter.android:id/login_password", null, null))).perform((typeText("password")));
    // R class ID identifier for clicking log in
    onView(withId(getInstrumentation().getTargetContext().getResources()
    .getIdentifier("com.twitter.android:id/login_login", null, null))).perform(click());
    // Activate the text field to compose a tweet
    onView(withId(getInstrumentation().getTargetContext().getResources()
    .getIdentifier("com.twitter.android:id/menu_compose_tweet", null, null))).perform(click());
    // Type the tweet
    onView(withId(getInstrumentation().getTargetContext().getResources()
    .getIdentifier("com.twitter.android:id/edit", null, null))).perform((typeText(”#Testdroid")));
    // Tweeting!
    onView(withId(getInstrumentation().getTargetContext().getResources()
    .getIdentifier("com.twitter.android:id/composer_post", null, null))).perform(click());
    }

    官方网站:https://code.google.com/p/android-test-kit/wiki/Espresso

    4.Calabash

    Calabash是一款跨平台的自动化测试框架,支持Android和iOS原生和混合的应用程序。Calabash易于理解的语法,使得即使是非技术人员也可以在这两个移动平台上为app创建和执行自动化验收测试。Calabash的测试描述于Cucumber,然后在运行时转化为Robotium或Frank。它支持约80种不同的自然语言指令(控制器),并且可以使用Ruby和Java实现新的控制器。

    Calabash的代码示例:

    Feature: Login feature
    Scenario: As a valid user I can log into my app
    I wait for text "Hello"
    Then I press view with id "Sign in"
    Then I enter text "username" into "login_username"
    Then I enter text "password" into "login_password"
    Then I wait for activity "HomeTabActivity"
    Then I press view with id "menu_compose_tweet"
    Then I enter text "Testdroid" into field with id "edit"
    Then I press view with id "composer_post"

    官方网站:http://calaba.sh/

    5.Appium

    Appium是一款移动的自动化测试框架(和工具),支持iOS和Android原生和混合的移动Web应用程序。它内部使用的JSONWireProtocol通过Selenium的WebDriver,来与iOS和Android应用进行交互。它通过uiautomator(API level 16或更高)和Seledroid(API level 低于16)支持Android,通过UI Automation支持iOS,还有Android和iOS都支持的移动web如Selenium driver。

    Appium的最大优点在于你几乎可以用任意一种编程语言(例如,Java、Objective-C、JavaScript、PHP、Ruby、Python和C#等)来编写Appium脚本而不必选择工具,兼容最重要的平台(Android和iOS)而不必安装和配置设备适应测试等等。并且,假如你熟悉Selenium的话,那么使用Appium用于移动app测试对你而言将是轻而易举的一件事。因为它们使用相同的WebDriver,并且以同样的方式使用DesiredCapabilities。所以Appium与Selenium在配置应用程序运行时有诸多相似之处。

    Appium的代码示例:

    # wait for hello
    sleep(3)
    textFields = driver.find_elements_by_tag_name('textField')
    assertEqual(textFields[0].get_attribute("value"), "Hello")
    # click sign-in button
    driver.find_elements_by_name('Sign in')[0].click()
    # find the text fields again, and enter username and password
    textFields = driver.find_elements_by_tag_name('textField')
    textFields[0].send_keys("twitter_username")
    textFields[1].send_keys("passw0rd")
    # click the Login button (the first button in the view)
    driver.find_elements_by_tag_name('button')[0].click()
    # sleep
    sleep(3)
    # click the first button with name "Compose"
    driver.find_elements_by_name('Compose')[0].click()
    # type in the tweet message
    driver.find_elements_by_tag_name('textField')[0].send_keys(”#Testdroid is awesome!")
    # press the Send button
    driver.find_elements_by_name('Send')[0].click()
    # exit
    driver.quit()

    官方网站:http://appium.io/

    总结

    以上就是我们列出的5款最棒的测试框架,可用于日常的Android构建,创立和修改。当然,每一种框架都有其优势和缺陷。Appium可以同时测试你的Android和iOS版本。但假如你是一个忠实的Android开发人员只开发安卓版本的app,那么,使用Robotium就很不错的。Testdroid Recorder还可为我们在生成测试脚本节省大量的时间和金钱(这是免费的哦!)。因此,好好思考下你的测试需求——功能测试、兼容性测试、UI测试等等——然后为自己选取最适合和最佳的Android测试框架。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    Destoon 模板存放规则及语法参考

    Destoon系统常量与变量

    Destoon系统目录文件结构说明

    Destoon 系统安装指南

    Destoon会员公司主页模板风格添加方法

    Destoon 二次开发入门

    Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

    Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

    Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

    小米路由器买哪款?Miwifi热门路由器型号对比分析

    IT头条

    Synology 对 Office 套件进行重大 AI 更新,增强私有云的生产力和安全性

    01:43

    StorONE 的高效平台将 Storage Guardian 数据中心占用空间减少 80%

    11:03

    年赚千亿的印度能源巨头Nayara 云服务瘫痪,被微软卡了一下脖子

    12:54

    国产6nm GPU新突破!砺算科技官宣:自研TrueGPU架构7月26日发布

    01:57

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    技术热点

    如何删除自带的不常用应用为windows 7减负

    MySQL中多表删除方法

    改进的二值图像像素标记算法及程序实现

    windows 7 32位系统下手动修改磁盘属性例如M盘修改为F盘

    windows 7中怎么样在家庭组互传文件

    Linux应用集成MySQL数据库访问技巧

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。