robotium从入门到放弃 三 基于apk的自动化测试
1.apk重签名
在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法。
首先将被测APK的签名去掉,然后用debug keystore重新进行签名,Eclipse也是使用debug keystore为默认的keystore为应用签名的,这样就可以保证被测应用和测试应用拥有同样的签名了。
Eclipse默认的debug keystore可以在这个地方设置,Window-> Preferences-> Android -> Build

去掉APK的签名,然后为之重新签名,可通过re-sign.jar这个jar来进行,下载地址:
链接: http://pan.baidu.com/s/1eS0PBwe 密码: itjs
安装包下载地址:链接: http://pan.baidu.com/s/1hs33wBa 密码: rrya
双击打开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的测试,只是灵活度方面可能不如基于源码方式而已。
robotium从入门到放弃 三 基于apk的自动化测试的更多相关文章
- Kafka从入门到放弃(三) —— 详说生产者
上一篇对Kafka做了简单介绍,还没看的朋友可以点击下方链接. Kafka从入门到放弃(一) -- 初识别Kafka 消息中间件必须与生产者和消费者一起存在才有意义,这次先来聊聊Kafka的生产者. ...
- hive从入门到放弃(三)——DML数据操作
上一篇给大家介绍了 hive 的 DDL 数据定义语言,这篇来介绍一下 DML 数据操作语言. 没看过的可以点击跳转阅读: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--D ...
- robotium从入门到放弃 二 第一个实例
1.导入被测试的源码 我们先下载加你计算器源码,下载地址: https://robotium.googlecode.com/files/AndroidCalculator.zip 如果地址被墙无法现在 ...
- robotium从入门到放弃 四 Robotium常用API
获取控件 getText() getEditText() getButton() getImage() getImageButton() getEditText() getView() getWe ...
- robotium从入门到放弃 一 测试开发环境搭建
1.JDK的安装及环境变量的配置 配置JAVA的运行环境,添加完环境变量后,可以打开Windows命令处理程序窗口,通过执行命令java -version验证环境变量是否添加成功.如果添加成功会 ...
- storm从入门到放弃(三),放弃使用《StreamId》特性。
序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用. StreamId是stor ...
- Go语言从入门到放弃(三) 布尔/数字/格式化输出
本章主要介绍Go语言的数据类型 布尔(bool) 布尔指对或者错,也就是说bool只有两个值, True 或 False 两个类型相同的值可以使用比较运算符来得出一个布尔值 当两个值是完全相同的情况下 ...
- MyBatis从入门到放弃三:一对一关联查询
前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是使用association属性和resultM ...
- storm从入门到放弃(三),放弃使用 StreamId 特性
序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用. StreamId是stor ...
随机推荐
- windows下,emacs的配置文件在哪儿?
配置文件_Emacs在你的家目录下"C:/Documents and Settings/username/Application Data". 在Window 7下,配置文件目录在 ...
- 【简单dp】 poj 2346
题意:给定一个N 求一共有多少个N位数 前N/2个数的和等于后N/2个数的和思路:令F[i][j] 为sum值为j的i位数的个数则问题转化成 求 sum(F[n/2][j] * F[n/2][ ...
- JAVA实现二进制,十六进制输出
public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-gener ...
- ARM汇编指令的一些总结-转
ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了.比较有用的是MOV B BL LDR STR还是通过具体汇编代码来学习吧.@ disable watch ...
- 认识ExtJS(04)--常见Web框架的ExtJS改造
常见Web框架的ExtJS改造 怎样开始改造工作? 改造主要集中在对表现层的修改,底层的数据库访问不需要进行任何的变动.也就是说主要集中早这2个方面:一方面是表现部分即是JSP页面:另一方面是客户端与 ...
- Gulp自动构建前端开发一体化
gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试.检查.合并.压缩.格式化.浏览器自 ...
- PAT (Advanced Level) 1045. Favorite Color Stripe (30)
最长公共子序列变形. #include<iostream> #include<cstring> #include<cmath> #include<algori ...
- HDU 3201 Build a Fence
水题 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> us ...
- 随机获取部分List<Object>集合
随机返回list对象 /** * 返回随机List * @param list 备选 * @param selected 备选数量 * @return */ public List getRandom ...
- 基于心跳的socket长连接
http://coach.iteye.com/blog/2024444 基于心跳的socket长连接 博客分类: http socket 案例: 心跳: socket模拟网页的报文连接某个网站,创建t ...