Android测试工具Robotium(Demo篇)


Robotium简介

Robotium是一款基于Instrumentation二次封装的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。Robotium结合Android官方提供的测试框架达到对应用程序进行自动化的测试。另外,Robotium 4.0版本已经支持对WebView的操作。Robotium 对Activity,Dialog,Toast,Menu 都是支持的。


Robotium特点:

Quite popular for android testing
可以对源码测试,也可以测试apk
可以测试Android Native和Android Hybrid App
可以测试网络链接和声音等
open Source
社区较活跃,资料比较好找
针对单个Activity测试


Robotium 部分API:

  • 等待timeout毫秒一个名字为name的Activity启动:
    waitForActivity(String name, int timeout)
    实例:assertTrue(“无法启动启动类”, solo.waitForActivity (“MainActivity”, 30000));

  • Robotium将睡眠设置的毫秒数:
    sleep(int time)
    实例:solo.sleep(5000)

  • 清空EditText的内容:
    clearEditText(android.widget.EditText editText)
    实例:solo.clearEditText((EditText)solo.getView (“edtInsertName”))

  • 根据按钮上的文字点击按钮:
    clickOnButton(String text)
    实例:solo.clickOnButton(“^绿色$”);

  • 根据文字点击控件:
    clickOnText(String text)
    实例:solo.clickOnText(“控件上显示文字”);

  • 输入内容:
    enterText(android.widget.EditText editText, String text)
    solo.enterText((EditText)solo.getView("edtInsertName"), "Robotium?")

  • 返回:
    goBack()

  • 截屏并保存为设置的名字:
    takeScreenshot(String name)
    默认保存在: /sdcard/Robotium-Screenshots/

  • 解锁屏幕:
    unlockScreen()

更多API


Robotium使用方法:

  • APK重签名

    • 查看APK签名状态
      jarsigner -verify -verbose -certs C:\Users\Administrator\Desktop\example-sign.apk

    • 工具签名:

      直接将apk拖入到re-sign.jar中后自动去除签名,重新再签名;

      1.直接双击re-sign.jar
      2.使用命令打开re-sign.jar

      1) 打开命令提示符:cmd
      2) cd .../.android   (re-sign.jar的路径)
      3) 运行java -jar re-sign.jar,打开resign工具
      
    • 手动签名:

      • 去签名:将apk文件后缀改为.zip,然后从winrar中删除META-INF文件夹,删除后重新将文件名改成apk的后缀
      • 重新签名:
> jarsigner -keystore C:\Users\Administrator\.android\debug.keystore -storepass android -keypass android C:\Users\Administrator\Desktop\example.apk  androiddebugkey

>zipalign  4  C:\Users\Administrator\Desktop\example.apk 
C:\Users\Administrator\Desktop\example-sign.apk

zipalign能够使apk文件中未压缩的数据在4个字节边界上对齐(4个字节是一个性能很好的值)

jdk 1.7版本,需要加上参数:-digestalg SHA1 -sigalg MD5withRSA

>jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore C:\Users\Administrator\.android\debug.keystore -storepass android -keypass android C:\Users\Administrator\Desktop\example.apk  androiddebugkey

>zipalign  4  C:\Users\Administrator\Desktop\example.apk 
C:\Users\Administrator\Desktop\example-sign.apk

PS: resigner.jar是可以重签名的,只是它默认使用的key在user/.android/debug.keystore,如果这个地址没有这个文件,就只会去签名而已。adt-bundle的包在某个版本后,它包含的eclipse默认的debug签名位置变成了bundle的位置,所以造成了很多人使用resigner.jar不成功。

windows自动签名脚本:需添加:winrar的环境变量

REM @ECHO OFF
REM ②重新签名下载的K米APP
winrar d KM_Android.apk META-INF
REM 使用JARSIGNER命令对apk文件使用统一的key进行重签名操作
REM 第一步:生成keystore 
REM keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 20000
REM 第二步:jarsigner签名apk
jarsigner -verbose -keystore ./debug.keystore -storepass android -signedjar KM_Android_signed.apk KM_Android.apk androiddebugkey
REM ③zipalign命令对重签名后的文件进行优化
zipalign -v 4 KM_Android_signed.apk KM_Android_signed_zipalign.apk
REM ④卸载安装K米APP
echo "开始安装最新的K米APP"
adb uninstall com.evideo.MobileKTV
adb wait-for-device install -r ./KM_Android_signed_zipalign.apk
echo "最新安装包部署完成"
REM 清理环境
del KM_Android.apk
del KM_Android_signed.apk
del KM_Android_signed_zipalign.apk
PAUSE
REM @ECHO ON
  • 安装重签名APK

    在真机或模拟机中安装重新签名后的apk文件

    1. 打开命令提示符:cmd
    2. cd …/sdk/platform-tools (重签名的APK路径)
    3. 打开要安装apk的模拟机 (真机打开debug模式)
    4. 运行命令:adb install package.apk

Eclipse中新建工程

在eclipse中,新建一个Android Test Project工程,进行配置,使得自动化脚本与要测试的apk进行关联。

  • 打开Eclipse,点击File->New->Project->Android Test Project –>测试工程名->This project->android版本->finish
    在该项目的SRC文件夹下创建一个包new->package->com.app.example,在该包下创建LoginTest类,new->class如下:
package com.app.example;
//需要导入的包
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import com.jayway.android.robotium.solo.Solo;
@SuppressWarnings("rawtypes")
public class LoginTest extends ActivityInstrumentationTestCase2 {
       //定义变量
public Solo solo;
public Activity activity;
private static Class<?> launchActivityClass;
//对应re-sign.jar生成出来的信息框里的两个值
private static String mainActiviy = " com.app.example.ui.MainActivity ";
private static String packageName = " com.app.example ";
         static {
                  try {
                      launchActivityClass = Class
.                     forName(mainActiviy);
                    } catch (ClassNotFoundException e)
                   {
                  throw new RuntimeException(e);
                  }
                 }
@SuppressWarnings("unchecked")
public LoginTest() { 
super(packageName, launchActivityClass);
                          }
@Override
protected void setUp() throws Exception {
super.setUp();
this.activity = this.getActivity();
this.solo = new Solo(getInstrumentation(), getActivity());
}
public void testLoginWithIncorrentUsernameAndPassword() {
              //一定时间内等待text出现,否则就出错
              solo.waitForText("Log In", 1, 10000);
              //点击text “Log In”
              solo.clickOnText("Log In");
              //一定时间内等待text出现,否则就出错
              solo.waitForText("OK", 1, 2000);
              //输入text
              solo.enterText(0, "13559494170");
              solo.enterText(1, "123456");
              //点击text “OK”
              solo.clickOnText("OK");
              //等待出现下面的text后,进行验证
              solo.waitForText("Incorrect ID number or password.", 1, 10000);
              assertTrue(solo.searchText("Incorrect ID number or password.",true));
}
@Override
public void tearDown() throws Exception {
try {
this.solo.finishOpenedActivities();
} catch (Throwable e) {
e.printStackTrace();
}
this.activity.finish();
super.tearDown();
}
}
  • 右键该项目,选择property然后选择java build path, 选择 Add External JARs,选择下载到的robotium.jar
    或者项目中新建lib文件夹,将robotium.jar拖入lib中,右键项目,点Build path->configure build path->libraries->Add JARS;Order and Export勾选中robotium.jar
    添加JUnit类;new->JUnit Test Case ,勾选setup()和 teardown(),name以大写字母开头
    或者Add library,点击JUnit,选中JUnit 4 点击OK

  • 修改项目下的AndroidMainfest.xml文件,使得红色字体的package名与resign生成的名字一致
    <instrumentation
      android:name ="android.test.InstrumentationTestRunner"
    android:targetPackage ="com.app.example" />

  • 在自动化脚本测试类中,声明初始类,也要与resign生成的main activity类名一致
    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME ="com.app.example.ui.MainActivity"

  • run as android junit test

  • 做完以上步骤,就可以在eclipse中的Android Test Project中开发自动化测试脚本,并在安装好的apk上运行了。
    adb shell am instrument -w [测试程序包名]/[instrumentation name]
    adb shell am instrument -w com.app.example/android.test.InstrumentationTestRunner


获取控件ID-两种方法
Demo 1:

Android 实用工具Hierarchy Viewer是随AndroidSDK发布的工具,在tools文件夹下,名为hierarchyviewer.bat
1)Cmd:输入hierarchyviewer
2)选中需要查看的应用,点击:”Load View Hierarchy”

Demo 2:

查看logcat日志,点击对应Activity


备注: Window环境实践可行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值