参数组合测试利器 - allpairspy
2019-10-06 本文已影响0人
泰斯特_
起源
问题
无论是作为专职开发或测试人员,相信大家在编写测试时都遇到过以下难题:
- 函数入参组合过多,如何有效设计用例
- 测试场景变量过多,如何减少用例量
举例
我们这里拿传统 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 策略不失为一种恰当的用例设计方法,无论是作为测试亦或是开发,我觉得都应该掌握这门技术。
希望大家能从本篇文章有所收获~
给大家推荐一下我的公众号 「智能测试开发」,欢迎大家扫描下方海报二维码领取 进阶教程~
![](https://img.haomeiwen.com/i18344821/34b0a1b5da4bbe26.png)
![](https://img.haomeiwen.com/i18344821/256ca259bff4c531.jpg)