Time will tell.
前边讲解的 Monkey 都是随机事件流,Monkey 在手机里像个无头苍蝇一样乱蹦乱跳,那么本章节就教你如何让 Monkey 按指令在手机里闹腾 —— Monkey 自定义脚本。
1、monkey 隐藏命令
–pck-blacklist-file<黑名单文件>
–pck-whitelist-file<白名单文件>
–f<脚本文件>:可以指定monkey的自定义脚本
一般 Monkey 测试都是随机的测试事件,假如我们需要测试某一个特定的场景,普通的命令很难办到,这是就是需要自定义脚本这个命令了。
它的使用方式也是很简单方便的,只要我们按照 Monkey 的脚本规范写好脚本,之后将它保存到手机中,然后运行 Monkey 的时候使用-f
命令指定脚本就行。
2、monkey 自定义脚本格式
虽然,Google 官方并没有提供对 MS 详细讲解的 API 文档,但是我们是可以通过源码来分析出 MS 支持的 API 的。
MS 的源码文件是:MonkeySourceScript.java
Monkey 的源码 MonkeySourceScript.java
类中有一段关于 Monkey 脚本规则的描述MonkeySourceScript.java
有兴趣的同学可以去看一下这个源码,这里以 5.1.1 为例子,进行讲解,其实这一块的代码变动非常的少,找一个版本了解即可。我们看一下源码对脚本规则描述。
脚本规则的描述
/**
* monkey event queue. It takes a script to produce events sample script format:
*
* <pre>
* type= raw events
* count= 10
* speed= 1.0
* start data >>
* captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)
* captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
* captureDispatchFlip(true)
* ...
* </pre>
*/
解释意思
#声明脚本的类型
type= raw events
#脚本的执行次数,由于monkey运行次数在命令设置的,这里的设置是无效的
count= 10
#事件执行时间间隔,这个也是通过命令来设置,这里不起作用
speed= 1.0
#脚本的入口,说明脚本从下面开始执行
start data >>
#下全是monkey命令
captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)
captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
captureDispatchFlip(true)
知道 Monkey 脚本书写的基本格式,在来看一眼 Monkey 常见脚本 API 。
1.LaunchActivity(包名,Activity名称)
启动被测应用的某个Activity
2.Tap(x,y,TapDuration)
一次单击事件
x,y:是坐标
TapDuration:持续的时间,单位毫秒
3.DispatchPress(keyName)
模拟一个按键
keyName:按键的名称
4.RotateScreen(RotationDegree,peresist)
旋转屏幕
RotationDegree:0~3分别表示顺时针的四个方向
peresist:是否存留
5.DispatchFiip(true/false)
打开或关闭软键盘
6.LongPress()长按2秒
7.PressAndHold(x,y,PressDuration)
模拟长按事件
x,y:点击的坐标
PressDuration:持续时常,单位毫秒
8.DispatchString(input)
输入字符串
input:输入的内容
9.Drag(xStart,yStart,xEnd,yEnd,pCount)
模拟拖动操作
xStart,yStart:开始的坐标值
xEnd,yEnd:结束的坐标值
pCount:滑动事件的次数
10.PinchZoom(pt1xStart,pt1yStart,pt1xEnd,pt1yEnd,pt2xStart,pt2ystart,pt2xEnd,pt2yEnd)
手势缩放事件
pt1xStart,pt1yStart:第一个手指起始的坐标位置
pt1xEnd,pt1yEnd:第一个手指结束的坐标位置
pt2xStart,pt2ystart:第二个手指开始的坐标位置
pt2xEnd,pt2yEnd:第二个手指结束的坐标位置
11.UserWait(sleepTime)
设置睡眠时间
sleepTime:等待时间,单位毫秒
12.DeviceWake()
唤醒设备屏幕
在源码中,所有我们上面介绍的 API 都是以一个static final
的形式被声明。这里简单就LaunchActivity
的方法的源码进行讲解,其他的 API 其实也大同小异。
LaunchActivity
的方法的源码讲解:
1、浏览器输入源码地址,找到静态字符串LaunchActivity,如图:
2、将鼠标定位到静态字符串LaunchActivity
通过ctrl(command)+?️
左键我们可以定位到方法的位置。大约在597行,如图:
3、将鼠标定位到LaunchActivity
的方法通过ctrl(command)+?️
左键我们可以进入到方法代码。大约在597行,如图:
4、如上边LaunchActiviity
方法源码所示,LaunchActiviity
会以数组的形式接收两个参数,分别表示 PackageName
和Activity
的ClassName
,下面具体对应的实现,我们就不细看了。再参照上面介绍的 API ,就可以很清晰的定位出方法和参数的含义了。
有兴趣的小伙伴们可以通过以上步骤一一查看那些方法的 API 。
3、Monkey 脚本的实例
1、Monkey 脚本主要包含两部分,一部分是头文件信息,一部分是具体的 Monkey 命令。
2、按照2.1的脚本描述规则我们来编辑monkeyscript
,如下:
type = user
count = 1
speed = 500
start data >>
#启动应用程序
LaunchActivity(com.michael.words,com.michael.words.activity.SplashActivity)
UserWait(5000)
#点击下步按钮
Tap(615,609)
UserWait(1000)
#点击编辑框
Tap(200,85,1000)
#输入sg
DispatchString(sg)
注意这里分别使用了DispatchPress
和DispatchString
来分别使用,就是为了做演示,实际你可以依赖场景选择使用的 API 。而其中涉及到坐标点的问题,这个在后面会讲解如何获取控件的坐标点。
3、执行脚本
-
编写好脚本,保存为
monkey.script
文件。 -
通过
adb push
将其上传到待测试的设备中。要push
到sdcard
文件夹中(这里一夜神模拟器为例),如图:adb push C:/Users/DELL/Desktop/monkey.script /sdcard/
-
查看有没有push到设备中,从下图可以看到成功的push进去了。如图:
-
有兴趣或者不相信的可以查看文件内容,如图:
-
然后通过
monkey -f
执行此脚本,例如下面执行 1次。adb shell monkey -f /sdcard/monkey.script -v 1
-
效果截图
image -
执行完成之后,可以在控制台,看到输出的 Log 信息。
image
4、总结
1、通过adb pull
和adb push
手机与电脑之间传输文件
(1)将手机卡中的某个文件复制到电脑
-
手机连接电脑后,在命令行输入 adb devices,获取到设备序列号后说明手机已经和电脑连接成功。
-
输入: adb pull 手机存储路径 电脑路径 adb pull /sdcard/xxx /Users/xxxx/xxx.tx
(2)从电脑端向手机复制文件
- 输入: adb pull 电脑路径 手机存储路径 adb push /Users/xxxx/xxx.txt /sdcard/xxx
2、注意事项(此处有坑!)
头文件代码书写注意 “=” 两边预留空格,否则会出现如下报错。
java.lang.NumberFormatException: Invalid int: ""
以上就分享到这里,最近正好有时间做自动化测试方面的资料整理。如果你对Python自动化测试、面试题,感兴趣可以加入我们扣裙一起学习175317069,有各项测试资料,面试题资料。
欢迎【点赞】、【评论】、【关注】~
Time will tell.(时间会证明一切)
网友评论