monkeyrunner 自动化测试简介

概述

monkeyrunner工具提供一个API来控制Android设备。可以写一个python脚本来安装应用,运行应用,发送键值,截图。monkeyrunner对python进行了封装,加入了一些针对Android设备的类。可以完全用python脚本来实现这些功能。

monkeyrunner

monkeyrunner介绍:

monkeyrunner有三个类:MonkeyDevice, MonkeyImage, MonkeyRunner

1. MonkeyDevice:

可以实现应用安装、卸载,按键、触击、拖拽,Activity的启动,输入等操作。

按键:

{% codeblock lang:py %} press(‘按键值’, 动作)
{% endcodeblock %}

按键值为Andriod键值表中有的值:键值表

动作:DOWN, UP, DOWNANDUP。

大部分时间用DOWNANDUP来模拟按键、松手的过程。

比如要进行一个返回键操作:

{% codeblock lang:py %} device.press('KEYCODEBACK', MonkeyDevice.DOWNAND_UP)
{% endcodeblock %}

手指触击:

{% codeblock lang:py %} touch(x坐标, y坐标,动作)
{% endcodeblock %}

这里的坐标值要通过hierarchyviewer工具来获取,动作同上。

拖拽/滑动:

{% codeblock lang:py %} drag((x, y),(x, y),持续时间,轨迹点)
{% endcodeblock %}

第一组是起始坐标,第二组终点坐标。这里的坐标值要通过hierarchyviewer工具来获取,轨迹点类似采样。

shell:

{% codeblock lang:py %} shell(‘string’)
{% endcodeblock %}

这里可以输入adb shell命令,是对monkeyrunner的有效拓展,利用shell方法,可以进行am操作。

启动Activity:

{% codeblock lang:py %} startActivity(‘string’)
{% endcodeblock %}

MonkeyDevice的其他方法参照google官方。

2. MonkeyRunner:

这里只介绍延时操作: {% codeblock lang:py %} sleep(float seconds)
MonkeyRunner.sleep(5.0) /延时5秒钟,再继续进行后续操作。
{% endcodeblock %}

3. MonkeyImage:

对Android设备截图,对截图的处理。用来生成测试结果。

测试例子:

调用monkeyrunner的方法实现安装程序,启动程序,输入,触击按钮,返回键退出程序的操作。

{% include_code monkey.py %}

monkeyrunner目前的缺陷:

  • 不支持中文字符的输入(只能输入ASC码中存在的字符)
  • 基于UI操作,一旦遇到复杂的应用,测试代码的复杂度指数增长;测试设备性能不同,
  • 需要根据设备的快慢对操作加时延;脚本的运行速度慢
  • 无法将测试结果抓取出来,只能采用截图比较。无法准确统计测试数据。
  • drag方法只能实现简单的滑动屏幕的操作,不能进行复杂的拖拽。微博客户端的下拉刷新操作无法模拟出来。

总结:

  1. monkeyrunner提供的操作有限,适合处理反复点击等小范围的操作,用来测试一个点是比较好的。可以做软件跑分、浏览器跑分等稳定性测试,或是用来安装JUnit写好的测试app。

  2. monkeyrunner不适合处理连续的操作。一旦进入到应用层,因为drag方法的不稳定,跳转就需要用点击按钮来代替,这样无法模拟用户真实的操作。 用工具来定位坐标、查找各个按钮的id,消耗时间。一旦UI改变,脚本可能就无法使用。

  3. monkeyrunner或者其他基于UI的脚本测试,对所测试系统的稳定性要求比较高。如果系统或者软件非常容易奔溃,就会终端测试脚本,无法自动化。
    基于UI的自动化测试,测试结果通过截图判断,无法脱离人工干预。

综上,基于UI的自动化测试事倍功半,是一条不归路。建议根据Android本身的特点,合理划分软件层次。测试部门用JUnit来测试API,完成逻辑测试;用人工来完成场景测试。

Android/Java方面测试书籍推荐:

  • 《Manning.JUnit.in.Action》—— 单元测试入门书籍,测试的概念可以应用到Web、Objective-C上
  • 《AndroidApplicationTesting_Guide》—— 虽然叫Android测试,但书中讲的大大超越了Android。读完此书,你将对Android测试有全新的世界观。

Neil Wang

产品经理。喜欢摄影,滑板,电影。微信公众号:NeilOnly