在做性能测试平台的优化过程中,由于启动任务相对其他测试任务比较频繁,而目前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版)相关推荐

  1. 设置按峰值带宽计费_云平台界面优化升级!VPC网络包年包月计费调整!

    云服务器划分更多规格 目前云平台提供三大云服务器规格供用户选购,独立计费,用户可按「个人」「企业」使用需求选购.云服务规格说明:·通用型:提供均衡的CPU计算能力,CPU使用率最灵活且性价比较高,适用 ...

  2. python orm库_周边生态贡献者+1,一个TDengine的Python ORM库—crown

    本文介绍了一个用于操作TDengine的 Python ORM库.本文的预期读者是,需要使用Python语言操作TDengine数据库的开发人员. 什么是ORM? ORM就是对象关系映射(Object ...

  3. python装逼_能够让你装逼的10个Python小技巧

    列表推导式 你有一个list: bag = [1, 2, 3, 4, 5] 现在你想让所有元素翻倍,让它看起来是这个样子: [2, 4, 6, 8, 10] 大多初学者,根据之前语言的经验会大概这样来 ...

  4. excel运行python自定义函数_终于,可以在Excel中直接使用Python!

    大家好,我是早起. 经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评.这次也不例外,我要再推荐一个,而且是个爆款神器. Excel和Jupyter Notebok都是我每天必用的工具,而且两 ...

  5. python珠穆朗玛峰问题_学会这6招,让你的Python 嗖嗖嗖的快!

    在后面的程序效率对比上,我们以下面的python程序作为基础对比程序. 01.优化编写的代码 对于 Python程序,大家可以首先将程序的目的实现,然后在这个基础之上,分析程序执行效率低下的部分并实现 ...

  6. python 字符串操作速度_强者一出,谁与争锋?与Python相比,C+的运行速度究竟有多快?|python|编程语言|字符串|示例|算法...

    对于数据科学家而言,热爱Python的理由数不胜数.但你是否也曾问过这样的问题:Python和C或C++等更专业的低级编程语言究竟有何不同呢?我想这是很多数据科学家或者Python用户曾经问过或者将来 ...

  7. python @修饰符_数据结构与算法之8——抽象数据类型与python类

    就算你是特别聪明,也要学习,从头学起!--(俄国)屠格涅夫 本篇文章要说的主要是数据结构与算法和python中关于类(Class)以及异常(Error)的一些基础,虽然很简单,但是必须非常重视.只有在 ...

  8. python版本切换_如何在cmd下切换不同版本的Python

    (1)分别安装 python-2.7.12.amd64.msi python-3.5.2-amd64.exe (python官网下载的) 顺序无所谓(为了看着方便,我把安装路径修改统一了) (2)配置 ...

  9. python原理视频教程_让你见识一下什么叫真正的Python学习路线+系统的视频教程...

    虽说年年都在喊互联网寒冬,最难就业季,但是今年确实有点不一样,年前年后一波又一波互联网公司宣布"人员调整,结构优化", 这是往年没发生过的. 是不是面试机会就少了很多呢?不是的. ...

最新文章

  1. Python之流程控制
  2. Python基础05 缩进和选择
  3. 6.项目资源管理总结
  4. 【NLP】GPT-3问世这一年,给世界带来的困扰与希望
  5. 2017-11-26 编程语言试验之Antlr4+Java实现圈2
  6. intellij中出現org.apache.hadoop.fs.FSDataInputStream解決方案
  7. Redis启动的三种方式
  8. 线程启动语句的顺序是否决定线程的执行次序。_详细分析 Java 中启动线程的正确和错误方式
  9. python 计算每日累计_5分钟学会用Python可视化数据分析美股
  10. JVM第三节:垃圾回收算法与垃圾回收器
  11. 算法导论 中+英 PDF分享 附书单
  12. oracle数据库例题答案下载,Oracle数据库试题及答案[教学知识]
  13. word实现多级自动编号
  14. 数学建模——使用matlab神经网络工具箱训练和预测
  15. 手机六大操作系统优缺点比较
  16. 搞不定Excel没关系,这款神器让你秒变数据可视化高手
  17. DL之CNN(paper):关于CNN(卷积神经网络)经典论文原文(1950~2018)简介、下载地址大全(非常有价值)之持续更新(吐血整理)
  18. JavaScript/jQuery WebIM 及时聊天通信工具 本地客户端
  19. word插件grammerly,边写论文边修改语法
  20. Linux RCU锁简析

热门文章

  1. MySQL中的索引使用
  2. lt;SCRIPT src=quot;../scripts/LoadWebOffice.jsquot;gt;lt;/SCRIPTgt;
  3. php 判断是否为安卓,通过http user-agent判断是否为手机浏览器
  4. 廊坊职业技术学院计算机专业宿舍,2020廊坊职业技术学院宿舍条件如何-有空调否?(宿舍图片)...
  5. java实心菱形_java打印出实心菱形与空心菱形
  6. gifrecord可以卸载吗_频繁的安装和卸载app会不会伤害苹果手机?
  7. restTemplate请求,报 : No instances avaliable for ip地址
  8. supermap试用许可过期如何重新申请
  9. webpack打包VUE项目读取外部配置文件,灵活配置域名
  10. Android开发笔记(十四)圆弧进度动画CircleAnimation