Android Studio环境下基于Robotium的自动化黑盒测试

Android Studio环境下基于Robotium的自动化黑盒测试

能力要求

  1. 能使用Java、C++或其他程序设计语言编写程序
  2. 能使用Python进行简单的脚本编写
  3. 能使用一些简单的Linux命令 (Android Kernal is base on Linux)
  4. 能大概读懂英文文档

主流自动化测试框架

  • Mokey (For feature test.Base on random stream)
  • MokeyRunner (Base on Location(x,y))
  • Robotium (Base on component)
  • AndroidDroid
  • Appium (For IOS as well)
  • Selenium (For Web) –> NativeDriver –> UIAutomator
  • UIAutomator (Google:Replace MokeyRunner)
  • Espresso (Google)
  • Baidu Cafe
  • TaoBao Athrun
  • SeeTest
  • Tencent GT

Robotium介绍

Robotium是一款国外的Android自动化黑盒测试开源框架,主要针对Android Platform的应用。它提供了模拟各种手势操作(包括点击、长按、滑动等)、查找和断言机制的API,能够对各种控件(包括Activity、Dialog、Toast、Menu等)进行操作。Robotium结合Android官方提供的测试框架达到对应用程序进行自动化测试。另外,Robotium4.0版本(现在已经是5.X版本了)已经支持对WebView的操作。现在Robotium已经推出了Robotium Recorder($295),可以对手动的操作进行录制并生成黑盒测试代码。

Robotium原理

  1. Clicker类
  2. Search类
  3. Solo类

当使用Solo类对象对屏幕上的一个控件进行手势操作时,此时Robotium会到已经在初始化时加载在List中的所有View对象进行匹配,这个步骤就是通过Search类和Clicker类同时工作来完成的。如果在当前Activity下含有多个相同View的对象,那么Robotium会根据内部的一个index值去找到被操作的View对象。

Robotium已经在初始化时对加载在List中的WebView对象通过WebChromeClient对象用setJavaScriptEnable(boolean)方法启用JavaScript注入,当使用Solo类对象对屏幕上WebView进行操作时,Robotium会通过该客户端启用底层的NativeDriver通过JavaScript去操作具体网页元素。

用法

  • #### 环境配置
    1. JDK1.7、Android SDK (minimum API=11;target API=22)
    2. Android Studio version 2.X
    3. Gradle version 2.12+
    4. 相关命令工具的环境变量配置
android {
    defaultConfig {
        testInstrumentationRunner "android.test.runner.InstrumentationTestRunner"
    }
}
dependencies {
    androidTestCompile "com.jayway.android.robotium:robotium-solo:5.5.4"
}
  • #### 测试代码编写
    1. 在app/src/androidTest/下新建测试类DemoTest extends ActivityInstrumentationTestCase2<T>,T为当前待测的界面的Activity。
    2. 创建default Constructor、@OverRide setUp() (此方法用来做一些初始化操作,比如Solo.Config类)、@OverRide tearDown() (此方法用来做一些资源清理工作) (Errors will occur if not)
    3. 创建多个以test为前缀的测试方法,来满足同时测试不同的测试用例的情况。(以下可以通过代码的形式进行有选择性的做测试工作)
public void testLogin() throws Exception {
    solo.clearEditText(0);
    solo.enterText(0, "123456789");
    solo.clearEditText(1);
    solo.enterText(1, "320a991");
    solo.clickOnText(getActivity().getResources().getString(R.string.login));
    solo.sleep(30 * 1000);
    solo.assertCurrentActivity("Is this MainTabsActivity",*.*.ActivityMainTabs.class);
    solo.finishOpenedActivities();
}

在Robotium中,最核心的内容是使用Solo类执行对APP界面上控件的操控。有关于对Solo类以及其它功能类的详细操作,需参看Robotium的官方文档

  • 多设备运行并调试

    多设备运行指的是当有多台Android机器连接在同一台开发PC上,以某种方式使得同一个APK包在所有设备上进行安装并执行操作的过程。

    1. 编译Android测试包(此处当注意测试包与被测包的签名保持一致,有关于签名,此处不予赘述)
    gradle assembleAndroidTest
2. 安装Android测试包
    adb install Android测试包.apk
3. 执行测试
    adb shell am instrument -r -e class DemoTest -w 被测包的package_name.test/android.test.runner.InstrumentationTestRunner

命令在正确执行的情况下,会出现类似于以下的结果(图片涉及内部机密,不便展示)
![This is a pic for result](屏幕快照\ 2016-07-10\ 下午3.13.56.png)

命令在正确执行的情况下,也会出现类似于以下的错误结果
![This is a pic for wrong result](屏幕快照 2016-07-10 下午3.38.32.png)

将以上命令以Python脚本的形式重复执行,来完成自动化的过程。这样,当测试工程师编写完一个测试用例代码后,只需执行此脚本,本人可以去打杯咖啡或白开水(记得没事多喝白开水)什么的,或许回来时还在编译过程中呢……有关于操作设备的更多的命令请参看Google Android官方文档。

  • #### 持续完善、持续集成
    随着新需求的增加与改变,测试用例也应该随着加工与升级。Robotium也要随官方的升级而升级,以便于提高测试框架本身的稳定性。

优缺点分析

  • 优点
    1. 开发强大的测试用例
    2. 缩短测试时间
    3. 非常适用于单应用的用户场景测试
    4. 成熟的自动化框架
  • 缺点
    1. 不适宜进行跨应用测试
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值