移动性能测试 使用 Monkey+python 做一个简单的自动化测试

陈皮皮_❤ · 2019年09月30日 · 最后由 陈皮皮_❤ 回复于 2019年10月08日 · 4832 次阅读

monkey 是个啥子嘛?

monkey 是一款通过命令行来对我们 APP 进行测试的工具,可以运行在模拟器里或真机上。它向系统发送伪随机的用户事件流,实现对正应用程序进行压力测试。(其实可以想象成一只猴子啥都不知道,疯狂乱敲......)
👆 伪随机又是个什么鬼?
是因为该随机事件可进行复现(定位可能出现的问题)。我们每次执行一组随机事件,系统都会给一个随机的ID,称之为seed。若我们想将该组随机事件再次执行一遍,则使用-s+seed+count即可。

那么 monkey 的使用场景是哪些呢?(你喜欢用在哪里就在哪里)

                              
monkey 测试是 Android 平台自动化测试的一种手段,通过 monkey 程序模拟用户触摸屏幕、滑动 Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久会发生异常。(当然也可以做自动化测试)开发人员结合 monkey 打印的日志 和系统打印的日志,修改测试中出现的问题 。
👆 那什么时候进行压力测试呢?
等产品稳定,没有太多的 bug 的时候,一般会用 monkey 去测试待测应用的稳定性,健壮性(是否会发生闪退,崩溃,无响应)和整机测试

好了我要开始嚯稀泥了(有没有搞错啊大佬,那是搭环境)

1、确保电脑已安装 adb
直接下载 adb 安装包,把相关文件放到 c:/windows/system32 目录和 c:/windows/system 目录下,完成安装

2、jdk 环境已配好(没配好自己配吧,自己配不好请移驾https://www.baidu.com/s?ie=utf-8&wd=jdk%E7%8E%AF%E5%A2%83%E6%90%AD%E9%85%8D

🙌 此时此刻我要小声 bb 一下为什么要配置 jdk 了,
1) Monkey 程序由 Android 系统自带,使用 Java 语言写成,在 Android 文件系统中的存放路径是:/system/framework/monkey.jar;
2) Monkey.jar 程序是由一个名为 “monkey” 的 Shell 脚本来启动执行,shell 脚本在 Android 文件系统中的存放路径是:/system/bin/monkey;
这样就可以通过在 CMD 窗口中执行:adb shell monkey {+ 命令参数}来进行 Monkey测试了。
3、(安装模拟器/真机)手机已经打开开发者模式以及 USB 调试状态
4、 把手机锁屏设置为从不

某位仁兄😡个憨憨,重要的命令参数有啥。

怂怂的我😟

1)参数: -p
参数-p 用于约束限制,用此参数指定一个或多个包(Package,即 App)。指定包之后,monkey 将只允许系统启动指定的 APP。如果不指定包,monkey 将允许系统启动设备中的所有 APP。
指定一个包:
adb shell monkey -p com.kaiyuan.developmentbusiness 100

说明:com.kaiyuan.developmentbusiness 为包名,100 是事件计数(即让 monkey 程序模拟 100 次随机用户事件)。
指定多个包:
adb shell monkey -p com.qywlandroid –p com.kaiyuan.developmentbusiness 100
不指定包:
adb shell monkey 100
说明:monkey 随机启动 APP 并发送 100 个随机事件。
2) 参数: -v 日志详细程度
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分 3 个级别,分别对应的参数如下表所示:
日志级别 Level0
adb shellmonkey -p com.kaiyuan.developmentbusiness –v 100

说明缺省值,仅提供启动提示,测试完成和最终结果等少量信息
日志级别 Level 1
adb shellmonkey -p com.kaiyuan.developmentbusiness –v -v 100 说明提供较为详细的日志,包括每个发送到 Activity 的事件信息
日志级别 Level 2
adb shellmonkey -p com.kaiyuan.developmentbusiness –v -v –v 100 说明最详细的日志,包括了测试中选中/未选中的 Activity 信息
3) 参数:-s
用于指定伪随机数生成器的 seed 值,如果 seed 相同,则两次 monkey 测试所产生的事件序列也相同的。
monkey 测试 1:adb shell monkey -p com.kaiyuan.developmentbusiness –s 10 100
monkey 测试 2:adb shell monkey -p com.kaiyuan.developmentbusiness –s 10 100
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的 Seed 值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;
4) 参数:--throttle <毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;
adb shell monkey -p com.qywlandroid –throttle 3000 100
5) 参数: --ignore-crashes
用于指定当应用程序崩溃时(Force& Close 错误),monkey 是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey 依然会发送事件,直到事件计数完成。
adb shellmonkey -p com.qywlandroid --ignore-crashes 1000
测试过程中即使 Weather 程序崩溃,Monkey 依然会继续发送事件直到事件数目达到 1000 为止;
adb shellmonkey -p com.qywlandroid 1000
测试过程中,如果 Weather 程序崩溃,Monkey 将会停止运行。

好了好了,墨刀嚯嚯,开始搬砖

                            
我这里用的 pycharmIDE,写完之后直接建个 .bat 放里面就好了,比如说

ojbk,请看我的目录

里面的 bugreport_book 文件是最后生成的,他从哪里来的呢?

这个时候就该讲一哈我们伟大的插件ChkBugReport
ChkBugRepor t 是一个开源工具,它可以把你得到的 bugreprot.t 解析成适合阅读的 html 文件。导出的 html 文件包含了根据 bugreport.txt 数据得出的图表和分析结论。

  • 如果这个线程死锁,在报告的 Errors 将会出现。
  • ***.logs 这部分是对 system、main 和 kernel 日志的分析,在这里你可以看到每个进程内存使用图、那个程序产生的 log 最多、Activity 的启动耗时、数据库操作耗时统计、对象被锁定- - 时间、AIDL 调用时间、Activity 和 Service 的生命周期及其在内存中使用频率等等
  • Processes 操作 app 过程中产生的系统事件日志、内存使用信息等等
  • Battery statistics 电池使用统计
  • CPU Frequency statistics CPU 频率统计
  • Raw data 一些原始数据

废话不多说我们上水泥(早干嘛去着,墨迹这么半天😤https://github.com/Chan-pipi/Chan-pipi

首先添加.config 文件,添加内容为

然后创建 runmonkey.py 文件,主要函数为

  1. 引用.config,不然你写它干啥用
  2. 安装安装包,(也就是把包放在 apk 文件下,然后就可以自己安装啦啦啦啦啦啦)
  3. 执行 monkey 命令
  4. 创建 bugreport.txt 报告,并生成 html 文件
  5. 你可以砍死它了,开心嘛

至于为啥要这么写,我就不告诉你,哈哈哈哈哈哈或,掰掰

;            

共收到 6 条回复 时间 点赞

哈哈,文风好逗,一口气看完。
ps:GitHub 的地址不存在哦

寒月守护 回复

阿西吧,我去瞄瞄

读文件为啥要用 while True..还要在包一层 try...finally.

文风犀利,怒赞一个

陈皮皮,你好优秀呀

陈子昂 回复

因为他会死在里面,,,

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册