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:

*

*

* 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)

* ...

*

*/

解释意思

#声明脚本的类型

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.(时间会证明一切)

python写自动化测试脚本常见报错_Python Appium自动化测试 MonkeyScript相关推荐

  1. python写自动化测试脚本常见报错_Appium自动化测试

    3.     Appium安装配置 3.1.  限制 如果你在windows上安装appium,你没法使用预编译专用于OS X的.app文件,你也将不能测试IOS apps,因为appium依赖OS ...

  2. python爬虫常见报错_Python爬虫系列之什么是爬虫

    时间过的总是那么快,特别是对于一个有拖延症的人来说,例如我...早就想出一个关于爬虫的系列教程,但总是被自己的拖延症和一系列的杂碎事情打断.最近终于将自己的所有事情以及自己最真实的想法捋顺了,所以决定 ...

  3. python爬虫常见报错_Python爬虫常见HTTP响应状态码详解

    在使用Python进行网页数据抓取时,经常会遇到无数据返还或错误等异常,这个时候可以通过status_code命令来查看获得http请求返回的状态码,以便查找原因并制定相应的解决方案.import r ...

  4. python爬虫常见报错_Python爬虫常见异常及解决办法

    文章目录1.selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome bina ...

  5. crontab定时脚本常见报错

    1.crontab定制后台定时备份任务时报出"bad minute"及"errors in crontab file, can't install"错误,&qu ...

  6. python报错_python 常见报错

    python 常见报错 IndentationError: 缩进错误 IndentationError: expected an indented block 应为缩进快 必须统一使用tab 不能空格 ...

  7. Python异常处理及常见报错解决

    Python的异常处理 Python的异常处理try的基本用法. 方法一 :try..except 把通常的语句放在 try 代码块中,将错误处理器代码放置在 except 代码块中. try: # ...

  8. python计算机视觉常见报错及解决方案(不断更新中)

    python计算机视觉常见报错及解决方案 1.did not meet fit acceptance criteria 2.all the input arrays must have same nu ...

  9. 【全网最详细yolov6】yoloV6调试记录(含训练自己的数据集及常见报错及解决方法)--持续更新ing

    本文手把手教你如何调试最新的yolov6,复现运行COCO2017及训练自己的数据集,目前该项目刚发布,BUG会比较多,调起来一般不会那么顺利,本文含windows+ubuntu,并给出了一些常见问题 ...

最新文章

  1. POJ 3281_Dining
  2. linux 指定库名 登录mysql_Linux下指定mysql数据库数据配置主主同步的实例
  3. 程序员大佬的简历和普通程序员有啥区别?
  4. 【C语言位运算的应用】如何按bit位翻转一个无符号整型
  5. Web 应用客户端渲染和服务器端渲染的比较
  6. 如何判断当面的网页加载完成?
  7. 如何将二维数组作为函数的参数传递
  8. dp----最少硬币问题
  9. android主题切换框架,Android主题切换日夜间模式与换肤框架小结
  10. 【COCOS2DX-LUA 脚本开发之一】LUA语言基础在COCOS2DX游戏中使用LUA脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!...
  11. Web架构演变过程以及出现的问题
  12. php正弦函数图像,Go语言输出正弦函数(Sin)图像
  13. 香农辅助定理、KL散度和Jensen不等式
  14. 服务器系统安装ansys,云服务器安装ansys
  15. CODESYS官方教程“您的第一个CODESYS程序”的一些注解
  16. DVWA-SQL Injection
  17. (转)TeamViewer三种许可证的区别是什么?
  18. oracle删除不了同义词,删除同义词,百科如何删除同义词项
  19. 人工智能(1)-样本空间、假设空间、版本空间
  20. linux dhcp 故障转移,Windows DHCP 故障转移

热门文章

  1. 闩锁和锁(Latches and Locks)
  2. 2018 ISC | 最炫酷的展台和最火爆的分论坛
  3. require() 的基本用法
  4. 初识Calcite——使用实例
  5. android 视频播放器-列表播放器
  6. 数字电视业务PSI-SI学习系列
  7. 使用 natbib 进行参考文献管理
  8. Tekla structures深入定制开发篇(一)
  9. Definition of Dichotomy
  10. 算法与数据结构学习资料及面试