python性能测试台_性能测试平台效率优化的一次经验(python版)
在做性能测试平台的优化过程中,由于启动任务相对其他测试任务比较频繁,而目前30次两个包的交叉对比(30次)测试需要耗时30分钟整,因此打算优先对测试流程做一次优化,将测试时间消耗降低到20分钟。
由于一开始估计乐观,认为启动时间,一台设备理论上启动顶多1s,1*2*30也就60s,加上其他开销,5分钟都够了,能减少到20分钟应该小半天就能做完了。
于是就来到了第一步:
1.review代码流程
(1)把启动流程里相关的sleep全部review一遍
确实有一点效果,因为有一部分sleep在启动任务执行阶段,60倍杠杆放大后很可怕,因此去掉部分sleep,居然就减少到了23分钟了。
第二步一时想不出了,方法耦合嵌套相当多,而且适配多个版本的产品,迁一发动全身,第二步想到的就是将可疑方法监控起来
2.将可疑方法的耗时监控起来
为了方便监控,增加了两个个装饰器来统计耗时
defcosts(fn):def _wrapper(*args, **kwargs):
start=time.time()
fn(*args, **kwargs)print "%s 函数cost %s 秒" % (fn.__name__, time.time() -start)return_wrapperdefcosts_with_info(info):def_wrapper(fn):print "info:" +inforeturncosts(fn)return _wrapper
当方法需要监控时,则加入@costs或者@costs_with_info("some infomation")
@costsdefconfigureQuickStart(self, pkg_name):if self.config.allow_quick_start == "1":
self.logger.info("Disable quick start: %s" %pkg_name)
self.disableQuickStartSnapShot(pkg_name)else:
self.logger.info("Quick start is enabled: %s" % pkg_name)
推荐大家不要用这样的方法,真心耗时耗力,而且效果差。花了半天优化了一分钟。
于是想到了Android里的traceview,traceview有方法能拿到整个调用栈的性能消耗,包括耗时,python应该也有这样的方法才对,然后我找到了cProfile,于是便愉快地进入了第三步
3.使用cProfile进行分析
(1)直接将入口加入监控,输出result.prof文件,并在log区打印出tottime(不包含子方法的耗时统计)
importcProfileimportpstats
cProfile.run('main()', filename='result.prof', sort="tottime")
p= pstats.Stats('result.prof')
p.sort_stats('time').print_stats()
log区打印出的日志如下
一部分是系统方法,一部分是自己的方法,不是很直观,于是又找到了另一个神器graphviz。
首先需要安装:
sudo apt-get install graphviz
然后下载Gprof2Dot,接着运行
python gprof2dot.py -f pstats result.out | dot -Tpng -o result.png
终于我得到了一张启动测试的方法耗时统计图
局部展示如下:
这样就可以很清晰看到各个函数具体消耗的时间了,但令我震惊的是,启动测试中,30分钟里居然有95.29%的时间是在sleep!但是没关系,因为我知道是哪个方法开始引入的sleep,并且可以知道哪些是可以优化的。
python性能测试台_性能测试平台效率优化的一次经验(python版)相关推荐
- 设置按峰值带宽计费_云平台界面优化升级!VPC网络包年包月计费调整!
云服务器划分更多规格 目前云平台提供三大云服务器规格供用户选购,独立计费,用户可按「个人」「企业」使用需求选购.云服务规格说明:·通用型:提供均衡的CPU计算能力,CPU使用率最灵活且性价比较高,适用 ...
- python orm库_周边生态贡献者+1,一个TDengine的Python ORM库—crown
本文介绍了一个用于操作TDengine的 Python ORM库.本文的预期读者是,需要使用Python语言操作TDengine数据库的开发人员. 什么是ORM? ORM就是对象关系映射(Object ...
- python装逼_能够让你装逼的10个Python小技巧
列表推导式 你有一个list: bag = [1, 2, 3, 4, 5] 现在你想让所有元素翻倍,让它看起来是这个样子: [2, 4, 6, 8, 10] 大多初学者,根据之前语言的经验会大概这样来 ...
- excel运行python自定义函数_终于,可以在Excel中直接使用Python!
大家好,我是早起. 经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评.这次也不例外,我要再推荐一个,而且是个爆款神器. Excel和Jupyter Notebok都是我每天必用的工具,而且两 ...
- python珠穆朗玛峰问题_学会这6招,让你的Python 嗖嗖嗖的快!
在后面的程序效率对比上,我们以下面的python程序作为基础对比程序. 01.优化编写的代码 对于 Python程序,大家可以首先将程序的目的实现,然后在这个基础之上,分析程序执行效率低下的部分并实现 ...
- python 字符串操作速度_强者一出,谁与争锋?与Python相比,C+的运行速度究竟有多快?|python|编程语言|字符串|示例|算法...
对于数据科学家而言,热爱Python的理由数不胜数.但你是否也曾问过这样的问题:Python和C或C++等更专业的低级编程语言究竟有何不同呢?我想这是很多数据科学家或者Python用户曾经问过或者将来 ...
- python @修饰符_数据结构与算法之8——抽象数据类型与python类
就算你是特别聪明,也要学习,从头学起!--(俄国)屠格涅夫 本篇文章要说的主要是数据结构与算法和python中关于类(Class)以及异常(Error)的一些基础,虽然很简单,但是必须非常重视.只有在 ...
- python版本切换_如何在cmd下切换不同版本的Python
(1)分别安装 python-2.7.12.amd64.msi python-3.5.2-amd64.exe (python官网下载的) 顺序无所谓(为了看着方便,我把安装路径修改统一了) (2)配置 ...
- python原理视频教程_让你见识一下什么叫真正的Python学习路线+系统的视频教程...
虽说年年都在喊互联网寒冬,最难就业季,但是今年确实有点不一样,年前年后一波又一波互联网公司宣布"人员调整,结构优化", 这是往年没发生过的. 是不是面试机会就少了很多呢?不是的. ...
最新文章
- Python之流程控制
- Python基础05 缩进和选择
- 6.项目资源管理总结
- 【NLP】GPT-3问世这一年,给世界带来的困扰与希望
- 2017-11-26 编程语言试验之Antlr4+Java实现圈2
- intellij中出現org.apache.hadoop.fs.FSDataInputStream解決方案
- Redis启动的三种方式
- 线程启动语句的顺序是否决定线程的执行次序。_详细分析 Java 中启动线程的正确和错误方式
- python 计算每日累计_5分钟学会用Python可视化数据分析美股
- JVM第三节:垃圾回收算法与垃圾回收器
- 算法导论 中+英 PDF分享 附书单
- oracle数据库例题答案下载,Oracle数据库试题及答案[教学知识]
- word实现多级自动编号
- 数学建模——使用matlab神经网络工具箱训练和预测
- 手机六大操作系统优缺点比较
- 搞不定Excel没关系,这款神器让你秒变数据可视化高手
- DL之CNN(paper):关于CNN(卷积神经网络)经典论文原文(1950~2018)简介、下载地址大全(非常有价值)之持续更新(吐血整理)
- JavaScript/jQuery WebIM 及时聊天通信工具 本地客户端
- word插件grammerly,边写论文边修改语法
- Linux RCU锁简析
热门文章
- MySQL中的索引使用
- lt;SCRIPT src=quot;../scripts/LoadWebOffice.jsquot;gt;lt;/SCRIPTgt;
- php 判断是否为安卓,通过http user-agent判断是否为手机浏览器
- 廊坊职业技术学院计算机专业宿舍,2020廊坊职业技术学院宿舍条件如何-有空调否?(宿舍图片)...
- java实心菱形_java打印出实心菱形与空心菱形
- gifrecord可以卸载吗_频繁的安装和卸载app会不会伤害苹果手机?
- restTemplate请求,报 : No instances avaliable for ip地址
- supermap试用许可过期如何重新申请
- webpack打包VUE项目读取外部配置文件,灵活配置域名
- Android开发笔记(十四)圆弧进度动画CircleAnimation