结对测试算法性能优化(代码层面)
2021-05-01 22:26
369 查看
在《接口自动化测试框架-AIM》这篇博客中,提到了parewise算法。
这次对其进行性能优化,共3点。
一、
因为笛卡尔积和两两拆分,是有序的。
就保证了两两拆分后的每列都是相同位置的元素。
所以在比较时,不用跨列去比较。
只需要比较同一列的值就可以了。
flag = False for j2 in range(len(s2[i2])): if s[i][j] == s2[i2][j2] and j == j2: t = t + 1 flag = True break if flag: break
简化为
if s[i][j] == s2[i2][j]: t = t + 1 break
笛卡尔积2187条,优化前60s,优化后45s。
二、
如果某一列没有出现重复的元素,那就不用继续找后面的列了。
说明这一行用例是需要保留的。
for j in range(len(s[i])): # 对每行用例的两两拆分进行判断,是否出现在其他行 flag = False for i2 in [x for x in range(len(s2)) if s2[x] != s[i]]: # 找同一列 if s[i][j] == s2[i2][j]: t = t + 1 flag = True break if not flag: # 同一列没找到,不用找剩余列了 break
笛卡尔积2187条,优化前45s,优化后40s。
三、
优化到这里,逐段代码研究,发现没多少优化余地了。
最外层的for循环是笛卡尔积2187次。
每次循环平均0.02s。
40.85s是2187次累加起来的。
无可奈何。
只能优化用户体验了,哈哈哈。
加了个进度条。
过程也有些曲折。
1.
按网上例子print \r end=
c = int(i / 10) jd = '\r %2d%% [%s%s]' a = '■' * c b = '□' * (10 - c) print(jd % (i, a, b), end='')
单独的py文件跑没问题,pycharm用unittest跑显示不出来。
2.
那就百度,换sys.stdout.write
c = int(i / 10) jd = '\r %2d%% [%s%s]' a = '■' * c b = '□' * (10 - c) sys.stdout.write(jd % (i, a, b)) sys.stdout.flush()
成功显示了。但是在用HTMLTestRunner跑的时候,又显示不出来进度条了!
3.
再百度,无果。
看源码,发现是输出重定向了。
联想到log日志是能打印控制台的。
于是“偷奸耍滑”,在Log里面复用了一下。
搞定。
版权申明:本文为博主原创文章,转载请保留原文链接及作者。
相关文章推荐
- 从代码层面优化系统性能应该怎么做?
- python绘制评估优化算法性能的测试函数
- 从代码层面优化系统性能应该怎么做?(上)
- 如何从代码层面优化系统性能
- 如何从代码层面优化系统性能!
- 通过Java测试几种压缩算法的性能(附测试代码下载)
- [C++] 测试硬件popcnt(位1计数)指令与各种软件算法,利用模板实现静态多态优化性能
- 机器学习(11.2)--神经网络(nn)算法的深入与优化(2) -- QuadraticCost、CorssEntropyCost、SoftMax的javascript数据演示测试代码
- 以前写过的几段分型算法的代码,用来测试2d图形性能还不错
- 不谈架构,看看如何从代码层面优化系统性能!
- 从代码层面优化系统性能的解决方案(下)
- 你都使用哪些工具来测试代码的性能?
- 35 个 Java 代码性能优化总结
- 第五篇:机器学习基础之分类算法:朴素贝叶斯算法、朴素贝叶斯算法流程、文本分类的例子、朴素贝叶斯算法代码原理实现及测试、朴素贝叶斯算法应用实战
- Linus亲手优化内核管道代码,make性能大幅提升
- 运维不得不知的 Linux 性能监控、测试、优化工具(总)
- Java代码性能优化总结
- 基于locust的性能测试优化
- windows中apache2配置性能优化以及测试小结
- 【推荐阅读】并行性能:优化多核计算机的托管代码