Android自动化测试:初识和选择

需要进行自动化测试软件,体验了一下常见的自动化测试方案。
了解之后选出适合项目使用的方案。
记录下测试时的所得,方便自己,方便别人。

Monkey

介绍:

Monkey 是 Android 的一个命令行工具,所以只需 sdk\platform-tools\adb.exe 工具,无需其他工具。【方便】【快速】的向设备系统【随机】发送伪用户事件流。测试内容【不可控】,适合对软件界面UI进行压力测试。

直接测试:

adb shell monkey -p <your.package.name> -vvv 500  >  monkeytest.txt  

带日志测试:

  1. 进入目标设备 Linux Shell 环境:adb shell 或 (adb -s 设备序列号 shell
  2. 使用工具开启测试:monkey -p your.package.name -v 500

命令解释:

  • -p:表示对象包
  • -v: 为 verbose的缩写,3个v就是输出等级1至3的所有事件.
  • > monkeytest.txt:使用管道命令将输出结果放到一个文本里面方便查看
  • 启动指定的应用程序,并向其发送500个伪随机事件

MonkeyRunner

介绍:

MonkeyRunner 是一个包含 API 的工具包,通过 sdk\tools\monkeyrunner.bat 进行调试。但【API接口较少】,支持【python】脚本进行【二次开发】拓展测试功能。【可录制】操作脚本,但是【依赖屏幕坐标】,执行【很慢】,操作之间需要加入等待时间。【可截图】保存测试结果

功能:

  1. 多设备控制:可以同一时间,连接多个、启动多个、运行多个设备或模拟器。模拟器也可以自动启动和关闭(需提前配置模拟器)。
  2. 功能测试:自动贯彻一次某个应用的功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
  3. 回归测试:将某个应用的运行结果截屏,与既定已知正确的结果截屏比较,以此测试应用的稳定性。
  4. 可扩展的自动化:monkeyrunner只是个工具包,可以借助python脚本定制专属测试系统。

注意:

如有中文,必须保存为UTF-8格式,否则出现ASCNII无法支持错误

使用:

  1. cmd进入sdk\tools目录下输入:monkeyrunner your.py【运行指定的py脚本】

运行录制脚本

  1. 也可以使用录制py脚本导出mr文件,在使用执行py脚本执行录制时的操作。动作之间需要加延迟
    录制py脚本代码

使用录制的脚本

from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner.recorder import MonkeyRecorder as recorder

device = mr.waitForConnection()
recorder.start(device)

播放py脚本

import sys
from com.android.monkeyrunner import MonkeyRunner

CMD_MAP = {
    'TOUCH': lambda dev, arg: dev.touch(**arg),
    'DRAG': lambda dev, arg: dev.drag(**arg),
    'PRESS': lambda dev, arg: dev.press(**arg),
    'TYPE': lambda dev, arg: dev.type(**arg),
    'WAIT': lambda dev, arg: MonkeyRunner.sleep(**arg)
    }

def process_file(fp, device):
    for line in fp:
        (cmd, rest) = line.split('|')
        try:
            # Parse the pydict
            rest = eval(rest)
        except:
            print 'unable to parse options'
            continue

        if cmd not in CMD_MAP:
            print 'unknown command: ' + cmd
            continue

        CMD_MAP[cmd](device, rest)


def main():
    file = sys.argv[1]
    fp = open(file, 'r')

    device = MonkeyRunner.waitForConnection()

    process_file(fp, device)
    fp.close();


if __name__ == '__main__':
    main()

录制的mr文件内容

TOUCH|{'x':685,'y':560,'type':'downAndUp',}

WAIT|{'seconds':1.0,}

DRAG|{'start':(432,1536),'end':(432,307),'duration':1.0,'steps':500,}

PRESS|{'name':'MENU','type':'downAndUp',}

PRESS|{'name':'HOME','type':'down',}

PRESS|{'name':'SEARCH','type':'up',}

TYPE|{'message':'input text',}

共享的常用脚本:

常用共享脚本

UIAutomator

介绍:

Google 退出亲儿子,通过 sdk/platforms/android-XXX\uiautomator.jar。【API接口多】,可对 【android 所有事件】 【不依赖坐标】进行操作。可分析UI界面【控件ID、Text、focusable等等属性】,可对【UI层级】进行分析。基于【Java】,最后通过【ANT】工具将测试脚本编译成【Jar包脚本】可通过 【adb运行】在所有 Android 设备。但是【Android 版本需要21以上】,即 android-XXX >= 21

使用:

导入jar: sdk\platforms\android-21\uiautomator.jar版本不能低于21
导入library:Junit4
新建类继承 UiAutomatorTestCase 类,并进行测试操作

public class MatorTest extends UiAutomatorTestCase{

    public void test() throws RemoteException {

        UiDevice device = getUiDevice();

        // 亮屏
        device.wakeUp();
        sleep(1000);

        // 按压Home
        device.pressHome();
        sleep(1000);
    }
}

编译生成脚本(sdk\tools目录下):

android create uitest-project -n  <name> -t <target-android-sdk-ID> -p <project_path>
- `name`:将要生成 jar 包的名字
- `project_path`:项目工程的路径
- `target-android-sdk-id`:和导入 uiautomator.jar 所在的android版本一致的ID。用 android list 查看具体ID

成功提示:Added file 工程目录\build.xml

脚本文件

ANT编译脚本生成jar包(工程目录下):
ant build
会在 工程目录\bin\ 生成 jar 包。就是 uiautomator 脚本

ant编译成jar文件

将 jar 包 push 到手机的 data/local/tmp 目录下

adb push <jar文件路径> data/local/tmp

启动我们 push 进入的 uiautomator 脚本

adb shell uiautomator runtest <jar文件名> -c <工程中的类名(包含包名)>

运行脚本

GT

介绍:

腾讯MIG内部使用”移动应用脱机白盒调试组件“,只需【手机】装软软件,即可【随时随地】调试手机上安装的软件。支持分析调试软件的【内存占用】【CPU占用】【流量耗用】【电池温度】【流畅的】等功能。
可【保存调试日志】在文本文档中,方便查看。

使用:

手机下载安装GT软件
4.1

Rubotium

介绍:

Robotium 是为了弥补 Android 单元测试框架 Instrumentation 中的 ActivityinstrumentationTestCase2 类测试功能支持不足而出现的。【针对APK】提供了更多的【控件操作函数】,通过反射手段【调用系统隐藏功能】等。运行时【绑定GUI组件】【不依赖屏幕坐标】,能【更简单、快速】实现测试功能。新建【Android Test Project】工程,工程测试脚本编译成【没有主界面的APK程序】,可通过 Android Shell 环境进行启动,需要安装两个【APK程序】,也整合【Maven】【ANT】运行测试。

使用:

  1. 新建测试工程:File - New Project - Android Test Project
  2. 导入Jar包依赖:robotium-solo-5.1.jar
  3. 创建 JUnit Test Case 类继承 ActivityInstrumentationTestCase2。注意是 Junit4。
  4. 利用 Solo 等对象进行调试代码实现
public class MyTest1 extends ActivityInstrumentationTestCase2 {

    private Solo solo;

    public MyTest1() {
        super(MainActivity.class);
    }

    @Before
    protected void setUp() throws Exception {
        super.setUp();
        solo = new Solo(getInstrumentation(), getActivity());
    }

    @After
    protected void tearDown() throws Exception {
        solo.finishOpenedActivities();
        super.tearDown();
    }

    @Test
    public void test() {

        solo.clickOnButton("button1");
        solo.sleep(1000);

        solo.clickOnButton("button2");
        solo.sleep(1000);

        solo.clickOnButton("button3");
        solo.sleep(1000);

        solo.clickOnButton("跳转");
        solo.sleep(1000);

        solo.goBack();
        solo.sleep(1000);

    }
}
  1. 右键测试工程:Run As Android JUnit Test
  2. 也可以通过android am 工具启动(前提是软件和测试软件都安装了)
    • adb shell 进入手机shell环境
    • pm list instrumentation (查看当前手机安装了哪些 instrumentation)
    • am instrument -w 程序报名/android.test.InstrumentationTestRunner(运行测试程序,注意此类没有主界面)
      5.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值