monkey测试命令参数及流程

1、压力测试与稳定性测试的概念
压力测试:
在一定时间内对系统进行不断加压的测试
当天执行的测试
稳定性测试:
在一段时间内一定压力下运行的稳定性情况
功能基本稳定后,一直到项目结束(验收)停止

2、monkey测试
monkey测试只适用于Android;iOSmonkey是爱好者自己搞的一个工具
它向系统发送伪随机的用户事件流(如:按键输入、触屏输入、手势输入等),实现对正在开发的应用程序进行压力测试
随机:站在用户的角度来说,操作没有可控性,完全随机
用户事件流:用户能做什么,monkey就能做什么
伪随机:测试有一定规律
日志:分为 monkey日志 和 系统日志

3、monkey命令及参数

1.对手机整个系统进行测试:adb shell monkey [命令参数] count
count:事件数
所有参数只要放在monkey和count之间即可
adb shell monkey 200
对手机整个系统随机发布200次指令

  1. -p 指定一个或多个包,指定后所有的指令都会针对该APP进行操作。如果时间够长,也能执行到其它APP上。执行过程中会进行包名检测,如果不是测试对象,则会切换到后台;然后重新打开被测APP。
    adb shell monkey -p com.songqin.sqcs1 200
    adb shell monkey -p com.songqin.sqcs1 -p com.songqin.sqcs2 200

  2. -v 用于反馈返回信息的详细程度,即日志的详细级别。分别为 -v 、 -v -v 、-v -v -v 三级,等级越高,日志越详细。
    -v :默认值,仅提供启动提示、测试完成、最终结果及 Crash 日志等少量信息
    adb shell monkey -p com.songqin.sqcs -v -v -v 200

  3. -s 指定测试的种子值/序列值,规定操作步骤,体现的是monkey测试的随机操作。用于测试验证,复现bug。
    seed值:只有自己一个测试的时候可以随便取的一个数字。
    从开始执行monkey测试到结束monkey测试,这个期间seed值不要变。
    当加入团队的时候,要和团队的seed值保持一致
    原因:一个seed有N多bug,无限多的seed会导致无限多的bug===>无穷无尽的
    adb shell monkey -p com.songqin.sqcs1 -s 111 200

  4. –ignore-crashes
    如果使用该参数,那么发生崩溃或者闪退,重新启动APP继续执行,直到完成,但是日志中会记录。
    如果不使用该参数,在崩溃或闪退时,monkey测试就会停止在发生问题的界面
    adb shell monkey -p com.songqin.sqcs1 -s 111 --ignore-crashes 200

  5. –ignore-timeouts
    如果使用该参数,那么发生无响应的问题,重新启动APP继续执行,直到完成,但是日志中会记录。
    如果不使用该参数,在无响应时,monkey测试就会停止在发生问题的界面

  6. –ignore-security-exceptions
    如果使用该参数,那么发生安全认证问题的时候,继续执行或者重新启动app,直到次数完成。日志中不会记录

  7. –kill-process-after-error (一般不用)
    当测试中发生错误时,停止monkey进程

  8. –throttle MILLISEC
    延迟 单位毫秒 1000ms=1s 一般是1000以内,800以下.
    延迟时间 次数 算===>凭经验 ,通常是8-10小时,执行35万次左右
    部分操作是按照停留3秒,部分操作没有等待时间,最长等待时间是3000,如果超过3000还没有响应过来,就报错超时

  9. –monitor-native-crashes 监控本地程序奔溃情况
    –ignore-native-crashes 忽略本地的奔溃,继续执行测试,直到次数完成,会在日志中记录
    通常这两条命令一起使用

  10. 关于事件数的百分比,一般情况下不需要去修改。除非是测试的某一个动作是高概率事件的时候
    [–pct-touch PERCENT 触摸事件百分比
    [–pct-motion PERCENT] 滑动事件百分比
    [–pct-trackball PERCENT] 轨迹事件百分比
    [–pct-syskeys PERCENT] 系统事件百分比
    [–pct-nav PERCENT] 基本导航事件百分比
    [–pct-majornav PERCENT] 主要导航事件百分比
    [–pct-appswitch PERCENT] Activity启动事件百分比
    [–pct-flip PERCENT] 键盘翻转事件百分比
    [–pct-anyevent PERCENT] 其它事件百分比
    [–pct-pinchzoom PERCENT] 缩放事件百分比
    [–pct-permission PERCENT]

4、结果

1.通过 只有出现 //Monkey finished 才算通过,其他都为失败
2.失败 分为crash和anr ,在日志中查看大写的//CRASH开头或者//NOT RESPONDING
Crash:奔溃,闪退,停止运行
报错格式://CRASH:com.songqin.sqcs(pid 16828)
ANR:application no/not responding 无响应
报错格式: // NOT RESPONDING: edu.yjyx.student (pid 20014)
ANR in edu.yjyx.student (edu.yjyx.student/.module.main.ui.MainActivity)
3.异常停止:monkey测试没有完成
4.重启,关机,tcpdump:在 logcat中确认

5、monkey命令停止
monkey本身是可以通过命令去停止的,一般需要停止的时候对手机进行强制关机/重启。可以通过命令去停止,但是麻烦

6、日志

分为monkey日志和系统日志(monkey日志和logcat日志的指令分别在不同的cmd窗口中运行)
monkey的日志:只是记录了通过monkey命令对APP的操作步骤的记录
系统日志:记录手机系统在运行APP时有没有异常事件。如:CRASH、ANR等。logcat日志比monkey日志更加详细。
在新的cmd窗口中运行:adb logcat -v time >D:\log\logcat.txt
-v:以日志的方式打开。monkey测试命令中的-v代表日志的级别
time:抓取带有时间的日志记录

日志中的显示格式:
(1) Crash:
monkey中显示为:(在monkey日志中搜索CRASH)
// CRASH: com.songqin.sqcs (pid 16828)
logcat 中显示为: (在logcat日志中搜索FATAL或者EXCEPTION)
06-17 23:53:54.162 E/AndroidRuntime( 3375): FATAL EXCEPTION: main
06-17 23:53:54.162 E/AndroidRuntime( 3375): Process: edu.yjyx.student, PID: 3375
(2)ANR:
monkey中显示为:
// NOT RESPONDING: edu.yjyx.student (pid 20014)
ANR in edu.yjyx.student (edu.yjyx.student/.module.main.ui.MainActivity)
logcat中显示为:
ANR in edu.yjyx.student (edu.yjyx.student/.module.main.ui.MainActivity)

重定向:命令 > 电脑目录\名称.格式
执行monkey命令,并把monkey日志输出到D盘log文件夹的monkey.txt中
adb shell monkey -p com.vmall.client -v --throttle 3000 200 > D:\log\monkey.txt

执行monkey命令的时候,打开新的cmd窗口,把系统日志输出到D盘的log文件夹的logcat.txt中
adb logcat -v time > D:\log\logcat.txt

注:
monkey日志中出现CRASH/ANR只会显示一次,
logcat日志中会按照时间顺序记录(只要发生就会显示)

7、日常工作的处理流程

1.第一天晚上:执行命令,打开CMD窗口,输入命令回车
2.第二天再检查monkey的测试结果:monkey日志和logcat日志
3.定位过程
先查看monkey的日志,是否成功(最末尾显示为 //Monkey finished)。如果成功,则忽略以下步骤。
如果不是//Monkey finished,在monkey日志中搜索crash 和anr/异常停止
在logcat中定位和确认时间点
(1) Crash: (奔溃,闪退,停止运行)
monkey中显示为:(在monkey日志中搜索CRASH)
// CRASH: com.songqin.sqcs (pid 16828)
logcat 中显示为: (在logcat日志中搜索FATAL或者EXCEPTION)
06-17 23:53:54.162 E/AndroidRuntime( 3375): FATAL EXCEPTION: main
06-17 23:53:54.162 E/AndroidRuntime( 3375): Process: edu.yjyx.student, PID: 3375

(2)ANR:(application no/not responding 无响应)
monkey中显示为:
// NOT RESPONDING: edu.yjyx.student (pid 20014)
ANR in edu.yjyx.student (edu.yjyx.student/.module.main.ui.MainActivity)
logcat中显示为:
ANR in edu.yjyx.student (edu.yjyx.student/.module.main.ui.MainActivity)

(3)如果发生关机,重启其他异常,情况确认
在logcat日志里面去找,重启:reboot,关机:shutdown
重启判定:adb logcat断掉了(adb logcta默认是不会自己断开的,除非异常情况。当monkey测试完成,logcat日记断掉,这也是bug)
关机判定:按下电源键,屏幕不亮
关机:shutdown,进一步定位:搜索温度,电量的关键字

8、monkey记录表

9、Monkey bug的提交

标题:[monkey]xxx应用在执行monkey测试时发生CRSH/ANR/…
[复现步骤]
1.准备工作
2.执行命令
3.观察结果
预期结果:执行monkey测试没有任何异常
实际结果:xxx应用在执行monkey测试时发生CRSH/ANR/…
附件信息:提供monkey日志和logcat日志
如果是anr的bug,还要提交:anr下面的traces.txt
traces.txt文件路径:/data/anr (root权限)

10、准备工作:

电脑端:adb 环境
手机端:
1.开发者模式,USB模式
2.手机自己设置:
(1)数据网络和wifi网络都要保持连接状态
(2)关闭锁屏,保持常亮
(3)电量保持在95%以上
(4)经验:连接耳机(调节音量)
3.app设置:
(1)数据 :有关联的应用数据
(2)登录问题:默认是要先登录,再执行monkey测试

关于退出账号的解决方法:
①.自动化方式:定时检测账号登录情况.如果退出就进登录
②.设置seed:关注观察半个小时,有退出就重新设置seed值
③.把登录功能先撤掉

你可能感兴趣的:(手机测试,android)