Android Studio环境下基于Robotium的自动化黑盒测试
能力要求
- 能使用Java、C++或其他程序设计语言编写程序
- 能使用Python进行简单的脚本编写
- 能使用一些简单的Linux命令 (Android Kernal is base on Linux)
- 能大概读懂英文文档
主流自动化测试框架
- 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原理
- Clicker类
- Search类
- Solo类
当使用Solo类对象对屏幕上的一个控件进行手势操作时,此时Robotium会到已经在初始化时加载在List中的所有View对象进行匹配,这个步骤就是通过Search类和Clicker类同时工作来完成的。如果在当前Activity下含有多个相同View的对象,那么Robotium会根据内部的一个index值去找到被操作的View对象。
Robotium已经在初始化时对加载在List中的WebView对象通过WebChromeClient对象用setJavaScriptEnable(boolean)方法启用JavaScript注入,当使用Solo类对象对屏幕上WebView进行操作时,Robotium会通过该客户端启用底层的NativeDriver通过JavaScript去操作具体网页元素。
用法
- #### 环境配置
- JDK1.7、Android SDK (minimum API=11;target API=22)
- Android Studio version 2.X
- Gradle version 2.12+
- 相关命令工具的环境变量配置
android {
defaultConfig {
testInstrumentationRunner "android.test.runner.InstrumentationTestRunner"
}
}
dependencies {
androidTestCompile "com.jayway.android.robotium:robotium-solo:5.5.4"
}
- #### 测试代码编写
- 在app/src/androidTest/下新建测试类DemoTest extends ActivityInstrumentationTestCase2<T>,T为当前待测的界面的Activity。
- 创建default Constructor、@OverRide setUp() (此方法用来做一些初始化操作,比如Solo.Config类)、@OverRide tearDown() (此方法用来做一些资源清理工作) (Errors will occur if not)
- 创建多个以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包在所有设备上进行安装并执行操作的过程。
- 编译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也要随官方的升级而升级,以便于提高测试框架本身的稳定性。
优缺点分析
- 优点
- 开发强大的测试用例
- 缩短测试时间
- 非常适用于单应用的用户场景测试
- 成熟的自动化框架
- 缺点
- 不适宜进行跨应用测试