robotium从入门到放弃 三 基于apk的自动化测试
2016-05-10 18:10
483 查看
1.apk重签名
在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法。
首先将被测APK的签名去掉,然后用debug keystore重新进行签名,Eclipse也是使用debug keystore为默认的keystore为应用签名的,这样就可以保证被测应用和测试应用拥有同样的签名了。
Eclipse默认的debug keystore可以在这个地方设置,Window-> Preferences-> Android -> Build
去掉APK的签名,然后为之重新签名,可通过re-sign.jar这个jar来进行,下载地址:
双击打开re-sign.jar,把要测试的apk拖到界面内
点击保存按钮
稍等片刻就会得到这个包的Package.name和Main activity
2.创建基于apk测试的测试工程
新建一个Android Test Project
工程命名为YrhxTest
选择This project
新建libs目录,将robotium的jar添加进去,然后将该jar包添加到build path中
3.编写第一个基于apk测试自动化用例
新建一个包, com.yrhx.test,新建第一个测试类FirstYrhxTest,继承ActivityInstrumentationTestCase2,具体代码如下:
package com.yrhx.yrhxClient.test; import com.robotium.solo.*; import android.test.ActivityInstrumentationTestCase2; @SuppressWarnings("rawtypes") public class login_1 extends ActivityInstrumentationTestCase2 { private Solo solo; private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.yrhx.yrhxClient.activity.WelcomeActivity"; private static Class<?> launcherActivityClass; static{ try { launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } @SuppressWarnings("unchecked") public login_1() throws ClassNotFoundException { super(launcherActivityClass); } public void setUp() throws Exception { super.setUp(); solo = new Solo(getInstrumentation()); getActivity(); } @Override public void tearDown() throws Exception { solo.finishOpenedActivities(); super.tearDown(); } public void testRun() { // Wait for activity: 'com.yrhx.yrhxClient.activity.WelcomeActivity' solo.waitForActivity("WelcomeActivity", 2000); // Wait for activity: 'com.yrhx.yrhxClient.activity.MainActivity' assertTrue("MainActivity is not found!", solo.waitForActivity("MainActivity")); // Click on 账户 solo.clickOnView(solo.getView("rb_tab_user")); // Wait for activity: 'com.yrhx.yrhxClient.activity.NewLoginActivity' assertTrue("NewLoginActivity is not found!", solo.waitForActivity("NewLoginActivity")); // Scroll View to the right side solo.scrollViewToSide(solo.getView("vp_login"), Solo.RIGHT); // Click on 15629171568 solo.clickOnView(solo.getView("et_user_mobile", 1)); // Enter the text: '1562917xxxx' solo.clearEditText((android.widget.EditText) solo.getView("et_user_mobile", 1)); solo.enterText((android.widget.EditText) solo.getView("et_user_mobile", 1), "1562917xxxx"); // Click on Empty Text View solo.clickOnView(solo.getView("et_user_password")); // Enter the text: 'xxxxxx' ,input yours password solo.clearEditText((android.widget.EditText) solo.getView("et_user_password")); solo.enterText((android.widget.EditText) solo.getView("et_user_password"), "xxxxxx"); // Click on 登 录 solo.clickOnView(solo.getView("bt_login", 1)); // Click on ImageView solo.clickOnView(solo.getView("ib_exit")); } }
4.安装应用,运行自动化用例
通过adb install安装重签名的apk
修改AndroidMainfest.xml里instrumentation的targetPackage的值为上面re-sign.jar获得的package name,即com.yrhx.yrhxClient
鼠标右击FirstQunarTest,选择Run As -> Android JUnit Test,注意观察屏幕,被测应用就会被启动起来。
5.基于源码测试 vs 基于APK测试
Robotium既支持基于源码的测试也支持基于APK的测试,其实原理是一样的,只要确保被测应用与测试应用具有相同的签名即可。如果有源码的情况下建议进行基于源码的测试,因为你可以直接方便的引用源码中的一些现成的方法来帮助开展自动化测试,控件定位也比较方便,可以直接引用源码R文件的id来进行定位,如果某个控件的显示文本变了,但其id仍然保持不变,如果是通过id定位的,这时候就无需修改测试代码了。如果在没用源码的情况下,又想替代一些手工测试,还是可以采用基于APK的测试,只是灵活度方面可能不如基于源码方式而已。
相关文章推荐
- MDI多文档模板中tab切换事件消息处理定义
- ansible学习笔记(二) -- roles
- Oracle 11.2.0.4.5 RAC升级OJVM_11.2.0.4.160419_psu出现的问题
- c++作业5
- Thinkphp中自己组合的数据怎样使用框架的分页
- CodeForces - 670D2 Magic Powder - 2 (二分&模拟)
- 性能评测方法、各评测项标准总结
- CUDA之——VS调试出现“无法查找或打开 PDB 文件”的警告
- c++作业5
- Android—进度条
- HDU 5236 Article(概率dp+贪心)
- 这些道理没人告诉你读书笔记
- matlab 源码阅读
- win10快捷键大全
- android 获取路径目录方法以及判断目录是否存在,创建目录
- android中include标签的使用
- ionic开发插件之ngCordova配置安装(搬运)
- oracle 查询表的大小,表空间的使用情况,默认表空间
- OneZero第七周第一次站立会议(2016.5.9)
- 慢请求调查方法(先占个坑)