参数组合测试利器 - allpairspy

1,925 阅读3分钟

起源


问题

无论是作为专职开发或测试人员,相信大家在编写测试时都遇到过以下难题:

  • 函数入参组合过多,如何有效设计用例
  • 测试场景变量过多,如何减少用例量

举例

我们这里拿传统 Web 测试举个栗子 ( 开发人员设计单元测试同理 ):

我们对某移动端 Web 网站设计了 5 个 测试用例,并且需要对其进行不同 IOS 大版本 ( >=10 ) 以及 最新主流浏览器兼容性测试。于是我们共有 3 个测试维度:

  • IE、Firefox、Chrome、UC、QQ
  • IOS 10、 IOS 11、 IOS 12、 IOS 13
  • 用例1、用例2、用例3、用例4、用例5

想要实现参数组合全覆盖的话,一共需要覆盖 5 x 4 x 5 = 100 种组合、如果实现了自动化测试这倒不算什么问题,如果是手工测试的话那就比较蛋疼了。

解决方案

那么有没有办法可以以最少的用例做到尽可能全面的覆盖呢???

答案当然是肯定的~

我们可以采取 pairwise ( 结对测试 ) 的测试策略进行用例设计,减少测试组合的同时最大化用例性价比。

什么是 pairwise ?

pairwise 是一种组合测试的设计策略,保证对各个参数两两组合的全覆盖 (经过实践,遍历参数两两组合可以找出绝大部分的 Bug )
,可以有效提高用例设计与执行性价比。 -- 笔者

如何使用 pairwise 策略设计测试用例 ?

请看下文 实现~

实现


安装

这里我们直接引用一个简单实用的 python 库 - allpairspy

安装过程非常简单:

pip install allpairspy==2.4.1

核心代码

我们这里将用代码实现上文中提到的 Web 测试场景下的用例参数组合设计~

if __name__ == "__main__":

    # 导入库
    from allpairspy import AllPairs
    
    # 列出所有参数
    parameters = [
        ["Ie", "Firefox", "Chrome", "UC", "QQ"],
        ["Ios10", "Ios11", "Ios12", "Ios13"],
        ["用例1", "用例2", "用例3", "用例4", "用例5"]
    ]
    
    # 输出 pairwise 参数组合
    if __name__ == '__main__':
        print("PAIRWISE:")
        for i, pairs in enumerate(AllPairs(parameters)):
            print("{:2d}: {}".format(i, pairs))

控制台输出如下:

PAIRWISE:
 0: ['Ie', 'Ios10', '用例1']
 1: ['Firefox', 'Ios11', '用例1']
 2: ['Chrome', 'Ios12', '用例1']
 3: ['UC', 'Ios13', '用例1']
 4: ['QQ', 'Ios13', '用例2']
 5: ['QQ', 'Ios12', '用例3']
 6: ['UC', 'Ios11', '用例3']
 7: ['Chrome', 'Ios10', '用例3']
 8: ['Firefox', 'Ios10', '用例2']
 9: ['Ie', 'Ios13', '用例3']
10: ['Ie', 'Ios12', '用例2']
11: ['Firefox', 'Ios12', '用例4']
12: ['Chrome', 'Ios11', '用例2']
13: ['UC', 'Ios10', '用例4']
14: ['QQ', 'Ios11', '用例4']
15: ['QQ', 'Ios10', '用例5']
16: ['UC', 'Ios12', '用例5']
17: ['Chrome', 'Ios13', '用例4']
18: ['Firefox', 'Ios13', '用例5']
19: ['Ie', 'Ios11', '用例5']
20: ['Ie', 'Ios11', '用例4']
21: ['Firefox', 'Ios11', '用例3']
22: ['Chrome', 'Ios11', '用例5']
23: ['UC', 'Ios11', '用例2']
24: ['QQ', 'Ios11', '用例1']

Process finished with exit code 0

可以很清晰的看出,我们成功输出了所有 pairwise 策略下的参数组合,将用例总数从 100 条减少至 25 条, 整整减少了 3/4 ! (当参数越来越多时,效果会更明显)

总结


当测试参数组合非常庞大时,使用 pairwise 策略不失为一种恰当的用例设计方法,无论是作为测试亦或是开发,我觉得都应该掌握这门技术。

希望大家能从本篇文章有所收获~

给大家推荐一下我的公众号 「智能测试开发」,欢迎大家扫描下方海报二维码领取 进阶教程~