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

搞定。

最新文章

  1. Dapper ORM VS SqlSugar ORM的 8场对决
  2. C程序中常见的内存操作错误
  3. AutoCAD安装失败
  4. 转载:JProfiler远程监控LINUX上的Tomcat过程细讲
  5. Java--解决java compiler level does not match the version of the installed java project facet错误
  6. ASP.NET Core1.0 带来的新特性
  7. sp转dp dp转px
  8. 前端攻城狮学习笔记九:让你彻底弄清offset
  9. hdu 4068 SanguoSHA
  10. 对比C++中的指针和引用
  11. 命令cd
  12. Egret的第一个2048游戏
  13. [简历] PHP 技能关键字列表
  14. Ncurses <一>
  15. Codeforces Round #306 (Div. 2) C
  16. region URL请求数据
  17. 超详细的 Linux CentOS yum 源的配置与使用【转发+新增】
  18. 【Alpha】阶段总结报告
  19. 阿里2019实习内推,五轮技术面+一轮HR面,Java岗面经
  20. DirectX11--实现一个3D魔方(2)

热门文章

  1. kudu安装部署
  2. 【问题记录】centos 开机启动命令未执行
  3. Angular总结一:环境搭建
  4. FTP response 421 received. Server closed connection
  5. 3192: [JLOI2013]删除物品
  6. Python学习之路 (三)爬虫(二)
  7. Java基础加强之并发(一)基本概念介绍
  8. Apache去掉index.php
  9. virtualbox+vagrant学习-2(command cli)-5-vagrant halt命令
  10. ls: Call From hdoop2/192.168.18.87 to hdoop2:8020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see