zoukankan      html  css  js  c++  java
  • 结对测试算法性能优化(代码层面)

    在《接口自动化测试框架-AIM》这篇博客中,提到了parewise算法。

    这次对其进行性能优化,共3点。

    一、

    因为笛卡尔积和两两拆分,是有序的。

    就保证了两两拆分后的每列都是相同位置的元素。

    所以在比较时,不用跨列去比较。

    只需要比较同一列的值就可以了。

    img

    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。

    二、

    如果某一列没有出现重复的元素,那就不用继续找后面的列了。

    说明这一行用例是需要保留的。

    img

            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次累加起来的。

    无可奈何。

    只能优化用户体验了,哈哈哈。

    加了个进度条。

    img

    过程也有些曲折。

    1.

    按网上例子print end=

    c = int(i / 10)
    jd = '
     %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 = '
     %2d%% [%s%s]'
    a = '■' * c
    b = '□' * (10 - c)
    sys.stdout.write(jd % (i, a, b))
    sys.stdout.flush()
    

    成功显示了。但是在用HTMLTestRunner跑的时候,又显示不出来进度条了!

    3.

    再百度,无果。

    看源码,发现是输出重定向了。

    img

    联想到log日志是能打印控制台的。

    于是“偷奸耍滑”,在Log里面复用了一下。

    img

    搞定。

    版权申明:本文为博主原创文章,转载请保留原文链接及作者。

  • 相关阅读:
    Vue单页面应用
    MVVM模式理解
    Ajax原生四大步骤
    Vue 全家桶介绍
    原生js的dom操作
    vs2015+opencv3.3.1+ maxflow-v3.01 c++实现Yuri Boykov 的Interactive Graph Cuts
    c++迭代递归实现汉诺塔(5种迭代方法满足你)
    opencv3.3.1+vs2015+c++实现直接在图像上画掩码,保存掩码图片
    声明函数指针、回调函数、函数对象------c++程序设计基础、编程抽象与算法策略
    C++/C语言的标准库函数与运算符的区别new/delete malloc/free
  • 原文地址:https://www.cnblogs.com/df888/p/11747635.html
Copyright © 2011-2022 走看看