性能测试工具 monkeyTest 工具使用排坑记

老马 · 2018年02月05日 · 最后由 老马 回复于 2018年02月05日 · 3843 次阅读

一 部署准备

项目地址

https://github.com/Louis-me/monkeyTest
https://testerhome.com/topics/9329

部署 monkeyTest

快捷打开 cmd, 视窗键 +r 打开运行窗口后,输入 cmd 回车
D: 回车进入 D:盘 准备直接 git clone 到 D:\workspace\git\目录下

D:\workspace\git\>git clone https://github.com/Louis-me/monkeyTest.git

部署环境介绍

操作系统
快捷查看 win 系统版本, 视窗键 +r 打开运行窗口后, 输入 winver 回车
我的是 win10 版本 1709

Android Sdk
下载地址 http://tools.android-studio.org/index.php/sdk 处下载 android-sdk_r24.4.1-windows.zip
将 android-sdk-windows 解压到你需要的目录下,笔者是 D:\Android\android-sdk-windows

配置 android-sdk 环境变量:
ANDROID_HOME 变量值为 android-sdk 的解压目录,笔者为 D:\Android\android-sdk-windows
PATH PATH 变量值的最后追加 ;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools;

接下来你便可以用 D:\Android\android-sdk-windows 下的 SDK Manager.exe 下载配置 SDK 或 AVD Manager.exe 配置 AVD 模拟器了。
如果你需要测试 android 应用的话,请先安装配置好某一版本的 SDK 及其相关工具。
如下图,SDK manager 必要配置:
Tools->Options 设置

其它要下载的:
此处为了与 Macaca 环境兼容,目前稳定没敢乱升级,大家也可用此.

此处的按需选择与 AVD 模拟器配套使用的

关于 Android 开发环境的大家可以参考此人的博客

Android SDK Manager 和 AVD Manager 使用

Android 开发环境配置

该步骤,主要是为了部署 adb 工具而已,当然也有独立部署 adb 的方案.这个你按需选择吧,不过你既然要搞 android 相关了,android sdk 工具的部署最终还是逃不过的.

二排坑与修复

确认被测 app packagename
这个请参考帖子Android 获取包名和 Activity 的几种方法

修改 monkey.ini 为:

[DEFAULT]
cmd=monkey -p com.your.packagename --throttle 600 --ignore-timeouts --ignore-crashes   --monitor-native-crashes -v -v -v 600 >
package_name=com.your.packagename
activity = com.your.packagename.yourActivity
net = wifi

这个按需改,不懂的话请去百度学习 monkey 原生命令行参数使用.

排坑记
https://github.com/Louis-me/monkeyTest/issues/8
这里弄完就提了 issue

现在你只需要跟着我做以下几步:
找到你的 git clone 的源码目录 monkeyTest
1 创建 info 目录
2 创建 log 目录
3 如遇到该行错误

subprocess.CalledProcessError: Command 'adb -s 12345678 offline shell wm size' returned non-zero exit status 1.

手动 cmd 终端执行下 adb shell wm size 如遇正常捕获到分辨率信息,再次执行 即可成功.原理未调试还.

三 执行

确认真机连接成功
真机小米 Mix2
需要开启真机开发者选项->USB 调试模式和其他相关,主要是调试这一栏要打开的有

为正常捕获 fps 性能数据,还需要开启开发者选项->Gpu 呈现模式分析->在 adb shell dmupsys gfxinfo 中

用 adb 查看连接

D:\>adb devices -l
List of devices attached
12345678               device product:chiron model:MIX_2 device:chiron

cmd 终端方式
直接切到目录 monkeyTest 下执行 (我 win10,配置了 python2 和 python3 双环境,所以下边用的是 python3 命令)

python3 monkeyTest.py

pycharm Run 方式
需要准备 python3.6 环境 和 pycharm 开发工具.(略,自行准备)
pycharm 打开自动 import 相关组件包后,右键 monkeyTest.py 选择 Run->monkeyTest.py 不出意外即可直接执行.

四 停止

cmd 终端方式 ,想中途停止,可以按键 Ctrl+c

pycharm Run 方式,想中途停止,可以按快捷键 Ctrl+F2(pycharm 默认快捷键设置)

但这样只是停止了,发命令这一端,实际你会发现,monkey 事件还继续在您的真机中跑啊跑,即使将 USB 数据线和 PC 断开,monkey 事件还是会继续运行下去.那怎么真正停止呢?

利用 adb shell 命令去 kill 掉手机中的 monkey 进程

1 先找到真机中的 monkey 进程 pid

D:\workspace\git\monkeyTest>adb shell ps| find "monkey"
USER      PID   PPID  VSIZE  RSS   WCHAN              PC  NAME
shell     13846 1032  2073652 51480 futex_wait 7f900d7ef0 S com.android.commands.monkey

D:\workspace\git\monkeyTest>adb shell ps| findstr monkey
USER      PID   PPID  VSIZE  RSS   WCHAN              PC  NAME
shell     13846 1032  2073652 51480 futex_wait 7f900d7ef0 S com.android.commands.monkey

以上两种 win 环境均可.

2 杀死该 monkey 进程
adb shell kill 进程号
进程号即为上述 第 2 列 中的 13846

五 结果查看与分析

跑完后,我们来看下相关结果目录得到的结果:
log 目录

info 目录

report.xlsx
有三个子工作表
Analysis

总体 cpu mem 网络记录

crash

本次未记录到 crash

**detail

流量记录

稍后更新,未完待续

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 3 条回复 时间 点赞

@lose
还是作者的老风格, 总把一些跑自家的东西写死,也不处理为相对获取....
这哪里是开源.....


BaseMonitor.py
if __name__ == '__main__':

    # cpu_rate("2749")
    pid = get_pid("com.jianshu.haruki", "DU2TAN15AJ049163")
    # print(pid)
    # get_flow(pid, "wifi", "DU2TAN15AJ049163")
    # get_battery("DU2TAN15AJ049163")
    # get_men("com.jianshu.haruki", "DU2TAN15AJ049163")
    # print(get_cpu_kel())
    # cpu_kel = get_cpu_kel("DU2TAN15AJ049163")
    # print(cpu_rate(pid,cpu_kel,"DU2TAN15AJ049163"))
    get_flow(pid, "gprs", "emulator-5554")
    # print(get_flow("com.jianshu.haruki", "gprs"))
    # print(get_flow("com.jianshu.haruki", "gprs"))
    # print(get_flow("com.jianshu.haruki", "gprs"))




BasePickle.py
if __name__ == "__main__":
    # readInfo(PATH("../info/DU2TAN15AJ049163_battery.pickle"))
    # readInfo(PATH("../info/emulator-5554_fps.pickle"))
    # readInfo(PATH("../info/emulator-5554_battery.pickle"))
    # readInfo(PATH("../info/emulator-5554_men.pickle"))
    # readInfo(PATH("../info/DU2TAN15AJ049163_men.pickle"))
    # readInfo(PATH("../info/emulator-5554_flow.pickle"))
    readInfo("E:\\app\\py\\monkey1\\info\\info.pickle")
    # readInfo(PATH("../info/DU2TAN15AJ049163_cpu.pickle"))


BaseReport.py
if __name__ == '__main__':

    workbook = xlsxwriter.Workbook('report.xlsx')
    info = [{'emulator-5554': {'cpu': 'E:\\app\\py\\monkey1\\info\\emulator-5554_cpu.pickle', 'battery': 'E:\\app\\py\\monkey1\\info\\emulator-5554_battery.pickle', 'men': 'E:\\app\\py\\monkey1\\info\\emulator-5554_men.pickle', 'flow': 'E:\\app\\py\\monkey1\\info\\emulator-5554_flow.pickle', 'header': {'rom': 770300, 'kel': '2核', 'monkey_log': 'E:\\app\\py\\monkey1\\log\\55dd9a83-3337-46d5-bb1f-6f64b85be7cbmonkey.log', 'beforeBattery': 99, 'pix': '1440x810', 'time': '10秒', 'afterBattery': 99, 'phone_name': 'GT-I9500_samsung_4.4', 'net': 'gprs'}, 'fps': 'E:\\app\\py\\monkey1\\info\\emulator-5554_fps.pickle'}}, {'DU2TAN15AJ049163': {'cpu': 'E:\\app\\py\\monkey1\\info\\DU2TAN15AJ049163_cpu.pickle', 'battery': 'E:\\app\\py\\monkey1\\info\\DU2TAN15AJ049163_battery.pickle', 'men': 'E:\\app\\py\\monkey1\\info\\DU2TAN15AJ049163_men.pickle', 'flow': 'E:\\app\\py\\monkey1\\info\\DU2TAN15AJ049163_flow.pickle', 'header': {'rom': 3085452, 'kel': '8核', 'monkey_log': 'E:\\app\\py\\monkey1\\log\\732ac6cd-dd84-4818-80ea-d9b5339c6774monkey.log', 'beforeBattery': 94, 'pix': '1080x1920', 'time': '15秒', 'afterBattery': 94, 'phone_name': 'H60-L02_Huawei_4.4', 'net': 'gprs'}, 'fps': 'E:\\app\\py\\monkey1\\info\\DU2TAN15AJ049163_fps.pickle'}}]


    tem = OperateReport(workbook)
    tem.monitor(info)
    tem.analysis(info)
    tem.crash()
    tem.close()
    # print(len(data["cpu"]))

  • 我刚刚看了下,这里本来就是我的的本地调试代码,并不影响 monkeytest.py 入口的运行
  • 用我的代码,还怼我,心都凉了~

😁 哈哈。怼怼受关注,怼怼修复快。

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