一Python自动化测试脚本性能优化小结
一、背景及成果
一算法项目有几千个对象,每个对象含大小几百上千个数据,每个数据需符合多种不同的特定独立或关联的规则;原python自动化测试脚本随着数据量和规则复杂度的增加,运行耗时越来越久,最终超过12小时,无法进行快速验证,因此2019年5月份进行改写优化。
优化后相同功能耗时4分多钟,包括补充新版本需求的测试约束,总耗时不超过6分钟。
新版脚本已放相应Git。本文放公众平台因此对项目特定信息进行替换和遮盖。
二、优化准备:统计耗时
1、统计函数耗时的装饰器
让各函数用例运行时能自动输出运行耗时
运行后日志统计各函数耗时如下:
2、使用profile进行耗时分析(没有使用这点,直接优化成功)
输出如下,默认根据累计耗时倒序排序,可以针对耗时较多的语句和方法进行针对性优化:
三、优化过程
1、业务级别优化
原先业务测试是通过数据仓库平台导出的Excel格式报表进行验证,将Excel表格读取后生成几千个对象的xx数据,然后针对每个对象进行各种约束规则的校验。虽然每个对象的校验时间只有几十秒并不长,但是几千个对象总测试时间就超过12小时无法接受,而且对象规模和数量还在不断增长。
因此考虑改为不再拆分,所有算法数据读入后进行整体的各种约束条件校验。
2、函数级别优化
验证本周每天半小时xx生产力约束是否符合预期的函数第一版,对各对象进行校验,计算各对象的预测xx对应的xx人数和算法xx人数,进行对比:
耗时超过3小时,不满意,遂写第二版。
逻辑为:充分发挥pandas内置方法的性能优势,使用groupby将数据量缩减到对象数量,然后进行关联merge。
优化后耗时3.49秒,优化成功。
3、语句优化
为常规优化方法,包括:
a、去除不必要的大量测试成功log:
b、减少循环体消耗,将循环体内可以提前计算的提起到for循环外
c、多线程、并行计算(此测试脚本主要为CPU密集型计算,因此无此优化空间,未采用)
d、优化算法
e、降低递归次数
f、...
此部分较简单,不附上详细例子。
另附pandas官方性能优化文章:
https://pandas.pydata.org/pandas-docs/stable/user_guide/enhancingperf.html