Pairwise算法简介
Pairwise是L. L. Thurstone(29 May1887 – 30 September 1955)在1927年首先提出来的。他是美国的一位心理统计学家。Pairwise也正是基于数学统计和对传统的正交分析法进行优化后得到的产物。
测试过程中,对于多参数参数多值的情况进行测试用例组织,把每个参数的所有值分别和其他参数的值做一个全量组合,就是正交分析法, 优点是测试用例覆盖率100%,缺点测试用例数量庞大,执行用例消耗的人工巨大。
Pairwise (结对)算法源于对传统的正交分析方法优化后得到的产物,它的理论来自于数学统计。
核心理念
1、一组测试用例(每个用例有3个参数的值组成,如[业务类型,证件类型,联系方式])中每一个2个元素组合起来,两两组合,就有3种组合方式(有位置的[业务类型,证件类型],[业务类型,联系方式],[证件类型,联系方式]);
2、这第一组测试用两两组合出的3种组合方式,与其他组元素的对比原则是 :[业务类型,证件类型]只会和其他组的第一个元素对比,[业务类型,联系方式]只会和其他组中第二个元素对比;
如果[业务类型,证件类型],[业务类型,联系方式],[证件类型,联系方式] 这三个元素分别出现在其余有效组相同位置的元素中,就可以认为这一组Case为多余Case,并进行删除。
3、最终得到测试用例,就是结对算法计算出来的最优测试用例集合.
对这段说明写个例子,如果一个测试场景有业务类型,证件类型,联系方式三个字段要填,它们可选值如图, 全覆盖的话需要333=27个用例.
上面第2点,体现在图上就是:
前两位是1和a的,只取一个,其他全部删除.
后两位是a和x的,只第一个,后面全部删除.
前两位是1和b的,只第一个,后面全部删除.
…
依次类推下去,就只剩下图片圈起来的9个组合.
Pairwise基于如下2个假设:
(1)每一个维度都是正交的,即每一个维度互相都没有交集。
(2)根据数学统计分析,73%的缺陷(单因子是35%,双因子是38%)是由单因子或2个因子相互作用产生的。19%的缺陷是由3个因子相互作用产生的。
因此,pairwise基于覆盖所有2因子的交互作用产生的用例集合性价比最高而产生的。
再来个例子:
银行的柜面开户业务,涉及十多个输入框,每个输入框都有多个选项,如果要全覆盖所有参数,用例数会十分庞大.
选其中5个输入框选项为例,
['开卡','开账户','开存折'],
['身份证','军官证','户口本','护照'],
['手机','固定电话'],
['现金','转账','待销账'],
['个人活期存款','随心取','个人定活','个人整存整取'],
这五个输入框的选项,完全组合的话,有34234=288个测试用例.
然而用Pariwise算法过滤后,只需要测试19个用例即可覆盖绝大多数场景.
代码演示
from allpairspy import AllPairs
parameters = [
['开卡','开账户','开存折'],
['身份证','军官证','户口本','护照'],
['手机','固定电话'],
['现金','转账','待销账'],
['个人活期存款','随心取','个人定活','个人整存整取'],
]
print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters)):
print("{:2d}: {}".format(i, pairs))
```
输入结果
PAIRWISE:
0: ['开卡', '身份证', '手机', '现金', '个人活期存款']
1: ['开账户', '军官证', '固定电话', '转账', '个人活期存款']
2: ['开存折', '户口本', '固定电话', '待销账', '随心取']
3: ['开存折', '护照', '手机', '转账', '个人定活']
4: ['开账户', '护照', '手机', '待销账', '个人整存整取']
5: ['开卡', '户口本', '固定电话', '现金', '个人整存整取']
6: ['开卡', '军官证', '手机', '待销账', '个人定活']
7: ['开账户', '身份证', '固定电话', '转账', '个人定活']
8: ['开存折', '身份证', '手机', '现金', '随心取']
9: ['开存折', '军官证', '手机', '现金', '个人整存整取']
10: ['开账户', '户口本', '手机', '转账', '随心取']
11: ['开卡', '护照', '固定电话', '转账', '随心取']
12: ['开账户', '护照', '手机', '现金', '个人定活']
13: ['开存折', '户口本', '手机', '转账', '个人活期存款']
14: ['开存折', '身份证', '手机', '待销账', '个人活期存款']
15: ['开存折', '身份证', '手机', '转账', '个人整存整取']
16: ['开存折', '户口本', '手机', '转账', '个人定活']
17: ['开存折', '护照', '手机', '转账', '个人活期存款']
18: ['开存折', '军官证', '手机', '转账', '随心取']
下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢软件测试的小伙伴们,可以加入我们的测试技术交流扣扣群:779450660里面有各种软件测试资源和技术讨论)