不管是做为专职开发或测试人员,相信你们在编写测试时都遇到过如下难题:python
咱们这里拿传统 Web 测试举个栗子 ( 开发人员设计单元测试同理 ):数组
咱们对某移动端 Web 网站设计了 5 个 测试用例,而且须要对其进行不一样 IOS 大版本 ( >=10 ) 以及 最新主流浏览器 的 兼容性测试。因而咱们共有 3 个测试维度:浏览器
想要实现参数组合全覆盖的话,一共须要覆盖 5 x 4 x 5 = 100 种组合、若是实现了自动化测试这倒不算什么问题,若是是手工测试的话那就比较蛋疼了。函数
那么有没有办法能够以最少的用例作到尽量全面的覆盖呢???单元测试
答案固然是确定的~测试
咱们能够采起 pairwise ( 结对测试 ) 的测试策略进行用例设计,减小测试组合的同时最大化用例性价比。网站
pairwise 是一种组合测试的设计策略,保证对各个参数两两组合的全覆盖 (通过实践,遍历参数两两组合能够找出绝大部分的 Bug )
,能够有效提升用例设计与执行性价比。 -- 笔者
复制代码
请看下文 实现~spa
这里咱们直接引用一个简单实用的 python 库 - allpairspy 。设计
安装过程很是简单:3d
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 策略不失为一种恰当的用例设计方法,不管是做为测试亦或是开发,我以为都应该掌握这门技术。
但愿你们能从本篇文章有所收获~
给你们推荐一下个人公众号 「智能测试开发」,欢迎你们扫描下方海报二维码领取 进阶教程~