美文网首页
Python Appium自动化测试 MonkeyScript

Python Appium自动化测试 MonkeyScript

作者: 白码会说 | 来源:发表于2020-12-12 22:10 被阅读0次

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会以数组的形式接收两个参数,分别表示 PackageNameActivityClassName,下面具体对应的实现,我们就不细看了。再参照上面介绍的 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)

注意这里分别使用了DispatchPressDispatchString来分别使用,就是为了做演示,实际你可以依赖场景选择使用的 API 。而其中涉及到坐标点的问题,这个在后面会讲解如何获取控件的坐标点。

3、执行脚本

  1. 编写好脚本,保存为monkey.script文件。

  2. 通过 adb push将其上传到待测试的设备中。要pushsdcard文件夹中(这里一夜神模拟器为例),如图:

    adb push C:/Users/DELL/Desktop/monkey.script /sdcard/
    
    
  3. 查看有没有push到设备中,从下图可以看到成功的push进去了。如图:


  4. 有兴趣或者不相信的可以查看文件内容,如图:


  5. 然后通过 monkey -f执行此脚本,例如下面执行 1次。

    adb shell monkey -f /sdcard/monkey.script -v 1
    
    
  6. 效果截图


    image
  7. 执行完成之后,可以在控制台,看到输出的 Log 信息。


    image

4、总结

1、通过adb pulladb push手机与电脑之间传输文件

(1)将手机卡中的某个文件复制到电脑

  1. 手机连接电脑后,在命令行输入 adb devices,获取到设备序列号后说明手机已经和电脑连接成功。

  2. 输入: adb pull 手机存储路径 电脑路径    adb pull /sdcard/xxx /Users/xxxx/xxx.tx

(2)从电脑端向手机复制文件

  1. 输入: adb pull 电脑路径 手机存储路径    adb push /Users/xxxx/xxx.txt /sdcard/xxx

2、注意事项(此处有坑!)

头文件代码书写注意 “=” 两边预留空格,否则会出现如下报错。

java.lang.NumberFormatException: Invalid int: ""


以上就分享到这里,最近正好有时间做自动化测试方面的资料整理。如果你对Python自动化测试、面试题,感兴趣可以加入我们扣裙一起学习175317069,有各项测试资料,面试题资料。

欢迎【点赞】、【评论】、【关注】~

Time will tell.(时间会证明一切)

相关文章

网友评论

      本文标题:Python Appium自动化测试 MonkeyScript

      本文链接:https://www.haomeiwen.com/subject/bowygktx.html