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测试相关推荐

  1. Arduino不同测距传感器对于较小物体测距效果【学习记录】

    文章目录 前言 一.HC-SR04超声波测距模块 二.TOF200F红外激光测距模块 三.SP-TOF可见激光测距模块 总结 前言 由于最近的设计项目有对于较小物体车测距需求,所以对三种类型的测距模块 ...

  2. gradle exclude_Gradle学习记录020 java工程的测试 part1

    详细学习如何用Gradle测试java工程.第二部分.该学习记录基于Gradle官方网站资料.本篇参考链接如下: https://docs.gradle.org/current/userguide/j ...

  3. 记录一次Monkey测试全流程

    记录一次Monkey测试全流程 1.检查设备连接 ZHR:~ zc$ adb devices List of devices attached JPF4C19123011893 device 2.查看 ...

  4. monkey测试_爱码小士丨 APP稳定性测试(附视频详解)

    在实际的测试过程中,主要是对系统的功能来进行测试,用于校验功能的正确性 还需要考虑到系统在未修改的状态下,是否能够稳定运行,即崩溃.闪退.重启.系统异常等等等地情况 在APP中,稳定性测试一般是交由M ...

  5. 【UI自动化测试】Mac下进行Monkey测试

    [写在前面]在进行app测试中了解到monkey测试,故在网上学习了一些资料,但自己在实践中仍有一些疑惑和问题出现.在此记录下自己的实际操作,后续仍然会不断调整,以期完善. 一.对monkey压力测试 ...

  6. Android开发、adb、monkey测试

    一. 手机测试概念 传统手机测试 VS 手机应用软件测试 传统手机测试:指测试手机本身比如抗压,抗摔,抗疲劳,抗低温高温等.也包括手机本身功能.性能等测试. 手机应用软件测试 C/S Client/S ...

  7. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  8. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

    本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...

  9. Redis的学习记录

    Redis的学习记录 1.先导了解 1.1 NOSQL概述 1.1.1 为什么要用NoSql? 1.1.2 NoSql了解 1.1.3 NoSql特点 1.1.4 NoSQL的四大分类 2. Redi ...

  10. cmd与monkey测试

    monkey测试的相关命令 monkey是模拟用户触摸操作,不支持条件判断. monkey命令格式:  启动安卓模拟器/真机 点击运行->输入cmd->进入命令行界面 查看设备连接情况,a ...

最新文章

  1. [LeetCode]: 96: Unique Binary Search Trees
  2. 404. Sum of Left Leaves
  3. python处理pdf 层_Python处理PDF及生成多层PDF实例代码
  4. 正则表达式 - - - 补(爬虫正则之基础)
  5. 标准炮灰三人组飞鸽传书武侠片
  6. java hibernate更新_Hibernate更新某些字段的几种update方法
  7. 2018 蓝桥杯省赛 B 组模拟赛(一)--- H. 封印之门(最短路)
  8. 视频编解码(八):264/265解码器小结
  9. kafka_2.11-0.11.0.1集群搭建
  10. 【ATSC】美国地面数字电视广播从ATSC 1.0向ATSC 3.0标准的过渡
  11. g4900 win7 核显驱动_INTEL WIN7核显驱动电脑端下载-支持8、9代CPU pc下载
  12. 域名ICP备案查询API接口,免费好用
  13. win10打不开计算机配置似乎是正确的,Win10系统软件打不开提示“并行配置不正确”如何解决...
  14. 通过深度学习实现对网络异常流量检测
  15. 深入理解计算机系统arch lab
  16. VUE根据url下载文件
  17. PC版小米cc机器人自定义api接口插件PJ版
  18. java字母正则表达式,带有国际字母的Java正则表达式
  19. 聊聊心理学专业去用户体验研究方向的求职
  20. boost:system

热门文章

  1. VUE—下载安装并使用mint ui(图文详情)
  2. 如果你认为高端红酒与普通红酒成份是一样的话,我也可以告诉你...
  3. 发现讯时CMS4.5的几个问题
  4. 单片机工程师如何继续提升自己?
  5. 晶振并联 1_10M电阻 稳定
  6. 管外磁水处理器的简单介绍
  7. 视频浓缩中的轨迹组合技术
  8. 国庆日快到啦!国庆版头像来了!总有一款适合你!
  9. 全国多省市推广盘扣脚手架,模架大咖怎么看?
  10. 例说游戏角色设计与角色文化内涵的关系