您的浏览器不支持CSS3,建议使用Firfox、Chrome等浏览器,以取得最佳显示效果

Android测试初探(五) Rototium框架的使用、黑盒与白盒测试

Android, Android测试初探 995℃ 0 2年前 (2016-02-15)

Robotium框架

Robotium是一个很常用的自动化测试框架,既可以进行白盒测试,也可以进行黑盒测试。Robotium实质上是建立在Instrumentation上的一系列工具方法。

由于Instrumentation通常不能获取系统权限(需要系统签名,而系统签名文件在编译系统时已经被编译进去,不能获取到),于是Robotium只能进行单个APP的测试,不能跨应用测试。

基于Rototium框架的测试

Robotium也是一款比较成熟的安卓测试框架,不仅可以进行白盒测试,也可以进行黑盒测试。只要能获取Activity和Instrumentation实例,即可使用Robotium。因此直接使用Instrumentation Test Runner即可。

相比Espresso,Robotium的配置简单很多,在gradle中只需要添加一个依赖项即可,基本上也不用担心冲突。

  1. dependencies {
  2. androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.1'
  3. }

还是和Espresso同样的一个例子,点击按钮,并检查文本框中是否展示了预期的文本,代码如下。

  1. public class MainActivityTest extends ActivityInstrumentationTestCase2 {
  2. private Solo solo;
  3. public MainActivityTest() {
  4. super(MainActivity.class);
  5. }
  6. @Override
  7. protected void setUp() throws Exception {
  8. super.setUp();
  9. solo = new Solo(getInstrumentation(), getActivity());
  10. }
  11. public void testHello() throws Exception {
  12. // 等待Activity启动
  13. solo.waitForActivity("MainActivity", 3000);
  14. // findView
  15. View button = solo.getView(R.id.button);
  16. TextView text = (TextView) solo.getView(R.id.text);
  17. // 点击按钮
  18. solo.clickOnView(button);
  19. // 延时
  20. solo.sleep(100);
  21. // 检查测试结果
  22. assertEquals(solo.getString(R.string.hello_test), text.getText());
  23. // 延时
  24. solo.sleep(5000);
  25. }
  26. }

基于Robotium的黑盒测试

Robotium也可以用于黑盒测试,很多地方和前面的白盒测试写法类似;不同是,黑盒测试由于不能直接访问待测APP源码,所以会使用反射来访问。

白盒测试直接向父类构造函数传入Class对象获取Activity实例,黑盒测试则可以通过反射获取Activity的Class,对比如下。

  1. public class MainActivityBaseTest extends ActivityInstrumentationTestCase2 {
  2. public MainActivityBaseTest() {
  3. super(com.jzj1993.unittest.MainActivity.class);
  4. }
  5. }
  1. public class MainActivityBaseTest extends ActivityInstrumentationTestCase2 {
  2. public MainActivityBaseTest() throws ClassNotFoundException {
  3. super(Class.forName("com.jzj1993.unittest.MainActivity"));
  4. }
  5. }

在白盒测试中可以直接访问R.class从而取得资源,而黑盒测试则利用Context.getResources().getIdentifier(),从字符串获取资源。示例代码分别如下。

  1. solo.getView(com.jzj1993.unittest.R.id.text);
  1. solo.getView("com.jzj1993.unittest:id/text");

黑盒测试时,在设备上安装待测APK,而测试代码在单独的工程中编译,最后添加和待测APK一致的签名,安装到设备上运行即可。

2016-5-11补充:在独立的工程中用Android Studio进行Robotium黑盒测试,具体的配置方法可参考本系列第七篇

来自为知笔记(Wiz)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

0

暂无评论

评论前:需填写以下信息,或 登录

用户登录

忘记密码?