Pairwise算法是什么

对于以下测试场景:

  • 浏览器:M,O,P

  • 操作平台:W(windows),L(linux),i(ios)

  • 语言:C(chinese),E(english)

该如何设计功能测试用例呢?

根据数学统计分析,73%的缺陷(单因子是35%,双因子是38%)是由单因子或2个因子相互作用产生的。19%的缺陷是由3个因子相互作用产生的。也就是说,大多数的bug都是条件的两两组合造成的

Pairwise算法是L. L. Thurstone在1927年首先提出来的,他是美国的一位心理统计学家。Pairwise算法基于两两组合,过滤出性价比高的用例集。它的思路是:如果某一组用例的两两组合结果,在其他组合中均出现,就删除该组用例,从而精简用例

对于上述测试场景,可以通过笛卡尔积设计18条两两组合的测试用例:

1,M W C
2,M W E
3,M L C
4,M L E
5,M I C
6,M I E
7,O W C
8,O W E
9,O L C
10,O L E
11,O I C
12,O I E
13,P W C
14,P W E
15,P L C
16,P L E
17,P I C
18,P I E

对于第18条用例P I E来说,两两组合是PI ,PE ,IEPI在17号,PE在16号,IE在12号出现过,所以第18条用例可以过滤掉。按照这个算法继续过滤,最终剩下9条用例:

1,M W C
4,M L E
6,M I E
7,O W E
9,O L C
11,O I C
14,P W E
15,P L C
17,P I C

用例减少了50%!而且维度越多越明显,当有10个维度的时候4*4*4*4*3*3*3*2*2*2=55296个测试case,pairwise为24个,是原始测试用例规模的0.04%。

Python实现

源码已上传:https://github.com/dongfanger/python-tools/blob/main/pairwise.py

#!/usr/bin/python
# encoding=utf-8"""
@Author  :  Don
@Date    :  2021/11/03 20:34
@Desc    :
"""import copy
import itertools
from sys import stdoutfrom loguru import loggerdef parewise(option):"""pairwise算法"""cp = []  # 笛卡尔积s = []  # 两两拆分for x in eval('itertools.product' + str(tuple(option))):cp.append(x)s.append([i for i in itertools.combinations(x, 2)])logger.info('笛卡尔积:%s' % len(cp))del_row = []bar(0)s2 = copy.deepcopy(s)for i in range(len(s)):  # 对每行用例进行匹配if (i % 100) == 0 or i == len(s) - 1:bar(int(100 * i / (len(s) - 1)))t = 0for j in range(len(s[i])):  # 对每行用例的两两拆分进行判断,是否出现在其他行flag = Falsefor i2 in [x for x in range(len(s2)) if s2[x] != s[i]]:  # 找同一列if s[i][j] == s2[i2][j]:t = t + 1flag = Truebreakif not flag:  # 同一列没找到,不用找剩余列了breakif t == len(s[i]):del_row.append(i)s2.remove(s[i])res = [cp[i] for i in range(len(cp)) if i not in del_row]logger.info('过滤后:%s' % len(res))return resdef bar(i):"""进度条"""c = int(i / 10)jd = '\r %2d%% [%s%s]'a = '■' * cb = '□' * (10 - c)msg = jd % (i, a, b)stdout.write(msg)stdout.flush()if __name__ == '__main__':pl = [['M', 'O', 'P'], ['W', 'L', 'I'], ['C', 'E']]a = parewise(pl)print()for i in a:print(i)

输出结果:

100% [■■■■■■■■■■]
('M', 'W', 'E')
('M', 'L', 'E')
('M', 'I', 'C')
('O', 'W', 'E')
('O', 'L', 'E')
('O', 'I', 'C')
('P', 'W', 'C')
('P', 'L', 'C')
('P', 'I', 'E')
2021-11-07 11:38:56.850 | INFO     | __main__:parewise:24 - 笛卡尔积:18
2021-11-07 11:38:56.850 | INFO     | __main__:parewise:45 - 过滤后:9

参考资料:

https://blog.csdn.net/ztf312/article/details/78792906

https://www.cnblogs.com/df888/p/11747616.html

功能测试用例自动生成算法Pairwise相关推荐

  1. 任意多边形三维屋顶自动生成算法

    任意多变性三维屋顶自动生成算法 已经在CSDN猫了一年了,通过这里找到许多资源,特别是Android方面的.但是一直没有写过博客,很感激在一些牛人博客里找到自己问题的答案,所以从今天起我也将效仿大家, ...

  2. python表情包多样化图形化聊天室_Python还有这功能:自动生成表情包,从此斗图无敌手!...

    原标题:Python还有这功能:自动生成表情包,从此斗图无敌手!

  3. airtest+poco多脚本、多设备批处理运行测试用例自动生成测试报告

    一:主要内容 框架功能.框架架构及测试报告效果 airtest安装.环境搭建 框架搭建.框架运行说明 框架源码 二:框架功能及测试报告效果 1. 框架功能: 该框架笔者用来作为公司的项目的前端自动化, ...

  4. 【软件测试】三角形测试用例自动生成工具

    项目描述 编程序实现四种以上测试用例的自动生成: 以三角形问题为例,要求如下: 能够接收每一个变量的值域的输入 自动生成测试用例 并输出预期结果 编写操作文档 实现细节 一.编程环境和开发语言 开发环 ...

  5. ES批量索引写入时的ID自动生成算法

    对bulk request的处理流程: 1.遍历所有的request,对其做一些加工,主要包括:获取routing(如果mapping里有的话).指定的timestamp(如果没有带timestamp ...

  6. 3D人体模型自动生成算法,连肌肉颤动都清晰可见!一作来自北大图灵班

    子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 我们在打游戏.看动漫的时候,遇到过不少这样的情况: 感觉哪里不太对-- 现在,这些3D人体模型可以得到改进了~体态更逼真.褶皱更自然.肌肉更 ...

  7. 软件测试用例自动生成技术,一种软件测试用例自动生成方法专利_专利申请于2017-09-08_专利查询 - 天眼查...

    2.如权利要求1所述的方法,其特征在于,在步骤4之后还包括: 步骤5:在基于节点号串生成的测试用例中,检查任意两个接口参数的节点号是否被生 成的测试用例所覆盖,如果全部覆盖,则输出所有的节点号串作为最 ...

  8. java推箱子随机地图的产生_为什么没有人研究推箱子地图自动生成算法?算法随机生成地图,不需要地图库!?...

    其实是有的,可以参考 Ty Taylor 的 The Art and Science of Procedural Puzzle Generation,https://www.youtube.com/w ...

  9. 微软推出一波AI新功能:自动生成图表、更贴心的Cortana和搜索

    李林 发自 凹非寺 量子位 出品 | 公众号 QbitAI Office系列软件越来越聪明了,Bing搜索更加贴心了,Cortana的能力也有大幅提升. 今天在旧金山举办的一场活动上,微软宣布了这样一 ...

最新文章

  1. Httpclient学习日记(一)
  2. 幂法的c语言程序例子,数值分析之幂法及反幂法C语言程序实例.doc
  3. j2ee之原生AJAX
  4. linux中shell变量$#,$@,$0,$1,$2的含义解释(转)
  5. 一部分 数据 迁移_超原版速度110倍,针对PyTorch的CPU到GPU张量迁移工具开源
  6. Qt 学习之路 :Qt 线程相关类
  7. 《深度学习Python实践》第13章——审查回归算法
  8. WINDOWS杀进程的命令
  9. 《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》读书笔记
  10. 智能计算系统(学习笔记)-第三章深度学习
  11. 学生信息管理系统详细设计文档
  12. java 气象数据_中国天气预报数据API收集
  13. 汉字录入到计算机的过程,如何快速把书中文字录入到电脑中
  14. 简单计算经纬度表示的距离
  15. 知道PDF密码,想要移除如何操作?
  16. 励志:滴滴打车App初期是怎么推广的?
  17. java 图片与base64相互转化
  18. 光耦的介绍和常用参数
  19. windows7未能连接一个windows服务(无法连接网络)的解决方法
  20. Linux(2)---Crtl+z与Crtl+c

热门文章

  1. SVM算法原理及Python实现
  2. Modbus协议介绍
  3. 两台电脑其中一台无法ping通的问题
  4. 贴片电阻封装选型方法总结图文
  5. 怎么压缩pdf文件的大小,并保持清晰度的3种办法
  6. zabbix 5.4 添加监控主机
  7. 一个程序员的真实生活感悟
  8. 利用广度策略解决迷宫问题
  9. 十五、Linux驱动之USB鼠标驱动
  10. unity3d Antialiasing 抗锯齿效果 之渲染效果提升