Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Appium+python自动化(二十三)- 真假美猴王Monkeyrunner与Monkey傻傻的分不清楚

Appium+python自动化(二十三)- 真假美猴王Monkeyrunner与Monkey傻傻的分不清楚

作者头像
北京-宏哥
发布于 2019-07-27 10:19:47
发布于 2019-07-27 10:19:47
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

简介

看《西游记》第五十七回,说是“六耳猕猴”化作孙悟空的摸样,伤了唐僧,后又和孙悟空大打出手…… 这位假孙悟空,实力不用多说了吧,和真孙悟空一般无二,大战孙悟空,闹到上天入地下海。 在唐僧那:念紧箍咒,两个都喊疼,自然看不出哪个真假; 到天宫:拖塔天王拿照妖镜照,也看不出; 又到观音那:观音也看不出。最后到幽冥处阎罗那,经“谛听”听过之后,“谛听”却说:“我看出来了,却不敢说” 最后还是如来老佛爷道出六耳真身并用金钵盂罩住,才被孙悟空一棍子打死。想必各位小伙伴都看过这以精彩片段。不过据知情人士说真假美猴王存在阴谋,这里有黑幕:说是真的孙悟空被打死了,活下来的是假的。好了废话少说,还是回到今天的主题:真假美猴王Monkeyrunner与Monkey傻傻的分不清楚。

  今天宏哥就带着各位小伙伴和童鞋们再当一回和尚:如来佛祖辨一辨真假美猴王,前边我们已经对monkey做过一些详细的介绍和讲解,今天我们就再来介绍和讲解一下monkeyrunner。看看他们之间的到底是一样还是有区别的。

monkeyrunner简介

1.monkeyrunner工具使用Jython,这是一种使用Java编程语言的Python实现。Jython允许monkeyrunner API与Android框架轻松交互。使用Jython,您可以使用Python语法来访问API的常量,类和方法。MonkeyRunner工具是使用Jython(使用Java编程语言实现的

Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制Android设备app,测试其稳定性并通过截屏可以方便地记录出现的问题。

2.我们来看一下monkeyrunner官网是如何介绍monkeyrunner的:

官网介绍(已翻译成中文)宏哥在这里给小伙伴截取一段翻译,如下:

  monkeyrunner工具提供了一个API,用于编写从Android代码外部控制Android设备或模拟器的程序。使用monkeyrunner,您可以编写一个Python程序,安装Android应用程序或测试包,运行它,向其发送击键,截取其用户界面,并在工作站上存储屏幕截图、

monkeyrunner工具主要用于测试功能/框架级别的应用程序和设备以及运行单元测试套件,但您可以将其用于其他目的。

monkeyrunner工具与UI / Application Exerciser Monkey无关 ,也称为monkey工具。该monkey工具adb直接在设备或仿真器上的shell中运行, 并生成用户和系统事件的伪随机流。相比之下,monkeyrunner工具通过从API发送特定命令和事件来控制工作站中的设备和

仿真器。

3.monkeyrunner即android SDK中自带的工具之一,此工具提供API可按制android设备或模拟器。

4.有兴趣的小伙伴们或者童鞋可以查看一下monkeyrunner官网:https://www.android-doc.com/tools/help/monkeyrunner_concepts.html

5.monkeyrunner 路径:Andriod_SDK\tools

MonkeyRunner工具独特功能

1.多设备控制:monkeyrunner API可以跨多个设备或仿真器应用一个或多个测试套件。您可以物理连接所有设备或立即启动所有模拟器(或两者),以编程方式依次连接到每个设备,然后运行一个或多个测试。您还可以以编程方式启动模拟器配置,运行一个或多个测试,然后关闭模拟器。

2.功能测试:monkeyrunner可以对Android应用程序进行自动化的从头到尾的测试。您可以通过击键或触摸事件提供输入值,并将结果视为屏幕截图。

3.回归测试 - monkeyrunner可以通过运行应用程序并将其输出屏幕截图与一组已知正确的屏幕截图进行比较来测试应用程序的稳定性。

4.可扩展的自动化 - 由于monkeyrunner是一个API工具包,您可以开发一个基于Python的模块和程序的整个系统来控制Android设备。除了使用monkeyrunner API本身,您还可以使用标准的Python ossubprocess 模块来调用Android工具,例如 Android Debug Bridge。

您还可以将自己的类添加到monkeyrunner API中。这在“ 使用插件扩展monkeyrunner ”一节中有更详细的描述 。

Monkeyrunner与Monkey区别

monkeyrunner和money没有什么直接的关系,monkey是在设备直接运行adb shell命令生成随机事件来进行测试的。相比较而言,monkeyrunner则是通过API发送特定的命令和事件来控制设备。

为了支持黑盒自动化测试的场景,Android SDK提供了monkey和monkeyrunner两个测试工具,这两个测试工具除了名字类似外,还都可以向待测应用发送按键等消息,往往容易产生混淆,以下是他俩的不同之处。

Monkey:

Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。

1.monkey运行在设备或者模拟器上边,可以脱离PC运行,其运行时如下图所示。

Monkeyrunner:

Monkeyrunner工具是在工作站上通过API定义的特定命令和事件控制设备或模拟器。

而monkeyrunner运行在PC上,需要通过服务器/客户端的的模式向设备或者模拟器上的android应用发送指令来执行测试,其运行时如下图所示。

2.普遍的做法是将monkey作为一个向待测应用发送随机按键消息的测试工具,验证待测应用在这些随机性的输入面前是否会有闪退或者崩溃。而monkeyrunner则接受一个明确的测试脚本(使用python语言编写的)。

3.虽然monkey也可以根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持读取界面的信息来执行验证操作。而monkeyrunner的测试脚本中有明确 的条件判断等语句,可用来做功能测试。

总结:

  实际操作中,monkey由于缺少必要的条件判断等命令,难以在功能测试上有所作为,只能作为生成一些随机事件的工具,测试应用程序的健壮程度,待测应用崩溃后可以根据monkey打印的日志,再用monkey创建一个重现步骤,供开发调试。monkey服务器模式更适合用于黑盒测试,不建议用于自动化测试。

  而Monkeyrunner虽然有Python和Java类库的强大支持,但其自身提供的API有限,还得需要插件扩展其功能。

monkeyrunner API

monkeyrunner API包含在包中的三个模块中 com.android.monkeyrunner

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

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

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

在Python程序中,您可以将每个类作为Python模块进行访问。monkeyrunner工具不会自动导入这些模块。要导入模块,请使用Python from语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 from com.android.monkeyrunner import <module>

<module>您要导入的类名 在哪里。from通过用逗号分隔模块名称,可以在同一语句中导入多个模块。

运行monkeyrunner

您可以从文件中运行monkeyrunner程序,也可以在交互式会话中输入monkeyrunner语句。您可以通过调用SDK目录子目录中的monkeyrunner命令来执行这两项操作tools/。如果提供文件名作为参数,则该monkeyrunner命令将文件的内容作为Python程序运行; 否则,它会启动一个交互式会话。

monkeyrunner命令的语法是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

表1解释了标志和参数。

表1. monkeyrunner标志和参数。

参数

描述

-plugin <plugin_jar>

(可选)指定.jar包含monkeyrunner插件的文件。要了解有关monkeyrunner插件的更多信息,请参阅 使用插件扩展monkeyrunner。要指定多个文件,请多次包含该参数。

<program_filename>

如果提供此参数,则该monkeyrunner命令将该文件的内容作为Python程序运行。如果未提供参数,则该命令将启动交互式会话。

<program_options>

(可选)<program_file>中程序的标志和参数。

运行monkeyrunner

命令语法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

方式一:在CMD命令窗口直接运行monkeyrunner

方式二:使用Python编写测试代码文件,在CMD中执行monkeyrunner hongge.py运行

不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。

注意:在运行monkeyrunner之前必须先运行相应的模拟器或连接真机,否则monkeyrunner无法连接到设备

运行模拟器有两种方法:1、通过eclipse中执行模拟器 2、在CMD中通过命令调用模拟器

这里介绍通过命令,在CMD中执行模拟器的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
emulator -avd test

上面命令中test是指模拟器的名称。

附:这部分前边已经讲解过,在这里就不再赘述)

问题:CMD运行提示monkeyrunner不是内部或外部命令,也不是可运行的程序或批处理文件。

解决:电脑环境变量未配置,将monkeyrunner所在目录配在环境变量里。

变量名:Path

变量值:D:\android\android-sdk-windows\tools;D:\android\android-sdk-windows\platform-tools

实例

实例一:卸载旧的APP,安装新的APP

*准备

a. 连接安卓夜神模拟器设备

b. 运行CMD,检测是否连接成功

CMD>adb devices

附:(这部分前边已经讲解过,在这里就不再赘述)

问题:CMD运行提示adb不是内部或外部命令,也不是可运行的程序或批处理文件。

解决:电脑环境变量未配置,将adb所在目录配在环境变量里。

*方式一:

1.打开CMD,运行monkeyrunner

2.进入monkeyrunner的shell命令交互模式后,逐条输入以下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
2 device = MonkeyRunner.waitForConnection()
3 device.removePackage('com.taobao.taobao')
4 device.installPackage('C:\\Users\\DELL\\Desktop\\702757.apk')

(1)输入命令前的夜神模拟器:

(2)输入第三行命令后的夜神模拟器

(3)输入第四行的夜神模拟器

注:每条命令的作用,请见方法二中的注解

实操如图:

c.检查手机app是否已更新

*方式二:

a. 编写Python测试代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 # File:   Test1.py
 2 # Vision: V1.0
 3 # Author: hongge  QQ群:707699217
 4 # 引入本程序所用到的模块
 5 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
 6 
 7 # 连接手机设备
 8 device = MonkeyRunner.waitForConnection()
 9 
10 # 截图
11 result = device.takeSnapshot()
12 # 将截图保存到文件 
13 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png','png')
14 
15 # 卸载APP
16 device.removePackage('cn.richinfo.thinkdrive')
17 print ('Uninstall Success!')
18 
19 # 暂停520 MonkeyRunner.sleep(5)
21 
22 # 截图
23 result = device.takeSnapshot()
24 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_002.png','png')
25 
26 # 安装新的APP
27 device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
28 print ('Install Success!')
29 
30 # 截图
31 result = device.takeSnapshot()
32 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_003.png','png')

注:拷贝运行时请去掉中文注释;或者在开头加入 #coding=utf-8

b.执行Test1.py脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Monkeyrunner C:\Users\DELL\Desktop\test.py

实操如图:

c.检查手机app是否已更新

d.查看截图文件夹,截图和上边逐条输入命令,宏哥截得模拟器一模一样的。

e.注意如果截图不一样自己加个等待时间,就会一样,参考代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #coding=utf-8 
 2 # File:   Test1.py
 3 
 4 # Vision: V1.0
 5 
 6 # Author: hongge  QQ群:707699217
 7 
 8 # 引入本程序所用到的模块
 9 
10 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
11 
12 
13 
14 # 连接手机设备
15 
16 device = MonkeyRunner.waitForConnection()
17 
18 
19 
20 # 截图
21 
22 result = device.takeSnapshot()
23 
24 # 将截图保存到文件 
25 
26 result.writeToFile('C:\\Users\\DELL\\Desktop\\test\\Test1_001.png','png')
27 
28 
29 
30 # 卸载APP
31 
32 device.removePackage('com.taobao.taobao')
33 
34 print ('Uninstall Success!')
35 
36 
37 
38 # 暂停539 
40 MonkeyRunner.sleep(5)
41 
42 
43 
44 # 截图
45 
46 result = device.takeSnapshot()
47 
48 result.writeToFile('C:\\Users\\DELL\\Desktop\\test\\Test1_002.png','png')
49 
50 
51 # 暂停552 
53 MonkeyRunner.sleep(5)
54 
55 
56 # 安装新的APP
57 
58 device.installPackage('C:\\Users\\DELL\\Desktop\\702757.apk')
59 
60 print ('Install Success!')
61 
62 # 暂停563 
64 MonkeyRunner.sleep(5)
65 
66 # 截图
67 
68 result = device.takeSnapshot()
69 
70 result.writeToFile('C:\\Users\\DELL\\Desktop\\test\\Test1_003.png','png')

monkeyrunner内置帮助

您可以通过运行以下命令为monkeyrunner生成API参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 monkeyrunner help.py <format> <outfile>

论点是:

  • <format>或者是text纯文本的输出或html用于HTML输出。
  • <outfile> 是输出文件的路径限定名称。

使用插件扩展monkeyrunner

您可以使用Java编程语言编写的类扩展monkeyrunner API,并将其构建为一个或多个.jar文件。您可以使用此功能使用您自己的类扩展monkeyrunner API或扩展现有类。您还可以使用此功能初始化monkeyrunner环境。

要为monkeyrunner提供插件,请monkeyrunner使用表1中-plugin <plugin_jar>描述的参数 调用该命令 。

在你的插件代码,你可以导入和扩展的主要monkeyrunner类 MonkeyDeviceMonkeyImageMonkeyRunnercom.android.monkeyrunner(见的monkeyrunner API)。

请注意,插件不允许您访问Android SDK。您无法导入包等com.android.app。这是因为monkeyrunner与框架API级别下的设备或模拟器交互。

插件启动类

.jar插件 的文件可以指定在脚本处理开始之前实例化的类。要指定此类,请将密钥添加 MonkeyRunnerStartupRunner.jar文件的清单中。该值应该是启动时要运行的类的名称。以下代码段显示了如何在ant构建脚本中执行此操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 <jar jarfile="myplugin" basedir="${build.dir}">
2 <manifest>
3 <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/>
4 </manifest>
5 </jar>

要访问monkeyrunner的运行时环境,启动类可以实现 com.google.common.base.Predicate<PythonInterpreter>。例如,此类在默认命名空间中设置一些变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.android.example;
 2 
 3 import com.google.common.base.Predicate;
 4 import org.python.util.PythonInterpreter;
 5 
 6 public class Main implements Predicate<PythonInterpreter> {
 7     @Override
 8     public boolean apply(PythonInterpreter anInterpreter) {
 9 
10         /*
11         * Examples of creating and initializing variables in the monkeyrunner environment's
12         * namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
13         * and "use_emulator"
14         *
15         */
16         anInterpreter.set("newtest", "enabled");
17         anInterpreter.set("use_emulator", 1);
18 
19         return true;
20     }

monkeyrunner环境搭建

1.安装并配置好jdk环境

2.安装android sdk

3.安装python

4.monkeyrunner环境变量配置: {Path}\Andriod_SDK\tools

安装结果检测

在docs命令控制台输入命令:monkeyrunner出现如下显示内容则说明安装成功

Tips:退出monkeyrunner命令行模式可以 使用快捷键 ctrl+D退出。

小结

1.在方式二运行monkeyrunner报错(190724 14:33:20.837:S [main] [com.android.monkeyrunner.MonkeyRunnerOptions] Script terminated due to an exception)

解决方法,报出该错误是使用的notepad++编码格式问题,notepad++默认编码格式是ansi,我们使用的monkeyrunner脚本格式是utf-8,因此有冲突

修改方法如下

首先,看我们的脚本编码格式是什么,我这里的是utf-8,因此不用再做修改

3.如果编码格式不是utf-8的,就要对它进行修改了,点击格式,选择utf-8,再保存,也可选择无BOM格式的

4.再来运行一下,这次成功了

2.monkeyrunner常用的知识点

#引入程序所用的模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 

#引入程序所用的模块,使用别名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 from com.android.monkeyrunner import MonkeyRunner as mr
2 from com.android.monkeyrunner import MonkeyDevice as md
3 from com.android.monkeyrunner import MonkeyImage as mi
4 #如果给导入的模块起了别名,就必须使用别名,否则会出现错误。
5 #比如连接设备或模拟器,起了以上别名后,命令应该如下:
6 device=mr.waitForConnection()

#连接到设备或模拟器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #参数1:超时时间,单位秒,浮点数。默认是无限期地等待。
2 #参数2:串deviceid,指定的设备名称。默认为当前设备(手机优先,比如手机通过USB线连接到PC、其次为模拟器)。
3 #默认连接:
4 device = MonkeyRunner.waitForConnection()
5 #参数连接:
6 device = MonkeyRunner.waitForConnection(1.0,'4df74b8XXXXXXX') 

#向设备或模拟器安装APK

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #以下两种方式都是对的
2 device.installPackage('E:/JAVA/monkeyrunner/Test1/ThinkDrive_new.apk')
3 device.installPackage('E:\\JAVA\\monkeyrunner\\Test1\\ThinkDrive_new.apk')
4 #参数可以为绝对路径,也可为相对路径

#卸载设备或模拟器中的APK

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #参数为APK包名
2 device.removePackage('cn.richinfo.thinkdrive') 

#启动任意的Activity

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #device.startActivity(component="包名/启动Activity")
2 #以下两种都OK
3 device.startActivity(component="cn.richinfo.thinkdrive/cn.richinfo.thinkdrive.ui.activities.NavigateActivity")
4 device.startActivity(component="cn.richinfo.thinkdrive/.ui.activities.NavigateActivity")

#手机截图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #获取设备的屏蔽缓冲区,产生了整个显示器的屏蔽捕获。(截图)
2 result=device.takeSnapshot()
3 #返回一个MonkeyImage对象(点阵图包装),我们可以用以下命令将图保存到文件
4 result.writeToFile('E:\\JAVA\\monkeyrunner\\Test1\\Test1_001.png','png')

#暂停

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #暂停目前正在运行的程序指定的秒数
2 #MonkeyRunner.sleep(秒数,浮点数) 
3 MonkeyRunner.sleep(5)

#字符串发送到键盘

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #device.type('字符串')
2 device.type('hongge')

#唤醒设备屏幕

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #锁屏后,屏幕关闭,可以用下命令唤醒
2 device.wake()

#重起手机

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 device.reboot()

#模拟滑动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #device.drag(X,Y,D,S)
2 #X 开始坐标
3 #Y 结束坐标
4 #D 拖动持续时间(以秒为单位),默认1.05 #S 插值点时要采取的步骤。默认值是10
6 device.drag((100,1053),(520,1053),0.1,10)

#在指定位置发送触摸事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 #device.touch(x,y,触摸事件类型)
2 #x,y的单位为像素
3 #触摸事件类型,请见下文中Findyou对device.press描述
4 
5 device.touch(520,520,'DOWN_AND_UP')

#发送指定类型指定键码的事件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #device.press(参数1:键码,参数2:触摸事件类型)
 2 #参数1:见android.view.KeyEvent
 3 #参数2,如有TouchPressType()返回的类型-触摸事件类型,有三种。
 4 #1DOWN 发送一个DOWN事件。指定DOWN事件类型发送到设备,对应的按一个键或触摸屏幕上。
 5 #2UP 发送一个UP事件。指定UP事件类型发送到设备,对应释放一个键或从屏幕上抬起。
 6 #3DOWN_AND_UP 发送一个DOWN事件,然后一个UP事件。对应于输入键或点击屏幕。
 7 以上三种事件做为press()参数或touch()参数
 8 
 9 #按下HOME10 device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP) 
11 #按下BACK12 device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP) 
13 #按下下导航键
14 device.press('KEYCODE_DPAD_DOWN',MonkeyDevice.DOWN_AND_UP) 
15 #按下上导航键
16 device.press('KEYCODE_DPAD_UP',MonkeyDevice.DOWN_AND_UP) 
17 #按下OK18 device.press('KEYCODE_DPAD_CENTER',MonkeyDevice.DOWN_AND_UP) 

3.好了时间也不早了,今天就啰嗦、水到这里吧,哈哈!晚安。好梦!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
android自动化之monkeyrunner
运行monkeyrunner之前必须先运行相应的模拟器或连上设备,不然monkeyrunner无法连接设备。
流柯
2018/08/30
1.1K0
android自动化之monkeyrunner
几款Android 应用自动化测试工具「建议收藏」
常规类参数 1、 -help 作用:列出简单的用法 例:adb shell monkey -help 也可不写help 2、-v 作用:命令行上的每一个-v都将增加反馈信息的详细级别。 Level0(默认),除了启动、测试完成和最终结果外只提供较少的信息。 adb shell monkey -p com.shjt.map -v 100 Level1,提供了较为详细的测试信息,如逐个发送到 Activity 的事件信息。 adb shell monkey -p com.shjt.map -v -v 100 Level2,提供了更多的设置信息,如测试中选中或未选中的 Activity 信息。 adb shell monkey -p com.shjt.map -v -v -v 100 比较常用的是-v -v -v,即最多详细信息,一般会保存到指定文件中供开发人员查找bug原因时使用。 例:adb shell monkey -v 10 事件类参数 1、-s <seed> 作用:伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,将生成相同的事件序列。 例:adb shell monkey -s 1483082208904 -v 10 2、–throttle <milliseconds> 作用:在事件之间插入固定的时间(毫秒)延迟,你可以使用这个设置来减缓Monkey的运行速度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。 注:常用参数,一般设置为300毫秒,原因是实际用户操作的最快300毫秒左右一个动作事件,所以此处一般设置为300毫秒。 例:adb shell monkey –throttle 300 -v 10 3、–pct-touch <percent> 作用:调整触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作) 注:常用参数,此参数设置要适应当前被测应用程序的操作,比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。 例:adb shell monkey –pct-touch 100 -v 10 4、–pct-motion <percent> 作用:调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成) 注:常用参数,需注意的是移动事件是直线滑动 例:adb shell monkey –pct-motion 100 -v 10 5、–pct-trackball<percent> 作用:调整滚动球事件百分比。(滚动球事件由一个或多个随机的移动事件组成,有时会伴随着点击事件) 注:不常使用参数,现在手机几乎没有滚动球,但滚动球事件中包含曲线滑动事件,在被测程序需要曲线滑动时可以选用此参数。 例:adb shell monkey –pct-trackball 100 -v 10 6、–pct-nav<percent> 作用:调整基本的导航事件百分比。(导航事件由方向输入设备的上下左右按键所触发的事件组成) 注:不常用操作。 例:adb shell monkey –pct-nav 100 -v 10 7、–pct-majornav<percent> 作用:调整主要导航事件的百分比。(这些导航事件通常会导致UI界面中的动作事件,如5-way键盘的中间键,回退按键、菜单按键) 注:不常用操作。 例:adb shell monkey –pct-majornav 100 -v 10 8、–pct-syskeys<percent> 作用:调整系统事件百分比。(这些按键通常由系统保留使用,如Home、Back、Start Call、EndCall、音量调节) 注:不常用。 例:adb shell monkey –pct-syskeys 100 -v 10 9、–pct-appswitch<percent> 作用:调整Activity启动的百分比。(在随机的时间间隔中,Monkey将执行一个startActivity()调用,作为最大程度覆盖被测包中全部Activity的一种方法) 注:不常用。 例:adb shell monkey –pct-appswitch 100 -v 5 10、–pct-anyevent 作用:调整其他事件的百分比。(这包含所有其他事件,如按键、其他在设备上不常用的按钮等) 注:不常用。 例:adb shell monkey –pct-anyevent 100 -v 5 约束类参数 1、-p<allowed-package-nam
全栈程序员站长
2022/07/27
9.5K0
几款Android 应用自动化测试工具「建议收藏」
Android软件测试Monkey测试工具
前言: 最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monkeyrunner、benchmark、其它test tool等等。因接触时间很短,很多地方有不足之处,希望能和大家多多交流。 一、  什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monk
互联网金融打杂
2018/04/03
4.5K0
Android软件测试Monkey测试工具
Android 测试工具——Monkeyrunner API
官方API文档 :http://www.android-doc.com/tools/help/monkeyrunner_concepts.html#
清风穆云
2021/08/09
3760
monkeyrunner入门例子(pyt
#!/usr/bin/env monkeyrunner # -*- coding: utf-8 -*- #导入python中自带的time模块和sys模块,脚本中都要用到它们。 import time import sys #MonkeyRunner自带的三个api from com.android.monkeyrunner import MonkeyRunner ,MonkeyDevice ,MonkeyImage #这个函数时确认年月日时分秒 now=time.strftime("%Y-%m-%d-%H-%M-%S") #指定我们要保存图片的位置和打印log的位置 path='D:\picture\' logpath="D:\log\" #python中获取当前运行的文件的名字 name=sys.argv[0].split("\\") filename=name[len(name)-1] #新建一个log文件 log=open(logpath+filename[0:-3]+"-log"+now+".txt",'w') #连接设备,两个参数分别是等待的时间(这里的时间都是秒为单位),设备的序列号。 device=MonkeyRunner.waitForConnection(5,'022AQQ7N39077347') #安装锤子便签apk。参数是apk文件的位置,因为python不支持中文输入,所以在后面用了.decode('utf-8')这个方法转码。 device.installPackage ('D:\\1.apk'.decode('utf-8')) #打印出操作信息到log文件里 log.write("安装apk……\n") #等待2秒 MonkeyRunner.sleep(2) #启动app,参数里是app的包名/活动名 device.startActivity(component='com.smartisan.notes/.NotesActivity') MonkeyRunner.sleep(2) #打印操作信息 log.write("启动app……\n") #截图 result = device.takeSnapshot() #保存截图  result.writeToFile(path+"主页面".decode('utf-8')+now+'.png','png') #点击搜索款的位置坐标。 device.touch(111,155,'DOWN_AND_UP') MonkeyRunner.sleep(2) #输入smartisan字样 device.type("smartisan") #截图 result1=device.takeSnapshot() #保存截图 result1.writeToFile(path+"搜索框截图".decode('utf-8')+'.png','png') #移动第一个便签的位置到最后面去,参数是:一个起始点坐标,一个终点坐标,移动的时间,移动的步骤 device.drag((232,235),(216,472),3,2) MonkeyRunner.sleep(3) #截图 result2=device.takeSnapshot() #保存截图 result2.writeToFile(path+"移动便签".decode('utf-8')+now+".png",'png') #第一个便签向右滑动 device.drag((109,360),(322,360)) MonkeyRunner.sleep(3) #截图 result3=device.takeSnapshot() #保存截图 result3.writeToFile(path+"右移动便签".decode('utf-8')+now+".png",'png') #点击最后一个便签的位置 device.touch(182,583,'DOWN_AND_UP') MonkeyRunner.sleep(5) #点击发送的位置 device.touch(324,73,'DOWN_AND_UP') MonkeyRunner.sleep(5) #点击发送至长微博的位置 device.touch(227,789,'DOWN_AND_UP') MonkeyRunner.sleep(5) #点击生成长微博的位置 device.touch(228,791,'DOWN_AND_UP') MonkeyRunner.sleep(5) #截图 result4=device.
py3study
2020/01/08
4940
Appium+python自动化(二十二)- 三个臭皮匠助你成就一番霸业-控件坐标获取
  有些小伙伴或者是童鞋可能会好奇会问上一篇中的那个monkey脚本里的坐标点是如何获取的,不是自己随便蒙的猜的,或者是自己用目光或者是尺子量出来的吧,答案当然是:NO。获取控件坐标点的方式这里宏哥给小伙伴们分享和讲解三种方法(也就是三个臭皮匠),宏哥个人喜欢第二种,也推荐小伙伴们和童鞋们使用第二种,当然了萝卜青菜各有所爱,这里不做强制要求。小平同志不是说过:不管白猫还是黑猫抓住耗子就是好猫。适合自己才是最好的,小伙伴们可以根据自己的喜好自行选择。
北京-宏哥
2019/07/27
1.1K0
Appium+python自动化(二十五)- 那些让人抓耳挠腮、揪头发和掉头发的事 - 获取控件ID(超详解)
  在前边的第二十二篇文章里,已经分享了通过获取控件的坐标点来获取点击事件的所需要的点击位置,那么还有没有其他方法来获取控件点击事件所需要的点击位置呢?答案是:Yes!因为在不同的大小屏幕的手机上获取控件的坐标点,不是一样的,而是有变化的,因此在不同的手机机型上,我们可能都需要重新获取坐标点,这么操作起来,如果操作控件特别的多,那么获取控件的坐标点就会显得特别的繁琐。因此我们可以通过获取控件的ID来避免获取控件坐标点的这种弊端。   通过控件ID实现自动化脚本的运行,就性能而言,会比控件坐标的实现差一些;但是对于不同分辨率的设备都通用,不需要动态变换坐标。控件ID的获取主要是通过HierarchyViewer。下面就HierarchyViewer从打开方式和使用两方面进行讲解。
北京-宏哥
2019/08/01
2.2K0
Appium+python自动化(二十五)- 那些让人抓耳挠腮、揪头发和掉头发的事 - 获取控件ID(超详解)
Android 测试工具——Monkeyrunner简介
MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制Android设备app,测试其稳定性并通过截屏可以方便地记录出现的问题。
清风穆云
2021/08/09
6860
码云周刊:当测试拿起自动化测试工具,开发仿佛看见一场悲剧正在上演!
类型:自动化测试 虽然之前小一做过几年开发,但当时对于在公司兴起的自动化测试概念还不是很清楚,觉得是一种很神秘的东西,后来通过向业内资深的测试工程师朋友咨询才恍然大悟。其实自动化测试从广义上来讲,即通过各种工具(程序)的方式来代替或辅助手工测试的行为都可以认为是自动化;从狭义上来说,即通过工具记录或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统各种功能进行验证。同时,小一也了解到目前自动化测试大致分为以下几类: 对Web UI 的自动化测试程序 对Windows 窗体
码云Gitee
2018/03/29
1.6K0
码云周刊:当测试拿起自动化测试工具,开发仿佛看见一场悲剧正在上演!
Android自动化测试【初级篇】-- Monkey测试
Monkey–猴子,顾名思义,就像一只猴子, 在电脑面前,乱敲键盘在测试。 Monkey是一个运行在模拟器或实际设备中的测试工具,他向系统发送伪随机的用户事件流,模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试。 主要用于压力测试,看看在这种胡乱点击的状态下,app是否会发生Crash。所有的事件都是随机产生的。
先知先觉
2019/01/21
3.4K0
Appium+python自动化(十七)- 你难道是猴哥失散多年的混血弟弟还是妹妹???- Monkey简介之开山篇(超详解)
  今天由宏哥给小伙伴们来介绍猴哥的混血弟弟=Monkey。Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流,适合对app做压力测试。
北京-宏哥
2019/07/15
1.7K0
Appium+python自动化(十七)- 你难道是猴哥失散多年的混血弟弟还是妹妹???- Monkey简介之开山篇(超详解)
Android自动化测试工具——Monkey
最近开始研究Android自动化测试方法,整理了一些工具、方法和框架,其中包括android测试框架,CTS、Monkey、Monkeyrunner、benchmark,以及其它test tool等等。
阳光岛主
2019/02/19
1.8K0
Android压力测试
压测过程step1:手机调试到开发者选项,将USB调试选上。(【设置】-【关于手机】-【点击版本号5/6次】进入开发者选项,点击【开发人员选项】-【勾选USB调试】)
顾翔
2020/09/04
4.7K0
Android压力测试
Monkey稳定性测试初探(二)
稳定性测试,是在一定压力的情况下,对系统或某个模块持续进行长时间的操作(一般遵循7*24小时原则),系统没有出现业务问题、业务异常、内存泄露溢出等性能问题,保证了系统的稳定性,说明稳定性测试是通过的。稳定性测试一般在业务测试、性能测试完成后再进行。
王大力测试进阶之路
2022/03/14
1.4K0
Monkey稳定性测试初探(二)
Appium+python自动化(十九)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)参数(超详解)
  前边几篇介绍了Monkey以及Monkey的事件,今天就给小伙伴们介绍和分享一下Monkey的参数。
北京-宏哥
2019/07/16
6710
Appium+python自动化(十九)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)参数(超详解)
Android 模拟用户点击
Android模拟用户点击。在自动化测试中可使用的工具。 可以利用adb命令,也可以使用Android SDK中的monkeyrunner工具。
AnRFDev
2021/02/01
2.4K0
Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)
  Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。
北京-宏哥
2019/07/10
2.1K0
Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)
推荐一款好用的APP性能测试工具——Monkey!
Monkey是 Android 中的一个命令行工具,可以运行在模拟器里或实际设备中。
Wu_Candy
2022/07/05
6.3K0
推荐一款好用的APP性能测试工具——Monkey!
Appium+python自动化(二十一)- 让猴子按你指令大闹手机 MonkeyScript(超详解)
  一年一度的暑假如期而至,每年必不可少的,便是《西游记》这部经典电视连续剧的播出,作为一名90后,对于这部经典剧的情谊,就是观看已成为一种习惯。依然深刻的记得,小时候妈妈为了催促我睡觉,而关掉我的《西游记》,那种哀求不成继而绝望的感觉,至今记忆犹新。长大后只要得空在家,哪怕手里做着其他的事情,也要把电视开着,听一听《西游记》。“你挑着担,我牵着马,迎来日出,送走晚霞——”这首基本人人能唱几句的歌曲,陪着我们一代又一代人,走过童年,青年和少年,甚至中年,或许还有将来的老年。坐在沙发上,当熟悉的音乐响起,心中突然冒出一股莫名的激动,电视里活泼生动的师徒几人,即便都能背出的故事情节,依旧能让我露出微笑。
北京-宏哥
2019/07/19
1.4K1
Appium+python自动化(二十)- 猴哥失散多年的混血弟弟还是妹妹- Monkey猴子日志
  日志是非常重要的,用于记录系统、软件操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统、软件的活动等重要作用,在开发或者测试软系统过程中出现了问题,我们首先想到的就是她——logging。她可不像泰戈尔说的:“天空没有留下翅膀的痕迹,但我已经飞过”;Monkey这个小姑娘,她可是一个爱炫耀,爱显摆的人已经达到了人过留名、雁过留声的境界。只要我们按图索骥就一定可以定位到问题所在,然后分析问题,解决问题。好了逗大家一乐,下面开始进入今天的正题。
北京-宏哥
2019/07/19
1.2K0
推荐阅读
相关推荐
android自动化之monkeyrunner
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验