最近在研究性能测试方面的东东,刚好在 testhome 上看到 @lose (测试小书童) 发布的一个 monkey crash 监控及性能数据统计的工具(https://testerhome.com/topics/9329)。
于是就下载他的源码进行了 windows 环境的改造,并添加了一部分目前自己项目上需要的测试内容,感谢@lose (测试小书童) 提供的源码
1.新增手动测试过程中性能数据统计
2.monkeyTest.py:line72~line131 为手动测试部分
3.monkeyTest.py:line134~line191 为 Monkey 测试部分
4.注意两种测试开始部分注释,按照注释内容进行相关代码操作
源码地址:https://github.com/Lemonzhulixin/monkeyTest.git
1.优化了统计性能数据的代码,主要是 cpu rate 的计算方式
2.解决多设备数据统计错误问题,使用持久化记录数据信息
3.最终报告格式修改
1.增加 Config 配置文件
2.增加设备实时监控,支持随时断开设备、插入新设备,每 10s 检查一次设备并自动运行
3.增加 monkey_stop.py,支持随时停止 monkey 运行并重启(重启操作可根据需要选择是否执行)
4.设置性能数据统计间隔 2s(可自定义)
5.优化并删除部分无用文件及代码
class Config:
#apk 包名
package_name = "com.quvideo.slideplus"
# 默认设备列表
device_dict = {}
# 网络
net = "wifi"
#monkey seed 值,随机产生
monkey_seed = str(random.randrange(1, 1000))
#monkey 参数
monkey_parameters = "--throttle 200 --ignore-crashes --ignore-timeouts --pct-touch 80 --pct-trackball 5 --pct-appswitch 5 --pct-syskeys 5 --pct-motion 5 -v -v 5000"
#log 保存地址
log_location = "D:\PyCharm\Monkey_performance\log\"
# 性能数据存储目录
info_path = "D:\PyCharm\Monkey_performance\info\"
启动 monkey 测试:执行 monkeyTest.py
停止运行 monkey:执行 monkey_stop.py
如果需要重启设备:在执行 monkey_stop.py 前,删除 #reboot(dev,dev_model) 前的注释即可
V1.0(@lose (测试小书童) 作者源码)
# 作者原文章地址: https://testerhome.com/topics/9329)
fps 统计:
需要打开开发者里面的 GPU 呈现模式分析 - 在 adb shell dumpsys gfxinfo 中
最后打开 GPU 呈现模式的命令拼写有误吧, 应该是 gfxinfo
谢谢,是的,确实是打错了,已修改~~
Exception: Sheetname '****', with case ignored, is already in use.
老报这个错误,删除了 excel 也这样
这个错误提示是因为你执行一次后,info 文件夹下的 pickle 文件没有删除,再次执行时你当前设备已经被写入一次了,所以再次写入的时候重复了,两种解决方法:1.再次执行的时候手动删除 info 下所有 pickle 文件 2. 把我代码里 start 最后一行的注释去掉。shutil.rmtree((PATH("./info/"))) # 删除持久化目录 info
谢谢分享,最终的版本应该是要脱离 pc 去测试,类似于这样:https://testerhome.com/topics/3685,或者自己写个代理的方式去不停上报(现在在尝试用这样的方式)
内存位置命令我改成了:adb shell dumpsys meminfo package_name | grep 'TOTAL' | awk '{print $2}' , 这样就不需要正则表达式了,tps 不知道为什么总是 60 , 看来还需要仔细研究一下
请教一下,运行后报错
FileNotFoundError: [Errno 2] No such file or directory: 'adb -s DU2TDM15AG048271 shell cat /proc/meminfo'
但实际运行命令 adb -s DU2TDM15AG048271 shell cat /proc/meminfo 是可行的,文件也存在
!!
monkeyTest.py 代码里有注释
楼主,抓取 logcat 这块,脚本会一直卡在这里,你们的不会吗?
os.popen(cmd_logcat)
我这边有环境的那台电脑上不了外网;暂时无法截图
我在 CMD 命令窗口输入 adb logcat 命令也是需要手动结束的,我不清楚代码是怎么结束这条命令的,
现在卡在抓取 logcat 日志的命令处,不会继续往下走;下面的脚本都不会继续执行了;
https://testerhome.com/topics/9329,hy_123963这里面也有 也遇到这个问题了;
那这个 logcat 是抓取多久?感觉我这个搞不定
后面还有些问题,我暂时把抓 logcat 日志这块注释掉了,现在能跑起来,还有些问题;
我用的是 python 2.7,之前很多脚本都是用 2.7 写的,暂时不想更新到 3.x,不知道这个有没有影响
楼主,get_fps 这块,我这边测试的一直都是 60FPS,手机已配置保存到 gfxinfo 了
这段代码没看懂,感觉没有过滤出时间那块数据
想请教下得到性能数据之后,是怎么画出那些曲线图的图表的啊
xlsxwriter 参照 file: monkey-performace/Base/BaseReport.py
l 楼主你好,请问这个问题怎么解决呢
ModuleNotFoundError: No module named 'xlsxwriter'
楼主你好您的代码一直在执行 if monkeylog.read().count('Monkey finished') > 0:之前的代码 一直在循环数据采集,什么时候这个判断才能成立往下走呢
感谢楼主的分享,配置完代码就能跑了。
运行 monkey test.py 获取数据
但是再运行 BaseReqport.py,无法生成相应的 excel 数据
请问楼主,performance_report.xlsx 该如何才能生成成功?
monkeyTest.py 执行完会自动在根目录生成 report,不需要单独执行 BaseReqport.py,你找下你 performance 目录下,应该有 report 文件生成。
楼主你好。
我是在 PC 上用夜神来模拟客户端的,这套代码能适用吗
我设置好 config 文件后,一直出错。 调 试不成功。
File "E:/Python/APPTest/Monkey_performance/monkeyTest.py", line 25, in get_phone
phone_info = BasePhoneMsg.get_phone_Kernel(dev)
File "E:\Python\APPTest\Monkey_performance\Base\BasePhoneMsg.py", line 54, in get_phone_Kernel
phone_msg = getModel(dev)
File "E:\Python\APPTest\Monkey_performance\Base\BasePhoneMsg.py", line 13, in getModel
result["phone_name"] = re.findall("ro.product.model=(\S+)*", output, re.S)[0] # 手机名
IndexError: list index out of range
望回复,谢谢~
使用 adb shell cat /system/build.prop 打印出来看下设备信息,模拟器模拟的可能有些信息是没有的,如果没有,注掉相关代码就可以了
楼主你好。为什么 FPS 是 60 的??GPU 呈现模式分析也打开了,蟹蟹楼主解答一下