MonkeyRunner 最全配置+工具类的介绍和应用以及综合实例的演示

了解:MonkeyRunner是使用Jython来写的(也就是使用JAVA编程语言实现的Python),通过MonkeyRunner API 可以写一个Python的程序来模拟控制Android设备中的APP,可以通过在测试其稳定并同伙截屏的方式记录出现的问题

1、MonkeyRunner的功能介绍:

1、多设备控制:API可以跨多个设备,一次启动全部模拟器来实施测试;

2、功能测试:为应用自动执行一次功能测试,然后观察输出结果的截屏。

3、可扩展自动化:因为MonkeyRunner是一个API工具包,可以用来开发基于Python模块的整个系统来控制Android设备;

2、MonkeyRunner 和 Monkey的区别:

MonkeyRunner和Monkey之间没有什么直接的关系,Monkey是在设备中直接运行adb shell命令生成随机事件来进
行测试的,而MonkeyRunner则是通过API发送特定的命令和事件来控制设备。

3、MonkeyRunner的环境搭建:

关于MonkeyRunner的环境变量的配置同样是在 Android_SDK包中的 Tools 中,可参考:Android_SDK环境变量配置

安装后的结果检测,在 Terminal 输入 monkeyrunner 后出现如下结果:

退出直接按: Ctrl + d

4、MonkeyRunner的主要工具类介绍:

1、MonkeyRunner:monkeyrunner程序的一类实用方法。此类提供了将monkeyrunner连接到设备或模拟器的方
法。它还提供了为monkeyrunner程序创建UI以及显示内置帮助的方法。

2、MonkeyDevice:表示设备或模拟器。此类提供了安装和卸载软件包,启动Activity以及向应用程序发送键盘
或触摸事件的方法。您还可以使用此类来运行测试包。

3、MonkeyImage:表示屏幕捕获图像。此类提供捕获屏幕,将位图图像转换为各种格式,比较两个MonkeyImage
对象以及将图像写入文件的方法。

具体内容可参考 MonkeyRunner API 官网:https://www.android-doc.com/tools/help/monkeyrunner_concepts.html

4.1 MonkeyRunner 类:

 MonkeyRunner 提供连接真机和模拟器、输入、暂停以及警告等方法 

4.2 MonkeyDevice 类:

 MonkeyDevice 提供了安装和写在程序包、开启 Activity、发送按键和点击事件以及运行测试包等方法

常用的方法:

1、installPackage(string path)

2、removePackage(strign package)

3、startActivity(string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags)

4、touch(integer x, integer y, integer type)
integer x:表示 x 坐标值
integer y:表示 y 坐标值
integer type:表示事件的类型(如 DOWN、UP、DOWN_AND_UP)

5、drag(tuple start, tuple end, float duration, integer steps)
tuple start:拖拽的起始位置,为 tuple 类型的(x,y)坐标点
tuple end:拖拽停止的位置,为 tuple 类型的(x,y)坐标点
float duration:拖拽手势持续的时间,默认为1.0s
integer steps:插值点时要采取的步数,默认为10

4.2.1 实例应用:

连接设备,安装 豌豆荚App并启动

4.2.2 代码

from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md

print('connecting device . . . ')
device=mr.waitForConnection()

print('installing app . . .')
device.installPackage('/存放APP的路径/App/wandoujia.apk')

package = 'com.wandoujia.phoenix2'
activity = 'com.pp.assistant.activity.PPMainActivity'
runComponent = package + '/' + activity

print('launching app . . .')
device.startActivity(component=runComponent)

4.2.3 执行代码

# 在 Terminal 中输入:

monkeyrunner /代码存放的路径/wdj_monkey.py

4.2.4 执行效果

4.3 MonkeyImage 类:

MongkeyImage 类是在测试过程中用来保存各种格式的测试截图,可以用来进行图像对比。

常用方法:       

1️⃣ takeSnapshot():屏幕截图

2️⃣ write toFile():保存图像文件到指定的文件路径

5、综合示例应用:

5.1 测试场景:

  • 连接设备,自动安装并启动豌豆荚APP
  • 启动后,跳过更新,然后截图并保存到指定文件路径

5.2 思路分析

  • 连接设备
  • 安装APP
  • 启动APP
  • 跳过更新
  • 截图

5.3 脚本代码

from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi

print('connecting device . . .')
device=mr.waitForConnection()

print('installing app . . .')
device.installPackage('/存放APP包的路径/App/wandoujia.apk')

print('launching app . . .')
package='com.wandoujia.phoenix2'
activity='com.pp.assistant.activity.PPMainActivity'
runComponent = package + '/' + activity

device.startActivity(component=runComponent)
mr.sleep(8)

print('touch cancel button')
device.touch(328, 49, 'DOWN_AND_UP')
mr.sleep(5)

print('taking snap shot . . .')
screenshot=device.takeSnapshot()
screenshot.writeToFile('/保存图像文件的路径/wdj.png', 'png')

5.4 执行效果

6、遇到的问题

在执行脚本的过程中遇到如下问题:

问题一:

AttributeError: type object 'com.android.monkeyrunner.XXXXX' has no attribute XXXXXX
这中错误是在调用方法的时候报错,意思就是没有这个 XXXXXX 方法

解决方法:检查调用的方法名是否写错,一定注意区分大小写

问题二:

SyntaxError: Non-ASCII character in file '/脚本代码路径/fullMonkey.py', but no encoding declared;

这个错误的意思就是:在脚本代码中有 非ASCII 字符,但是没有指定编码,简单的说就是字符编码错误

解决方法:

在脚本代码的第一行位置加上:# coding=UTF-8  即可

发布了37 篇原创文章 · 获赞 63 · 访问量 9683

猜你喜欢

转载自blog.csdn.net/xiao66guo/article/details/97919730