测试组合生成器-allpairspy

1、前言

在我们写功能用例时,常常会遇到多个参数有很多的选项,而如果想把这些参数值都要覆盖执行的话,工作量可想而知。那有没有什么办法既可以减少用例数量,也可以保证用例质量又降低测试时间成本,本篇将介绍一款工具 allpairspy,可以满足此需求。

2、简介

allpairspy 是一个用 Python 编写的开源测试组合生成器。生成器允许你使用“成对组合”方法创建一组测试,将变量组合的数量减少到涵盖大多数情况的较小集合中。

特点:

1、生成足够好的数据集。

2、Python 迭代器风格的枚举接口。

3、允许在搜索下一个组合时过滤掉“无效”组合。

安装依赖:

Python 2.7+ 或 3.5+

安装命令:

pip install allpairspy

除了 allpairspy,还有很多成对测试工具:

https://www.pairwise.org/tools.html

例如 Pairwise Pict Online,在线生成成对测试工具

https://pairwise.yuuniworks.com/

参数数据与限制条件

 在线生成后的结果

 有关成对测试的更多信息,请参阅 

http://www.pairwise.org

3、基本用途

如代码所示,参数里有5组数据,每组数据有不同的参数,如果按照全量的组合,那么就是2*4*2*4*5=320条用例。通过引用 allpairspy 包,来创建成对组合。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:咖啡加剁椒
from allpairspy import AllPairsparameters = [["X品牌", "Y品牌"],["Windows10", "Windows11", "macOS", "Ubuntu"],["有线网络", "无线网络"],["按天", "按周", "按月", "按年"],[6, 10, 15, 30, 60]
]print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters)):print("{:2d}: {}".format(i+1, pairs))

通过执行后的结果,可以看出 allpairspy 将用例条数缩减至22条。

4、过滤

有些时候,参数的某个特定值与其他参数值之间的组合是无效的,这个时候就应该排除这个组合。

代码里可以通过在 AllPairs 构造函数中将过滤函数设置为 filter_func 来限制对。

如代码所示,设置了3个过滤条件。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:咖啡加剁椒from allpairspy import AllPairsdef is_valid_combination(row):"""这是一个过滤功能,筛选函数应返回True如果组合有效,则为False,否则为False"""n = len(row)if n > 1:# Y品牌不支持Windows10if "Windows10" == row[1] and "Y品牌" == row[0]:return False# X品牌不支持Ubuntuif "Ubuntu" == row[1] and "X品牌" == row[0]:return Falseif n > 4:# 按年要大于30分钟进行计算if "按年" == row[3] and row[4] < 30:return Falsereturn Trueparameters = [["X品牌", "Y品牌"],["Windows10", "Windows11", "macOS", "Ubuntu"],["有线网络", "无线网络"],["按天", "按周", "按月", "按年"],[6, 10, 15, 30, 60]
]print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters, filter_func=is_valid_combination)):print("{:2d}: {}".format(i+1, pairs))

通过执行后的结果,可以看出设置过滤后用例条数缩减至15条

5、有序字典

当输入的参数为字典时,可以使用 collections.OrderedDict 实例作为 AllPairs 构造函数的参数,对作为 collections.namedtuple 实例返回。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:咖啡加剁椒from collections import OrderedDict
from allpairspy import AllPairsparameters = OrderedDict({"品牌": ["X品牌", "Y品牌"],"操作系统": ["Windows10", "Windows11", "macOS", "Ubuntu"],"分钟": [15, 30, 60]
})print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters)):print("{:2d}: {}".format(i+1, pairs))

执行后的结果。

6、使用pytest进行成对参数化测试

可以将 allpairspy 结合到单元测试框架 pytest 里,进行成对参数化测试。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:咖啡加剁椒import pytest
from allpairspy import AllPairs# 使用pytest进行成对参数化测试
def function_to_be_tested(brand, operating_system, minute):# do somethingreturn Trueclass TestParameterized(object):@pytest.mark.parametrize(["brand", "operating_system", "minute"], [value_list for value_list in AllPairs([["XBrand", "YBrand"],["Windows10", "Windows11", "macOS", "Ubuntu"],[10, 15, 30, 60]])])def test(self, brand, operating_system, minute):assert function_to_be_tested(brand, operating_system, minute)

执行命令:

py.test test_parameterize.py -v

执行后的结果,共生成了16条用例。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蟹目标检测数据集VOC格式400张

蟹&#xff0c;一种独特的海洋生物&#xff0c;以其强壮的身体和独特的生活习性而闻名。 蟹的身体宽厚&#xff0c;有一对锐利的大钳子&#xff0c;这使得它们在寻找食物和保护自己时非常有力。蟹的外观颜色多样&#xff0c;有绿色、蓝色、棕色和红色等&#xff0c;这使得它们在…

【软件测试】黑盒测试

《等价类划分法》 有效等价类无效等价类 &#xff08;输入条件&#xff09;10 < x < 100&#xff08;有效等价类&#xff09;10 < x < 100&#xff08;无效等价类&#xff09;x < 10 和 x >100 《边界值分析法》 基本原则 如果输入条件规定了取值范围&…

SpringIOC之support模块DelegatingMessageSource

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Java学习——设计模式——结构型模式2

文章目录 结构型模式装饰者模式桥接模式外观模式组合模式享元模式 结构型模式 结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能&#xff0c;但结构型模式不仅仅简单地使用继承&#xff0c;而更多地通过…

ssm基于BS的项目监管系统+jsp论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

NX/UG二次开发—C\C++开发单个DLL支持多版本NX一种方法

1、去除附加包含目录下的NX相关的lib文件&#xff1a; 2、从对应的dll导出ufun函数和NXopen函数&#xff1a; libufun.dll; libufun_cam.dll; libufun_cae.dll; libufun_die.dll; libufun_vdac.dll; libufun_weld.dll; libugopenint.dll; libugopenint_cae.dll; libugopenint_…

Apache HTTPD 换行解析漏洞(CVE-2017-15715)详解

Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09; 1.cd到CVE-2017-15715 cd vulhub/httpd/CVE-2017-15715 2.运行docker-compose build docker-compose build 3.运行docker-compose up -d 4.查看docker-compose ps 5.访问 出现这个表示安装成功 6.漏洞复现…

C练习——鸡兔同笼

题目&#xff1a; 有若干只鸡和兔子在同一个笼子里&#xff0c;从上面数&#xff0c;有98个头&#xff1b;从下面数&#xff0c;有386只脚。问笼中各有几只鸡和兔&#xff1f; 解析&#xff1a; 数学上列二元一次方程组求解&#xff0c;所以采用穷举法&#xff0c;但可以缩小…

[SpringBoot]接口的多实现:选择性注入SpringBoot接口的实现类

最近在项目中遇到两种情况&#xff0c;准备写个博客记录一下。 情况说明&#xff1a;Service层一个接口是否可以存在多个具体实现&#xff0c;此时应该如何调用Service&#xff08;的具体实现&#xff09;&#xff1f; 其实之前的项目中也遇到过这种情况&#xff0c;只不过我采…

rax3000m 刷机 uboot + immortalwrt

0. 环境 - win10 ubuntu22 - rax3000m 生产日期20231027 一台&#xff08;nand版本的&#xff09; 1. 上电&#xff0c;登录web 电脑连接路由器LAN1 http://192.168.10.1/ 账号&#xff1a;user 密码&#xff1a;KK6kYC!3 上网设置&#xff1a;自动获取IP 2. 开启 ssh 2…

有趣的前端知识(一)

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读HTML简介基础声明HTML标签标题段落注释水平线文本格式化标签超链接图像<i…

Vue2 - 数据响应式原理

目录 1&#xff0c;总览2&#xff0c;Observer3&#xff0c;Dep4&#xff0c;Watcher5&#xff0c;Schedule 1&#xff0c;总览 vue2官网参考 简单介绍下上图流程&#xff1a;以 Data 为中心来说&#xff0c; Vue 会将传递给 Vue 实例的 data 选项&#xff08;普通 js 对象&a…

吴飞教授 人工智能 模型与算法 启发式搜索课件发散分析

一、文章介绍 本文是针对吴飞教授在MOOC课程 &#xff1a;《人工智能&#xff1a;模型与算法》 2.1节 启发式搜索的课前发散 在课程2.1节 启发式搜索章节中&#xff0c;吴飞教授以如何计算城市地图两点之间最短路径为例&#xff0c;重点讲授了贪婪最佳优先搜索和A*搜索算法&a…

Cadence Editor 关于画PCB相关内容

目录 一 新建PCB文件 二 指定封装库 三 导入网表 四 放置器件 五 绘制板框 六 精准定位 七 原理图与PCB的交互 八 飞线设置 九 层管理 布局布线阶段需要显示的层 十 器件位置相关 1 器件选取的基准点 2 旋转 3 对齐 4 把器件移动到底层或顶层 5 锁定与解锁 6…

媒体捕捉-iOS自定义二维码扫描功能

引言 随着iOS 7引入AV Foundation框架&#xff0c;二维码扫描功能已经成为iOS应用程序中不可或缺的一部分。现今&#xff0c;几乎每个应用都充分利用这一功能&#xff0c;为用户提供了诸如扫码登录、扫码填充等丰富多彩的便捷体验。这项技术不仅丰富了应用功能&#xff0c;也为…

pyfolio工具结合backtrader分析量化策略组合,附源码+问题分析

pyfolio可以分析backtrader的策略&#xff0c;并生成一系列好看的图表&#xff0c;但是由于pyfolio直接install的稳定版有缺陷&#xff0c;开发版也存在诸多问题&#xff0c;使用的依赖版本都偏低&#xff0c;试用了一下之后还是更推荐quantstats。 1、安装依赖 pip install …

车辆运动学方程推导和代码实现

文章目录 1. 运动学方程2. 模型实现 1. 运动学方程 自行车模型&#xff08;Bicycle Model&#xff09;是车辆数字化模型中最常见的一种运动学模型。其除了可以反映车辆的一些基础特性外&#xff0c;更重要的是简单易用。通常情况下我们会把车辆模型简化为二自由度的自行车模型…

游戏Lua调用01.lua的编译及测试

一、lua库下载与编译 进入lua官网 Lua: version history 找到lua5.1 选择lua5.1是因为大部分游戏使用的都是lua5.1的库&#xff0c;也可以选择高版本&#xff0c;影响不大 下载完了后使用vs建立一个静态库或者动态库的工程 这里以动态库为例子&#xff0c;静态库也是一样的…

flink table view datastream互转

case class outer(f1:String,f2:Inner) case class outerV1(f1:String,f2:Inner,f3:Int) case class Inner(f3:String,f4:Int) 测试代码 package com.yy.table.convertimport org.apache.flink.streaming.api.scala.StreamExecutionEnvironment import org.apache.flink.tabl…

w18认证崩溃之暴力破解DVWA

一、实验环境 攻击工具&#xff1a;burpsuite2021.12 靶场&#xff1a;DVWA二、实验目的 演示暴破DVWA的medium和high两个级别&#xff0c;low级别请查看w18认证崩溃之暴力破解4种攻击模式 三、实验步骤 1.设置靶场medium级别 2.开启谷歌代理插件&#xff0c;开启bp拦截&…