vlambda博客
学习文章列表

一Python自动化测试脚本性能优化小结

一、背景及成果

    一算法项目有几千个对象,每个对象含大小几百上千个数据,每个数据需符合多种不同的特定独立或关联的规则;原python自动化测试脚本随着数据量和规则复杂度的增加,运行耗时越来越久,最终超过12小时,无法进行快速验证,因此2019年5月份进行改写优化。

    优化后相同功能耗时4分多钟,包括补充新版本需求的测试约束,总耗时不超过6分钟。

    新版脚本已放相应Git。本文放公众平台因此对项目特定信息进行替换和遮盖。

二、优化准备:统计耗时

1、统计函数耗时的装饰器

    让各函数用例运行时能自动输出运行耗时

  运行后日志统计各函数耗时如下:

一Python自动化测试脚本性能优化小结

2、使用profile进行耗时分析(没有使用这点,直接优化成功)

一Python自动化测试脚本性能优化小结

    输出如下,默认根据累计耗时倒序排序,可以针对耗时较多的语句和方法进行针对性优化:

一Python自动化测试脚本性能优化小结

三、优化过程

1、业务级别优化

    原先业务测试是通过数据仓库平台导出的Excel格式报表进行验证,将Excel表格读取后生成几千个对象的xx数据,然后针对每个对象进行各种约束规则的校验。虽然每个对象的校验时间只有几十秒并不长,但是几千个对象总测试时间就超过12小时无法接受,而且对象规模和数量还在不断增长。

   因此考虑改为不再拆分,所有算法数据读入后进行整体的各种约束条件校验。

2、函数级别优化

      验证本周每天半小时xx生产力约束是否符合预期的函数第一版,对各对象进行校验,计算各对象的预测xx对应的xx人数算法xx人数,进行对比:

一Python自动化测试脚本性能优化小结

     耗时超过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