测试——Monkey测试的介绍及使用
Monkey的简单介绍:
- Monkey是android系统自带的测试工具,他能运行在虚拟机和真机中。
- Monkey能向系统发送伪随机的用户事件流(像按键,触摸,手势操作等)进行模拟操作,实现对程序的压力测试。
- Monkey所产生的事件都是随机的,不会带有主观性。
- 用来测试安卓移动端App的健壮性和稳定性。
Monkey的简单使用:
搭建环境:
Android SDK环境:下载Android SDK,下载完成后,添加路径到Path。(步骤简单不会的自行百度)
下面是Android SDK下载地址:Android SDK下载地址。
Python环境:下载Python下载完成后一路next安装上就行了。
下面是Python下载地址:Python下载地址
配置好环境之后连接手机或者模拟器(注意要在连接电脑之前把usb调试打开),然后在cmd命令行输入adb devices会出现一行手机唯一标志名。代表手机和电脑已经建立了软连接。
安装一个被测软件:
(命令行输入)adb install App文件名.apk
卸载一个软件:
(命令行输入)adb.uninstall 包名
发送各种测试指令:
- 发送压测指令
adb shell monkey 1000
adb shell +工具名称+完成1000次指令(随机) 一些提示信息: activityResuming (com.******) 代表这个程序从前台调入到后台再从后台回调到前台这个过程。 Events injected:1000 这个提示信息就代表完成了一千次操作,如果小于1000的话代表有错误,未执行1000次。
- 要给某个程序打压力,就要获取App包名。 获取包名方法:
(命令行输入)adb shell pm list package -f (获取手机内所有程序的包名,包括系统程序) (命令行输入)adb shell dumpsys window w | findstr \/ | findstr name= (获取正在打开的程序的包名)注意空格要加齐了,没空格的地方不要乱加。
输出的东西是:包名/Activity名。
- 给某一个程序打压力 :
adb shell monkey -p 包名 -v -v -v 1000 (-v 代表输出信息级别,1000代表次数)
- 时间间隔参数--throttle 就是说在执行每个操作之间的时间间隔 :
adb shell monkey -p 包名 --throttle 500 -v -v -v 100 (延迟500毫秒执行一次,共执行100次)
- 打印输出的日志结果:
adb shell monkey -p 包名 --throttle 500 -v -v -v 100 > D:/monkey_log.txt (延迟500毫秒执行一次,共执行100次 ,并且记录下日志结果打印到D盘下)
然后我们看一下打印出来的结果。
首先我们能看到日志文件确实存在了。然后我们打开看一下。
这上边的提示是:
测试的seed值(因为是随机事件100次,所以seed值是随机的),这个seed值就是说如果我们此次测试出现问题下次用这个seed值就能复现。
count:测试各种事件总共的次数。
Include Category:测试包含的类别。
这个就是说测试了100次,sending rotation degree 未发现错误,下边的那些也是一样。
顺便说一下他主要测试的一些点。
我们知道seed是测试编号,下边的0-11就是这次测试都进行了什么事件。做了多少(按百分比)。
其他一些参数的使用:
- Seed :想要两次执行相同的操作,我们就要设置一个seed值:
adb shell monkey -p 包名 -s 数字 次数 例如: adb shell monkey -p 包名 -s 50 100
- 设置点击事件占总事件的百分比:
adb shell monkey -v -p 包名 --pct-touch 50 100
(解释一下:-v打印日志,-p测试哪个app, --pct-touch 50 点击事件占总事件的50% 100触发100次随机事件) 我在下边放一张图你就能直观看到其中含义,可以看到0事件触发概率是50%。
- 动作事件:
adb shell monkey -v -p 包名 --pct-motion 50 100 (由第二小点总结的理解第三小点并不难)
如果想要约束两个或者三个事件一起执行的百分比,写法如下:
adb shell monkey -v -p 包名 --pct-touch 50 --pct-motion 50 100(意思就是点击事件和动作事件的百分比各占50%)
轨迹球事件:
adb shell monkey -v -p 包名 --pct-trackball 80 100 轨迹球事件占总事件的80%,总共执行100次
- 基本导航事件:
adb shell monkey --pct-nav 80 100 基本导航事件(输入设备的上下左右)占总事件的80%,总共执行100次
- 主要导航事件:设定主要导航事件的百分比,兼容性中间键,返回键,菜单键
adb shell monkey --pct-majornav 80 100 主要导航事件占总事件的80%,总共执行100次
- 系统导航事件:设定系统导航事件的百分比,HOME、BACK、拨号及音量键
adb shell monkey --pct-syskeys 80 100 系统导航事件占总事件的80%,总共执行100次
- 启动Activity事件:
adb shell monkey --pct-appswitch 80 100 启动Activity事件占总事件的80%,总共执行100次
- 不常用事件:
adb shell monkey --pct-anyevent 80 100 不常用事件占总事件的80%,总共执行100次
- 崩溃事件:设置一下,在系统跑崩溃之后还要继续执行。直到事件数跑够才停止。
adb shell monkey --ignore-crashes <event-count>
- 超时事件:设置一下,在系超时之后还要继续执行。直到事件数跑够才停止。
adb shell monkey --ignore-timeouts <event-count>
CRASH结果的析取:
实现步骤:安装一个能引发CRASH 的 App →执行压力测试命令(触发CRASH)→提取CRASH的Exception信息。
adb shell monkey -v -p 包名 --ignore-crashes 10000 //出现Crash后继续执行
ANR结果的析取:
实现步骤:安装一个能引发ANR的 App →执行压力测试命令(触发ANR)→提取ANR的Exception信息。
手动测试的时候出现ANR怎么获取Log信息:
adb shell
cd data/anr //到anr目录下
ls //查看一下文件
more (tracts)文件名 //查看文件内容
执行Monkey脚本功能:
在测试过程中如果不使用脚本功能可能执行的事件是随机的。所以想要执行相同功能就要用到
Monkey Script:它的使用就先要把脚本传输到手机上
adb push d:\monkey.txt sdcard/monkey.txt 将文件发送到手机
格式:adb push 电脑路径文件 手机路径文件。
然后通过指令执行:
adb shell monkey -f <scriptfile> <event-count>
Monkey Script 的一些命令:
1 Dispatch Trackball 命令
轨迹球事件:
Dispatch Trackball(longdowntime,long eventide,int action,float x ,float y ,....)
action 0 代表按下 , 1 代表弹起 ,x,y代表坐标点。
2 Dispatch Pointer 命令
点击事件:
Dispatch Pointer(longdowntime,long eventide,int action,float x ,float y ,....)
action 0 代表按下 , 1 代表弹起 ,x,y代表坐标点。
3 Dispatch String命令
输入字符串事件
Dispatch String (String text)
4 Launch Activity 命令
启动应用
Launch Activity(package,Activity)(包名,活动页面名)
5 UserWait命令
等待事件
UserWait(1000)
6 Dispatch Press
按下键值
Dispatch Press (int keycode) #keycode 66 回车键 ,不同的keycode 代表不同的键值
其他一些命令:
RotateScreen(rotationDegree, persist): 翻转屏幕,第一个参数是旋转角度,第二个是旋转后是否停在当前位置Tap(x, y) :单击事件,点击屏幕,参数是点击坐标Drag(xStart, yStart, xEnd, yEnd) :在屏幕上滑动,坐标是从哪一点滑到哪一点LongPress(): 长按2sProfileWait(): 等待5sPressAndHold(x, y, pressDuration) :模拟长按 PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模拟缩放RunCmd(cmd) :执行shell命令,比如截图 screencap -p /data/local/tmp/tmp.pngDispatchFlip(true/false) :打开或者关闭软键盘UserWait(sleepTime) :睡眠指定时间DeviceWakeUp() :唤醒屏幕
编写一个简单的浏览器搜索脚本:
编写步骤:
1 启动App
2 点击输入框
3 输入查询词
4 点击键盘回车键
5 点击搜索按钮
6 等待结果出现
7 点击清除按钮typ = user
count = 10
speed = 1.0
start data >>LaunchActivity(com.android.browser,com.android.browser.BrowserActivity) //设置开启那个软件,哪个界面
UserWait(2000) //等待两秒
DispatchPointer(10,10,0,400,400,1,1,-1,1,1,0,0) //设置按下输入框点击焦点
DispatchPointer(10,10,1,400,400,1,1,-1,1,1,0,0) //设置抬起输入框点击焦点
DispatchString(test) //设置要搜索的文字
UserWait(1000) //等待一秒
DispatchPress(66) //点击回车键
UserWait(1000) //等待一秒
DispatchPointer(10,10,0,400,900,1,1,-1,1,1,0,0) //设置按下搜索的点击焦点
DispatchPointer(10,10,1,400,900,1,1,-1,1,1,0,0) //设置抬起搜索的点击焦点
UserWait(6000) //等待6秒
DispatchPointer(10,10,0,756,281,1,1,-1,1,1,0,0) //设置按下输入框点击焦点
DispatchPointer(10,10,1,756,281,1,1,-1,1,1,0,0) //设置抬起输入框点击焦点
UserWait(3000) //等待三秒
脚本编写完成以后想要运行这个脚本就要把此脚本放到手机中。那编写的脚本文件在电脑中怎么放到手机中呢?用如下命令
脚本名monkey.script 位置:D盘根目录下 想要放到手机中的位置: data/local/tmp 目录下命令行执行:adb push D:/monkey.script /data/local/tmp/
可以看到如下执行结果,代表文件已经成功导入到手机中。
导入成功后就要切换到手机目录下,用手机里的monkey去执行我们的monkey.script.脚本了操作步骤如下:
命令行输入:
adb shell //切换到手机目录下
cd /data/local/tmp //进入到我们存放脚本的目录
ls //查看目录下是否有我们已经导入的脚本,确认存在
monkey -f monkey.script 2 //执行monkey.script脚本执行两次
这里要注意,要确定app工程中设置了能被外部调起 android:exported = "true"。
MonkeyRunner
在运行monkeyrunner的时候可能会有踩到一些坑,我把坑总结了一下,如有monkeyrunner 无法启动的问题,脚本执行命令问题请查看——————MonkeyRunner无法正常运行
为了要满足更多的模拟操作我们就要用到monkeyRunner中的一些API
1、MonkeyRunner API - alert
警示框
代码段 void alert (string message ,stringtitle,string okTitle) //正文内容,警告框的title ,按钮上的文字我们在编译器中编写如下代码#!/usr/bin/python#-*- UTF-8 -*-from com.android.monkeyrunner import MonkeyRunner MonkeyRunner.alert('hello mook frends','this is title','OK')
执行结果:
2、MonkeyRunner API -waitForConnection
等待设备连接,有多个device id,需要指明具体哪个设备。waitForConnection(float timeout,string deviceid)
3、MonkeyDevice API -drag
拖动:drag(tuple start,tuple end,float duration,integer steps) (拖动起始点位置,拖动结束点位置,手势持续时间,插值点的步数,默认10)
4、MonkeyDevice API -press
按键
press(string keycode,dictionary type)(keycode(回车键66),动作类型Down、UP、DOWN_AND_UP(弹起,按下))
5、MonkeyDevice API - startActivity
启动应用startActivity(package+'/'+activity)
6、MonkeyDevice API -touch
touch(integer x,integer y,integer type)(x坐标值,y坐标值,type= DOWN,UP,DOWN_AND_UP)
7、MonkeyDevice API -type
输入
type(string message)
文本信息
8、MonkeyDevice API -takeSnapshot
截屏
MonkeyImage takeSnapshot()
9、Monkey Image API - sameAs
图像对比boolean sameAs (MonkeyImage other,float percent)
(文件名称,相似度百分比)
10、MonkeyImage API -writetoFile
保存图像文件void writeTOFile(string path,string format)
(保存文件的路径,保存文件的格式(JPG、PNG...))
综合:在输入框输入文字,并截图。
#!/usr/bin/python#-*- UTF-8 -*-#把要用到的模块导入到工程中
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage#连接手机(延迟多少秒,手机的devices号)
device = MonkeyRunner.waitForConnection(5,"emulator-5556")#要运行软件的包名和Activity名
device.startActivity("com.android.browser/com.android.browser.BrowserActivity")
#延迟两秒
MonkeyRunner.sleep(2)#按下输入文本框操作
device.touch(400,400,'DOWN_AND_UP')
#延迟一秒
MonkeyRunner.sleep(1)#输入文本
device.type('test')
#延迟一秒
MonkeyRunner.sleep(1)#按下回车键
device.press('66','DOWN_AND_UP')
#延迟一秒
MonkeyRunner.sleep(1)#点击搜索按钮
device.touch(400,900,'DOWN_AND_UP')
#延迟六秒
MonkeyRunner.sleep(6)#将执行后的界面截图,并保存到D盘下
result = device.takeSnapshot()
result.writeToFile('D:\TEST.png','png')
脚本文件如上,编写的时候不要添加中文。否则会出现编码错误的问题。
编好后,执行结果如下:
查看一下D盘下的文件:
到此为止,monkey的简单使用就介绍完了。
测试——Monkey测试的介绍及使用相关推荐
- 移动端测试Monkey测试
Monkey测试 4.1. 参考资料 Android之Monkey全参数(包含隐藏参数)_北极的冰箱的博客-CSDN博客_android monkey 参数 4.2. Money介绍 顾名思义,Mon ...
- 行意天下正文 Android Day02-Android中单元测试(junit测试)monkey测试
Android中junit测试有2种实现方式 第1种:一般Android工程的实现方式 1.在清单文件中添加2项内容 首先在AndroidManifest.xml中加入下面红色代码: <mani ...
- android测试-monkey测试
文章目录 前言 一.为什么Monkey测试 二.什么是Monkey测试 三.如何做monkey测试 前言 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实 ...
- 【Monkey测试】Monkey测试详解
一.什么是 Monkey 测试 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对应用程序客户端的稳定性测试: 通俗来说,Monkey 测试即" ...
- [原创]Android Monkey测试工具使用介绍
[原创]Android Monkey测试工具使用介绍 1 Android Monkey介绍 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件 ...
- monkey 测试介绍
目录 前言 环境搭建 什么是Monkey Monkey 用来做什么 Monkey程序介绍 Monkey 架构 Monkey弱点 Monkey 参数大全 Monkey 命令 基本参数介绍 Monkey ...
- android服务器压力测试,Android压力测试Monkey工具
最近在Android程序测试过程中接触到了自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner其它test t ...
- monkey测试_用 Instrumentation 改良 Monkey 工具实战
作者:杭州城西费德勒 - 曾中华 这里 Monkey 不是猴子,而是 Android 系统中用来做自动化测试的工具,即盲点.压力测试. 在之前的移动端产品迭代中,Monkey 工具一直没有利用起来.开 ...
- Monkey测试简介
在android手机上做自动化测试,monkey比cts,Android UnitTest 好用多了,他其实是继承与adb shell中的一段的shell指令. 一monkey测试的相关的原理 mon ...
最新文章
- windows 域环境应用---VNC远程协助工具的使用
- Javascript全局变量和delete
- oracle 12c 13姨
- ashx session 使用注意要点。
- 白话Elasticsearch31-深入聚合数据分析之bucket与metric
- 组件与组件之间的通信以及vue2.0中的变化、示例
- LoadRunner 12.02 安装教程及中文语言包安装
- luogu 1484\1792 种树 奇怪的贪心可反悔
- 《C++ Primer》7.1.2节练习(部分)
- 牛客网【每日一题】5月8日题目精讲 codeJan与旅行
- 双层板在哪层覆铜_PCB覆铜箔层压板分类和工艺解析
- Web.config的配置
- html 右边是iframe 左右结构_站点的内链优化和一些常用的结构优化方法
- Codeforce C. Bus
- 计算机系统结构概念,计算机系统结构的基本概念
- element-UI快速上手例子运行失败
- Hexo修改鼠标样式
- ubuntu下安装rtl8811cu/rtl8821cu网卡 Tplink WDN5200H网卡
- Stata教程(二)---基本操作
- JavaScript -- 对象与原型链 [[Prototype]]
热门文章
- 怎么抵抗DDOS攻击?
- flask导入mysql数据库_flask 数据库报错
- 问题:C-Kermitc Sorry, you must SET LINE or SET HOST first
- android pc模拟器哪个好用,电脑手游安卓模拟器哪个好用流畅 好用的安卓模拟器...
- 语音控制Office,这个功能一定要体验
- [系统] Deepin系统常见问题解决(持续更新)
- 数字商品指南系列第三篇:编写智能合约并编译部署
- 使用html2canvas生成海报
- 如何根据小米12手机电池信息计算充电时间
- tig 使用_使用TIG监控机器