学习记录:Monkey测试
1、为什么要开展压力测试
提高产品的稳定性
提高产品的留存率
2、什么时候开展压力测试
首轮功能测试通过后
下班后的夜间进行
ADB 安装调试桥
什么是MonkeyScript
MonkeyScript是一组可以被Monkey识别的命令集合
MonkeyScript可以完成重复固定的操作
什么是MonkeyRunner?
MonkeyRunner提供了一系列的API
MonkeyRunner可以完成模拟事件及截图操作
Monkey和MonkeyRunner的区别
Monkey:在adb shell中,生成用户或系统的伪随机事件。
MonkeyRunner:通过API定义特定命令和事件控制设备。
MonkeyRunner APIs
MonkeyRunner:用来连接设备或模拟器
MonkeyDevice:提供安装,卸载应用,发生模拟事件
MonkeyImage:完成图像保存,及对比的操作
MonkeyRunner的测试类型
多设备控制
功能测试
回归测试
压力测试结果
1、CRASH:即奔溃,应用程序在使用过程中,非正常退出。
2、ANR:Application Not Responding
adb常用命令
adb help 查看帮助手册
adb devices 检测连接到电脑的安卓设备
adb pull 手机路径 本机路径 从手机中拉取信息放到本地电脑上
adb push 本机路径 手机路径 从本地推送信息到手机上去
adb install 电脑路径 从电脑把apk安装到设备上-(手打命令后可以直接,把apk拉进cmd)
adb shell pm list packages 查看手机端安装的所有app包名
adb uninstall 包名
adb shell pm list packages 查看你的手机所有的安装包;
adb shell pm list packages -3 查看手机上所有的第三方安装包
搭建andriod sdk环境
压测过程
确认手机和电脑成功连接
adb devices
· 安装测试App
adb install package.apk
发送压力指令
adb shell monkey 1000 #完成一千个指令
获取App包名
adb logcat | grep START
给指定包打压力
adb shell monkey -p package 1000
首先用一个最简单的mokey去试着找哪个是你想要的安装包名称:
1./ / -p参数:表示指定测试的程序(空格后面跟安装包名字,拿刚才的第三方安装包一个个试)
/ /-v参数:表示查看monkey执行过程的信息(日志级别)(-v 越多越详细,最多三个)
/ /数字100:表示测试事件数为100
指定一个包 adb shell monkey -p com.tencent.news -v -v -v 100 (此时指定软件会被打开并开始乱点乱按)
指定多个包 adb shell monkey -p com.tencent.news -p com.pdfreader -p com.widgets -v 1000
不指定包 adb shell monkey -v 1000
Monkey高级参数的应用
1、throttle参数
指定事件之间的间隔
adb shell monkey --throttle <milliseconds>
2、seed参数
指定随机生成数的seed值
adb shell monkey -s <seed> <event-count>
3、触摸事件
设定触摸事件百分比
adb shell monkey --pct-touch <percent>
4、动作事件
设定动作事件百分比
adb shell monkey --pct-motion <percent>
5、轨迹球事件
设定轨迹球事件百分比
adb shell monkey --pct-trackball <percent>
7、主要导航事件
设定主要导航事件百分比,兼容中间键,返回键,菜单按键
adb shell monkey --pct-majornav <percent>
8、系统导航事件
设定系统导航事件百分比,HOME,BACK,拨号及音量键
adb shell monkey --pct-syskeys <percent>
9、启动Activity事件
设定启动Activity的事件百分比
adb shell monkey --pct-appswitch <percent>
10、不常用事件
设定不常用事件的百分比
adb shell monkey --pct-anyevent <percent>
11、奔溃事件
忽略奔溃和异常
adb shell monkey --ignore-crashes <event-count>
12、超时事件
忽略超时事件
adb shell monkey --ignore-timeouts <event-count>
CRASH结果析取
1、安装可以引起CRASH的App
2、执行压力命令
3、析取CRASH的Exception信息
Events injected:XXX执行到几行
sing seed XXXX 重复之前的操作
adb shell monkey -p XXX(包名) -s XXX(重复之前的操作结束事件) 10000
忽略错误继续进行
adb shell monkey -p XXX(包名) --ignore-crashes 10000
ANR结果析取
1、安装可以引起ANR的App
2、执行压力命令
3、析取ANR的Exception信息
adb install XXX.apk
adb shell monkey -p XXX(包名) 1000
获取ANR
adb shell
cd /data/anr/
traces.txt
more traces.txt
无响应问题可以在日志中搜索 “ANR” ,崩溃问题搜索 “CRASH” ,内存泄露问题搜索"GC"(需进一步分析),异常问题搜索 “Exception”
monkey执行时未加–ignore-crashes --ignore-crashes参数,就先浏览日志中Events injected: 值,查看当前已执行的次数,就知道有无bug
程序无响应的问题:在日志中搜索 “ANR”
崩溃问题:在日志中搜索 “Exception” ,在这里顺便提一下常见的Java异常:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
违法访问错误:IllegalAccessError
内存不足错误:OutOfMemoryError
堆栈溢出错误:StackOverflowError
Monkey Script
执行Monkey脚本的命令,
adb shell monkey -f
1、DispatchTrackball命令
轨迹球事件
DispatchTrackball(long downtime, long eventide, int action, float x, float y, float pressure, float size, int metastate, float xprecision, float yprecision, int device, int edgeflags)
action 0 代表按下, 1代表弹起, x和y代表坐标点
2、DispatchPointer命令
点击事件
DispatchPointer(long downtime, long eventide, int action, float x, float y, float pressure, float size, int metastate, float xprecision, float yprecision, int device, int edgeflags)
action 0 代表按下, 1代表弹起, x和y代表坐标点
3、DispatchString命令
输入字符串事件
DispatchString(String text)
4、LaunchActivity命令
启动应用
LaunchActivity(package,Activity)
5、UserWait命令
等待事件(等待元素的出现)
UserWait(1000)
6、DispatchPress命令
按下键值
DispatchPress(int keycode) #keycode 66 回车键
1、启动App
2、点击输入框
3、输入查询词
4、点击键盘的回车
5、点击搜索按钮
6、等待结果出现
7、点击clear按钮
demo
typ=user
count=10
speed=1.0
start data >>LaunchActivity(XXXX,.MainActivity)
DispatchPointer(10,10,0点击,x一样,y一样,1,1,-1,1,1,0,0)
DispatchPointer(10,10,1按下,x一样,y一样,1,1,-1,1,1,0,0)
DispatchString(text)
UserWait(1000)
DispatchPress(66)
UserWait(1000)
DispatchPointer()
DispatchPointer()
UserWait(6000)
元素定位
andriod-sdk
tools
uiautomatorviewer
bounds [x大于,y大于][x小于,y小于]
运行脚本
adb shell monkey -f XXX.script 2
把脚本放到手机路径
adb push XXX.script XXXX路径
MonkeyRunner
1、MonkeyRunner API - alert
警告框
viod alert(string message, string title, string okTitle)
#!/user/bin/python
#-*- UTF-8 -*-
from com.android.monkeyrunner import MonkeyRunner
MonkeyRunner.alert('Hellp mook frends', 'This is title', 'OK')
执行方式:monkeyrunner demo.py
PS:tools变量需要配置环境,否则报错
2、MonkeyRunner API - waitForConnection
等待设备连接,有多个device id,需要指明具体哪个设备。
waitForConnection(float timeout, string deviceid)
3、MonkeyDevice API - drag
拖动
drag(tuple start, tuple end, float duration, integer steps)
4、MonkeyDevice API - press
按键
press(string keycode, dictionary type)
keycode名,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、MonkeyImage API -sameAs
图像对比
boolean sameAs (MokeyImage other,float percent)
10、MonkeyImage API - writetoFile
保存图像文件
void writeToFile (string path, string format)
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage
#连接设备
device = MonkeyRunner.waitForConnection(3,"192.168.56.101:5555"
monkey测试命令
adb shell monkey -v -v -v -s 8888 --throttle 300 --pct-touch 30 --pct-motion 25 --pct-appswitch 25 --pct-majornav 5 --pct-nav 0 --pct-trackball 0 -p com.wwdy.app 10000 >D:\monkey.txt
压测
adb shell monkey -s 0 -vvv -p com.example.hello --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes 1000 >e:\log1.txt 2>&1
Monkey支持的所有命令
adb shell monkey
Monkey命令-事件间隔
throttle 在事件之间插入固定延迟。通过这个选项可以控制Monkey发送事件的频率。时间单位是ms(毫秒)1000毫秒=1秒。例1:发送10个事件,持续执行时间1分钟。adb shell monkey --throttle 6000 10,即10个事件,做完一个事件就等待6秒后再执行。
Monkey命令——指令包
p 此参数指定了一个包,Monkey将只允许系统启动这些包里的Activity。
-p -p 如果用此参数指定了多个包,Monkey将只允许系统启动这些包里的Activity。
例3:对app进行稳定性测试,执行100次事件。adb shell monkey -p com.wuba 100
获取包名
adb shell pm list packages
Monkey命令-日志设置
-v Level 0 除启动提示、测试完成和最终结果之外,提供较少信息。
-v-v Level 1 提供较为详细的测试信息,如逐个发送到Activity的事件。
-v-v-v Level 2 提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。
例4:对app进行稳定性测试,执行100次事件,分别查看不同日志级别记录的信息情况。adb shell monkey -p com.wuba -v 100adb shell monkey -p com.wuba -v-v 100adb shell monkey -p com.wuba -v -v -v 100
日志导出到本地
adb shell monkey -p com.wuba -v-v-v 100 >d:\wuba.txt
Monkey命令-seed值
在Monkey运行过程中,肯定会发现异常、奔溃、无响应等问题,对于此类问题如何进行复现呢?-s 伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。使用场景复现bug,回归测试(验证bug)adb shell monkey -s 1593077384911 -p com.wuba -v-v-v 100 >d:\wuba4.txtadb shell monkey -s 100 -p com.wuba -v-v-v 50在Monkey运行过程中,我们可以通过结束进程的方式来终止Monkey的执行,当然在运行过程中遇到异常、奔溃等情况Monkey也会停止。为了保证执行的事件数执行完整,我们可以通过调试选项的设置来防止在运行过程中Monkey命令的提前结束。–ignore-crashes 忽略在应用程序出现crash时导致的monkey停止。–ignore-timeouts 忽略在应用程序出现ANR问题时导致monkey停止。–ignore-security-exceptions 忽略应用程序发生许可错误时导致monkey停止。例5:对58同城进行稳定性测试,执行50次事件,忽略过程中遇到的异常,直到50次事件完成。adb shell monkey -p com.wuba --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v-v-v 50部份参数:–pct-touch:触摸事件 --pct-trackball :轨迹事件。–pct-motion:动作事件(手势) --pct-nav :基本导航事件。–pct-appswitch:启动activity事件 -pct-majornav:主要导航事件。–pct-rotation:屏幕旋转事件 --pct-syskeys:“系统”按键事件。
总结:
1、Monkey是对安卓apk进行随机事件的操作,通过报告来查看apk是否稳定。
2、只适用安卓平台。
3、根据公司不同产品的特性可设置不同概率来针对性测试或回归(如抖音他的滑动频率高)。
使用python os输入cmd命令
import oscmd = '''adb shell monkey 50'''os.system(cmd)
学习记录:Monkey测试相关推荐
- Arduino不同测距传感器对于较小物体测距效果【学习记录】
文章目录 前言 一.HC-SR04超声波测距模块 二.TOF200F红外激光测距模块 三.SP-TOF可见激光测距模块 总结 前言 由于最近的设计项目有对于较小物体车测距需求,所以对三种类型的测距模块 ...
- gradle exclude_Gradle学习记录020 java工程的测试 part1
详细学习如何用Gradle测试java工程.第二部分.该学习记录基于Gradle官方网站资料.本篇参考链接如下: https://docs.gradle.org/current/userguide/j ...
- 记录一次Monkey测试全流程
记录一次Monkey测试全流程 1.检查设备连接 ZHR:~ zc$ adb devices List of devices attached JPF4C19123011893 device 2.查看 ...
- monkey测试_爱码小士丨 APP稳定性测试(附视频详解)
在实际的测试过程中,主要是对系统的功能来进行测试,用于校验功能的正确性 还需要考虑到系统在未修改的状态下,是否能够稳定运行,即崩溃.闪退.重启.系统异常等等等地情况 在APP中,稳定性测试一般是交由M ...
- 【UI自动化测试】Mac下进行Monkey测试
[写在前面]在进行app测试中了解到monkey测试,故在网上学习了一些资料,但自己在实践中仍有一些疑惑和问题出现.在此记录下自己的实际操作,后续仍然会不断调整,以期完善. 一.对monkey压力测试 ...
- Android开发、adb、monkey测试
一. 手机测试概念 传统手机测试 VS 手机应用软件测试 传统手机测试:指测试手机本身比如抗压,抗摔,抗疲劳,抗低温高温等.也包括手机本身功能.性能等测试. 手机应用软件测试 C/S Client/S ...
- Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...
- springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis
本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...
- Redis的学习记录
Redis的学习记录 1.先导了解 1.1 NOSQL概述 1.1.1 为什么要用NoSql? 1.1.2 NoSql了解 1.1.3 NoSql特点 1.1.4 NoSQL的四大分类 2. Redi ...
- cmd与monkey测试
monkey测试的相关命令 monkey是模拟用户触摸操作,不支持条件判断. monkey命令格式: 启动安卓模拟器/真机 点击运行->输入cmd->进入命令行界面 查看设备连接情况,a ...
最新文章
- [LeetCode]: 96: Unique Binary Search Trees
- 404. Sum of Left Leaves
- python处理pdf 层_Python处理PDF及生成多层PDF实例代码
- 正则表达式 - - - 补(爬虫正则之基础)
- 标准炮灰三人组飞鸽传书武侠片
- java hibernate更新_Hibernate更新某些字段的几种update方法
- 2018 蓝桥杯省赛 B 组模拟赛(一)--- H. 封印之门(最短路)
- 视频编解码(八):264/265解码器小结
- kafka_2.11-0.11.0.1集群搭建
- 【ATSC】美国地面数字电视广播从ATSC 1.0向ATSC 3.0标准的过渡
- g4900 win7 核显驱动_INTEL WIN7核显驱动电脑端下载-支持8、9代CPU pc下载
- 域名ICP备案查询API接口,免费好用
- win10打不开计算机配置似乎是正确的,Win10系统软件打不开提示“并行配置不正确”如何解决...
- 通过深度学习实现对网络异常流量检测
- 深入理解计算机系统arch lab
- VUE根据url下载文件
- PC版小米cc机器人自定义api接口插件PJ版
- java字母正则表达式,带有国际字母的Java正则表达式
- 聊聊心理学专业去用户体验研究方向的求职
- boost:system