结对测试算法性能优化(代码层面)

在《接口自动化测试框架-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里面复用了一下。

搞定。

原文地址:https://www.cnblogs.com/df888/p/10912154.html

时间: 2024-10-12 19:20:01

结对测试算法性能优化(代码层面)的相关文章

结对测试算法性能优化(用例设计层面)

在<结对测试算法性能优化(代码层面)>一文中, 对原来算法代码进行了一些优化, 对于笛卡尔积后千条数据,是能满足使用需要的. 但在实际业务中,会碰到百万数据. 比如某接口共18个参数,每个参数均可为空,其中8个只需要单个值,10个为多选项,需要多个值. 对于多选项,我的设计是,全选+随机n个多选(1<=n<=len-1)+空. 按照这个策略,笛卡尔积的结果就是3^8*2^10=6718464. 671万数据! parewise根本处理不动. 该怎么处理? 调整用例设计. 1.为空的

java算法插入排序优化代码

原文:java算法插入排序优化代码 代码下载地址:http://www.zuidaima.com/share/1550463280630784.htm 一个细节让插入排序更具效率 运行此方法需要为main方法传递参数 package com.zuidaima.sort; /** *@author www.zuidaima.com **/ public class TestSort { public static void main(String args[]){ int l = args.len

App的网络环境测试和性能优化

1. 网络环境测试一般是先用网络损伤模拟仪或mock工具模拟常见的七种损伤和5种网络环境,然后再国内外城市采样的方式(带宽和延时)组合测试生成报告, 下面是一些统计图 2. 采样点的选择一般都是根据自己server收集的用户信息.如果新app就要参考近品/竞品或第三方的统计数据拍脑袋 3. 从测试的角度,应该建立实时监控的web portal.其实测试的目的除了保证产品发布的质量.更重要的是为优化提供依据,所以report最后一部分都是issue list 和optmize advice,当然测

Android开发中的性能优化---代码

前 这篇主要总结一些优化代码的技巧,一些写代码中的小细节,可能就会影响程序的执行效率,比如一个地方只会影响1ms,那么1000个地方就会影响1s,1s到底长不长?要知道Activity出现ANR异常的时间为5s!!!  主要遵循两个原则  1.不要创建一些没必要创建的对象以及重复定义某个变量  对象的创建是一个非常繁琐的步骤,JVM首先会对通过new指令对符号进行解析,以此来判断该类是否被加载,然后在堆中进行内存分配,为对象分配完内存空间后,就会对内存区域进行初始化(该为0的为0,该为null的

Egret性能优化(代码篇)

代码注意事项: 类方法中,将this赋值给另外一个临时变量,如self,再用self进行提高1/3的效率. 在循环中,尝试改进写法,减少读取次数:for(var i = 0, length = array.length; i < length; ++i). 避免双重解释,如eval函数,会使JavaScript创建解析器,产生额外的性能消耗. 推荐使用正则表达式处理字符串遍历. 避免使用["property"]访问对象属性,改为Object.property. 创建对象var o

前端优化-代码层面

<script type="text/javascript"> console.time(`test`) var len = 100 var ul = document.getElementById('list') for (var i = 0; i < len; i++) { var li = document.createElement('li') ul.innerHTML += `<li>${i}</li>` } console.time

storm性能优化

Storm 性能优化 目录 场景假设 调优步骤和方法 Storm 的部分特性 Storm 并行度 Storm 消息机制 Storm UI 解析 性能优化 场景假设 在介绍 Storm 的性能调优方法之前,假设一个场景:项目组部署了3台机器,计划运行且仅运行 Storm(1.0.1) + Kafka(0.9.0.1) + Redis(3.2.1) 的小规模实验集群,集群的配置情况如下表: | 主机名 | 硬件配置 | 角色描述 ||: ---------------- :|: ----------

C++应用程序性能优化(一)——应用程序性能优化简介

C++应用程序性能优化(一)--应用程序性能优化简介 一.程序性能优化简介 1.程序性能优化简介 在计算机发展的早期阶段,硬件资源相对而言是非常昂贵的,CPU运行时间与内存容量给程序开发人员设置了极大限制.因此,早期的程序对运行性能和内存空间占用的要求是非常严格的,很多开发人员为了减少1%的CPU运行时间,为减少几十个甚至几个字节而不懈努力.随着计算机技术的快速发展,硬件资源变得相对便宜.但如果认为软件开发时,程序的性能优化不再重要,硬件将解决性能问题也是片面的.计算机硬件的发展解决了部分软件的

[iOS Animation]-CALayer 性能优化

性能优化 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性.Core Animation功能和性能都非常强大,但如果你对背后的原理不清楚的话也会降低效率.让它达到最优的状态是一门艺术.在这章中,我们将探究一些动画运行慢的原因,以及如何去修复这些问题. CPU VS GPU 关于绘图和动画有两种处理的方式:CPU(中央处理器)和GPU(图形处理器).在现代iOS设备中,都有可以运行不同软件的可编程芯片,但是由于历史