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. Apache多端口配置

    修改http.conf监听多个端口 Listen 80 Listen 8001 Listen 8002 配置站点 <VirtualHost *:8001> ServerName *:800 ...

  2. 配置Eclipse支持java和xml文件的代码补全功能

    百度经验:jingyan.baidu.com 本文介绍如何配置Eclipse,使得在编写代码时无论是*.java还是*.xml文件都能够通过使用ALT+/快捷键实现代码不全的功能. 本文实验环境为:W ...

  3. MySQL解决"is marked as crashed and should be repaired"故障

    具体报错如下: Table '.\Tablename\posts' is marked as crashed and should be repaired 提示说论坛的帖子表posts被标记有问题,需 ...

  4. 《LED调光-DMX512灯光协义接收控制》转

    源:http://blog.163.com/zhaojun_xf/blog/static/30050580200951023046891 来自: 作者:龙图开发网 文章来源:龙图开发网 时间:2009 ...

  5. check_partition_aft_merge.sql

    spool ./05_check_partition_aft_merge.log @/tmp/rda/chk_freets set echo on feedback on set pagesize 4 ...

  6. Commons Codec基本使用(转载)

    在实际的应用中,我们经常需要对字符串进行编解码,Apache Commons家族中的Commons Codec就提供了一些公共的编解码实现,比如Base64, Hex, MD5,Phonetic an ...

  7. MFC中的NMHDR结构体和NMUPDOWN结构体

    建立spin控件,创建UDN_DELTAPOS一个消息函数后: void CSpinDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) { NM ...

  8. nodejs 教程

    http://www.runoob.com/nodejs/nodejs-http-server.html

  9. 利用JavaAPI访问HDFS的文件

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  10. jvm 配置,看看

    http://my.oschina.net/qiangzigege/blog/661757