性能测试工具 性能测试工具 python+monkey+ 监控 crash,性能统计

lemon · 2017年08月08日 · 最后由 回复于 2018年08月09日 · 2930 次阅读

最近在研究性能测试方面的东东,刚好在testhome上看到 @lose (测试小书童) 发布的一个monkey crash监控及性能数据统计的工具(https://testerhome.com/topics/9329)。
于是就下载他的源码进行了windows环境的改造,并添加了一部分目前自己项目上需要的测试内容,感谢@lose (测试小书童)提供的源码🙏

V2.1 2017/08/08

1.新增手动测试过程中性能数据统计
2.monkeyTest.py:line72~line131 为手动测试部分
3.monkeyTest.py:line134~line191为Monkey测试部分
4.注意两种测试开始部分注释,按照注释内容进行相关代码操作

源码地址:https://github.com/Lemonzhulixin/monkeyTest.git

报告截图



V2.0 2017/08/07

1.优化了统计性能数据的代码,主要是cpu rate的计算方式
2.解决多设备数据统计错误问题,使用持久化记录数据信息
3.最终报告格式修改

V1.5

1.增加Config配置文件
2.增加设备实时监控,支持随时断开设备、插入新设备,每10s检查一次设备并自动运行
3.增加monkey_stop.py,支持随时停止monkey运行并重启(重启操作可根据需要选择是否执行)
4.设置性能数据统计间隔2s(可自定义)
5.优化并删除部分无用文件及代码

monkey 配置文件Config.py

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

monkey 压力测试及性能统计

  • python3
  • 统计性能信息cpu,men,fps,battery,flow
  • 支持wifi,gprs统计
  • 统计crash信息

fps统计:
需要打开开发者里面的GPU呈现模式分析-在adb shell dumpsys gfxinfo中

共收到 36 条回复 时间 点赞

最后打开GPU呈现模式的命令拼写有误吧, 应该是gfxinfo

2楼 已删除

谢谢,是的,确实是打错了,已修改~~

Exception: Sheetname '****', with case ignored, is already in use.
老报这个错误,删除了excel 也这样

Ron 回复

这个错误提示是因为你执行一次后,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是可行的,文件也存在

lemon #10 · 2017年09月21日 作者
小弥勒 回复

fps统计需要打开开发者里面的GPU呈现模式分析-在adb shell dumpsys gfxinfo中

lemon #11 · 2017年09月21日 作者
MJW 回复

你可以单独调试 def get_men_total(dev)这个方法看下,或者换台设备看看

!!

lemon #13 · 2017年10月24日 作者
nick 回复

互相学习~

数据是从开始就采集的,跑完了或者中途中断了再去读取采集到的数据分析~

14楼 已删除
lemon #15 · 2017年10月24日 作者

monkeyTest.py 代码里有注释

楼主,抓取logcat这块,脚本会一直卡在这里,你们的不会吗?
os.popen(cmd_logcat)

lemon #17 · 2017年10月30日 作者
lb 回复

打印下logcat命令,然后终端日志截图我看下

我这边有环境的那台电脑上不了外网;暂时无法截图
我在CMD命令窗口输入adb logcat命令也是需要手动结束的,我不清楚代码是怎么结束这条命令的,

lemon #19 · 2017年10月30日 作者
lb 回复

最后结束的时候用kill adb 服务停止的,代码里有注释

lemon 回复

现在卡在抓取logcat日志的命令处,不会继续往下走;下面的脚本都不会继续执行了;
https://testerhome.com/topics/9329,hy_123963这里面也有 也遇到这个问题了;
那这个logcat是抓取多久?感觉我这个搞不定

lemon #21 · 2017年10月30日 作者
lb 回复

monkey能跑起来吗?打个断点看下有没有执行到logcat

lemon 回复

后面还有些问题,我暂时把抓logcat日志这块注释掉了,现在能跑起来,还有些问题;
我用的是python 2.7,之前很多脚本都是用2.7写的,暂时不想更新到3.x,不知道这个有没有影响

楼主,get_fps这块,我这边测试的一直都是60FPS,手机已配置保存到gfxinfo了
这段代码没看懂,感觉没有过滤出时间那块数据

想请教下得到性能数据之后,是怎么画出那些曲线图的图表的啊

lemon #26 · 2018年03月14日 作者
thanksdanny 回复

xlsxwriter 参照file: monkey-performace/Base/BaseReport.py

lemon 回复

感谢!!

l楼主你好,请问这个问题怎么解决呢
ModuleNotFoundError: No module named 'xlsxwriter'

lemon #29 · 2018年03月19日 作者
divil 回复

pip install xlsxwriter

楼主你好您的代码一直在执行if monkeylog.read().count('Monkey finished') > 0:之前的代码 一直在循环数据采集,什么时候这个判断才能成立往下走呢

lemon #31 · 2018年03月20日 作者
divil 回复

直到你monkey命令中设置的次数跑完或者你终止了测试

32楼 已删除
lemon 回复

感谢楼主的分享,配置完代码就能跑了。
运行monkey test.py获取数据

但是再运行BaseReqport.py,无法生成相应的excel数据

请问楼主,performance_report.xlsx该如何才能生成成功?

lemon #34 · 2018年05月03日 作者
大海 回复

monkeyTest.py执行完会自动在根目录生成report,不需要单独执行BaseReqport.py,你找下你performance目录下,应该有report文件生成。

lemon 回复

monkeyTest.py一直在跑,没有停止,也没有看到任何report文件出来

lemon #36 · 2018年05月03日 作者
大海 回复

那就是你设置的次数没跑完,报告肯定就没生成了,你可以把# monkey 参数里的次数设置的小一点实验下,就会看到了。

楼主你好。
我是在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

望回复,谢谢~

lemon #38 · 2018年05月26日 作者
小王子 回复

使用 adb shell cat /system/build.prop 打印出来看下设备信息,模拟器模拟的可能有些信息是没有的,如果没有,注掉相关代码就可以了

楼主你好。为什么FPS是60的??GPU呈现模式分析也打开了,蟹蟹楼主解答一下

lemon 关闭了讨论 08月16日 16:10
simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44
simple [精彩盘点] TesterHome 社区 2018年 度精华帖 中提及了此贴 01月07日 12:08
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册