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的自动化测试的更多相关文章

  1. Kafka从入门到放弃(三) —— 详说生产者

    上一篇对Kafka做了简单介绍,还没看的朋友可以点击下方链接. Kafka从入门到放弃(一) -- 初识别Kafka 消息中间件必须与生产者和消费者一起存在才有意义,这次先来聊聊Kafka的生产者. ...

  2. hive从入门到放弃(三)——DML数据操作

    上一篇给大家介绍了 hive 的 DDL 数据定义语言,这篇来介绍一下 DML 数据操作语言. 没看过的可以点击跳转阅读: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--D ...

  3. robotium从入门到放弃 二 第一个实例

    1.导入被测试的源码 我们先下载加你计算器源码,下载地址: https://robotium.googlecode.com/files/AndroidCalculator.zip 如果地址被墙无法现在 ...

  4. robotium从入门到放弃 四 Robotium常用API

      获取控件 getText() getEditText() getButton() getImage() getImageButton() getEditText() getView() getWe ...

  5. robotium从入门到放弃 一 测试开发环境搭建

    1.JDK的安装及环境变量的配置    配置JAVA的运行环境,添加完环境变量后,可以打开Windows命令处理程序窗口,通过执行命令java -version验证环境变量是否添加成功.如果添加成功会 ...

  6. storm从入门到放弃(三),放弃使用《StreamId》特性。

    序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用. StreamId是stor ...

  7. Go语言从入门到放弃(三) 布尔/数字/格式化输出

    本章主要介绍Go语言的数据类型 布尔(bool) 布尔指对或者错,也就是说bool只有两个值, True 或 False 两个类型相同的值可以使用比较运算符来得出一个布尔值 当两个值是完全相同的情况下 ...

  8. MyBatis从入门到放弃三:一对一关联查询

    前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是使用association属性和resultM ...

  9. storm从入门到放弃(三),放弃使用 StreamId 特性

    序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用. StreamId是stor ...

随机推荐

  1. Servlet程序开发-- 过滤器

    3种servlet:简单Servlet,过滤Servlet,监听Servlet 1. 简单Servlet:是作为一种程序所必须的开发结构保存下来的. 2. 过滤Servlet:过滤器使用的不是Http ...

  2. EtherChannel Cisco 端口聚合详解

    冗余连接及其实现 无论什么设备都无法保障运行的绝对稳定性,即使再优秀的产品也无法保证24×7不间断的工作.除去设备或模块损坏.传输线路中断等硬件故障原因以外,还可能由于网络流量过载.任务负荷过大而导致 ...

  3. RTC-高效率实现TimerTicker编解码

    源:RTC-高效率实现TimerTicker编解码 嵌入式系统中时间是很重要的,在以往的系统中设计者常常使用一种叫RTC的专用芯片来维持时间,这种芯片种类很多接口形式也很多,如常用的DS1302.PC ...

  4. LINQ To SQL && Lambda 使用方法小结 (转)

    1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname,ssex,class from studentLinq: from s in Students   ...

  5. Struts2.3.16日志(中)

    Result Configuration --Result 配置 当一个操作类方法完成后,它将返回一个字符串.字符串的值是用来选择一个元素的结果.一个操作映射的结果往往会有一组代表不同的可能的结果.一 ...

  6. .NET反射应用

    .Net中,在编写框架时,反射是最长用的一个知识点,在这举个小例子,旨在说明反射如何应用:本文只程序中只涉及到System.Type的应用,通过这个类可以访问关于任何数据类型的信息,注释部分涉及到Sy ...

  7. 一些简单的例子让你在Java中能更好的学习并理解循环结构(1)!

    一.java中流程控制方式采用三种基本流程结构:顺序结构,选择(分支)结构,循环结构. 1.[if-else 结构] if(1>2){ system.out.println("if条件 ...

  8. 15个最佳jQuery的翻页书效果的例子

    在这里,你会发现15的jQuery的翻页书的插件,提供了良好的页面翻转的经验,并帮助创建类似书本的效果. jQuery的增添了一道亮丽的过渡到实际的页面在一本书或杂志HTML5. 1. BookBlo ...

  9. winform无法查看设计器

    在代码中右键无法查看设计器.将无效的引用去除,重新生成即可.

  10. WPF教程:依赖属性

    一.什么是依赖属性 依赖属性就是一种自己可以没有值,并且可以通过绑定从其他数据源获取值.依赖属性可支持WPF中的样式设置.数据绑定.继承.动画及默认值. 将所有的属性都设置为依赖属性并不总是正确的解决 ...