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

测试大头兵 · 2017年08月08日 · 最后由 没饲养员的猫 回复于 2018年08月09日 · 1255 次阅读

最近在研究性能测试方面的东东,刚好在 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 是可行的,文件也存在

小弥勒 回复

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

MJW 回复

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

!!

nick 回复

互相学习~

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

14楼 已删除

monkeyTest.py 代码里有注释

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

lb 回复

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

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

lb 回复

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

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

lb 回复

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

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

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

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

thanksdanny 回复

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

感谢!!

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

divil 回复

pip install xlsxwriter

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

divil 回复

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

32楼 已删除

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

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

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

大海 回复

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

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

大海 回复

那就是你设置的次数没跑完,报告肯定就没生成了,你可以把 # 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

望回复,谢谢~

小王子 回复

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

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

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