一、问题

想必每个tester都有测试过类似下图中需要组合多种元素的业务场景,当然我们不会把所有条件元素组合的可能性都覆盖一遍,而是采取正交实验法进行用例设计,可以在不影响业务场景覆盖的前提下大大减少用例数量,既保证用例质量又降低测试时间成本。

以上图为例:

性别:男、女

班级:一年级、二年级、三年级、四年级、五年级

年龄区间:8岁以下、8-10岁、10-13岁

在正交实验法中,性别、班级、年龄区间这三个被测元素称为 因素,每个因素的取值称之为水平值

如果全量测试场景下:测试用例数量=2*5*3=30(个)。正交实验法数量远远少于全量测试用例数量,当然正交实验法原理稍微复杂,我们直接使用现成的工具生成测试用例即可。今天介绍的工具就是一个Python库:allpairspy。

二、allpairspy实践

1. 基础用法

以上述测试场景为例,咱们利用工具生成测试用例。

from allpairspy import AllPairsparameters = [["男", "女"],["一年级", "二年级", "三年级", "四年级", "五年级"],["8岁以下", "8-10岁", "10-13岁"]
]print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters)):print("用例编号{:2d}: {}".format(i, pairs))

哇哈,是不是很惊喜,少了一半,也就是说降低一半的测试成本。

2. 过滤

当然有些因素之间值的组合是无效的,这时候可以通过在AllPairs构造函数中设置过滤函数filter_func来过滤这些无效用例组。咱们举个例子:年龄区间取值10-13岁不可能对应一年级学生。

from allpairspy import AllPairsdef is_valid_combination(row):n = len(row)# 设置过滤条件if n > 2:# 一年级 不能匹配 10-13岁if "一年级" == row[1] and "10-13岁" == row[2]:return Falsereturn Trueparameters = [["男", "女"],["一年级", "二年级", "三年级", "四年级", "五年级"],["8岁以下", "8-10岁", "10-13岁"]
]print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters, filter_func=is_valid_combination)):print("用例编号{:2d}: {}".format(i, pairs))

很好,将不符合条件的用例直接过滤掉。

3. OrderedDict

如果你想用例更一目了然,使用OrderedDict,可以将结果存储到nametuple数据结构中。

from collections import OrderedDict
from allpairspy import AllPairsparameters = OrderedDict({"性别": ["男", "女"],"年级": ["一年级", "二年级", "三年级", "四年级", "五年级"],"年龄区间": ["8岁以下", "8-10岁", "10-13岁"]
})print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters)):print("用例编号{:2d}: {}".format(i, pairs))

4. 结合pytest

更强大的是,如果你要进行单测或者接口测试,它还可以结合测试框架pytest让你的测试更高效,将生成的组合数据通过数据驱动的方式传递给待测函数/接口。示例如下。

import pytest
from allpairspy import AllPairsdef function_to_be_tested( sex, grade, age):if grade == "一年级" and age == "10-13岁":return Falsereturn Trueclass TestParameterized(object):@pytest.mark.parametrize(["sex", "grade", "age"], [value_list for value_list in AllPairs([[u"男", u"女"],["一年级", "二年级", "三年级", "四年级", "五年级"],["8岁以下", "8-10岁", "10-13岁"]])])def test(self, sex, grade, age):assert function_to_be_tested(sex, grade, age)

⚠️ 结果中没做中文转码,自动忽略。

三、总结

组合参数测试往往是比较枯燥的,借助allpairspy可以快速生成高质量的测试用例,快捷又高效,希望每个tester都能掌握这个工具,多在项目中使用它降低测试成本。

往期文章:

Python编程九:代码调试

Python编程八:异常处理

Python编程七:如何让繁琐的工作自动化?

Python编程六:面向对象编程

Python编程五:数据结构

Python编程四:认识函数

Python编程三:语句控制

Python编程二:变量与运算符

Python编程一:初识Python

Python好酷|allpairspy一款高效的正交实验法生成用例工具相关推荐

  1. allpairspy一款高效的正交实验法生成用例工具

    一.问题 想必每个tester都有测试过类似下图中需要组合多种元素的业务场景,当然我们不会把所有条件元素组合的可能性都覆盖一遍,而是采取正交实验法进行用例设计,可以在不影响业务场景覆盖的前提下大大减少 ...

  2. 在线剪切板,一款高效方便记录剪切板内容的在线工具

    在线剪切板 在线剪切板 https://nick-running.github.io/easy-tools/clipboard.html 很多时候在写一些文字或编写代码,需要重复输入一样的文字或者代码 ...

  3. 正交设计 python算法_Python实现正交实验法-高级篇

    前情介绍: 测试过程中,对于多参数参数多值的情况进行测试用例组织,之前一直使用[正交分析法]进行用例组织,就是把每个参数的所有值分别和其他参数的值做一个全量组合,用Python脚本实现,就是itert ...

  4. 7款高效、好用、免费的Mac工具!好用到炸系列

    好用的软件千千万,下面小编和大家分享几款免费.好用高效的软件,希望这次分享可以对大家有所帮助! Dozer Dozer for Mac(一键隐藏菜单栏工具) 你体验过被应用支配的恐惧吗?这么多图标是闹 ...

  5. 产品经理——如何挑选一款高效的原型工具?

    客观来讲,每种工具能满足的任务和需求各有不同,"最适合"才是原型工具选择的黄金法则 . 每当设计一个新的App或网站时,作为对原型设计有一定了解的人来说,我们会倾向于选择那些&qu ...

  6. python炫酷特效代码_推荐几个炫酷的 Python 开源项目

    推荐几个炫酷的 Python 开源项目 项目一: Supervisor 简介: Supervisor 是实际企 业常用的一款 Linux/Unix 系统下的一个进程管理工具, 基于 Python 开发 ...

  7. python数据分析与发展常用哪些软件_分享一下Python数据分析常用的8款工具

    Python是数据处理常用工具,可以处理数量级从几K至几T不等的数据,具有较高的开发效率和可维护性,还具有较强的通用性和跨平台性,这里就为大家分享几个不错的数据分析工具,需要的朋友可以参考下 Pyth ...

  8. python分类信息_用Python分析了 7 万款 App后,我们发现...

    原标题:用Python分析了 7 万款 App后,我们发现... 本文中使用 Scrapy 爬取了豌豆荚全网 70,000+ App ,并进行探索性分析. 写在前面:若对数据抓取部分不感兴趣,可以直接 ...

  9. python炫酷烟花表白源代码,用python画烟花的代码

    大家好,小编为大家解答python绘制烟花特定爆炸效果的问题.很多人还不知道python炫酷烟花表白源代码,现在让我们一起来看看吧! 1.放烟花的代码 放烟花的代码相关内容如下: 烟花其实可以看成由一 ...

  10. 游戏全面“入侵”生活:Python发布“酷跑+”计划

    ​ 导语 " 急速奔跑--享受生活中的美好时光!" --梦想 重磅消息!木木子今天又要给大家介绍一款新游戏啦! 期待不期待呀来我们先来看看是什么游戏让大家这么沸腾 ​ <天天 ...

最新文章

  1. .tar.gz mysql 安装_mysql tar.gz 版本 linux系统的安装-Go语言中文社区
  2. html邮件链接和锚点链接
  3. html5复合选择器,web前端练习31----Css,选择器(基本选择器,复合选择器,属性选择器,伪类,伪元素,优先级,雪碧图练习)...
  4. Java中的进程与线程
  5. WordPress按钮秒支付插件发布,支持微信支付,支付宝,银联,京东,苏宁,易宝支付...
  6. HDU - 1223 DP 分类
  7. Queue(队列)-Swift实现与广度优先搜索应用
  8. 学习cluster技术
  9. (@WhiteTaken)设计模式学习——组合模式
  10. SPOJ 104 Highways(最小生成树计数)
  11. C#--Winform开发常见注意事项
  12. Java服务优雅停机_微服务架构—优雅停机方案
  13. 第1周学习笔记:深度学习和pytorch基础
  14. Android:通过systrace进行性能分析及使用-详细
  15. java的正确学习姿势
  16. Ubuntu 16.04 LTS安装XDM下载神器
  17. C#编写的串口调试软件,下位机传过来的中文全是问号???
  18. 编程实现顺序表的基本操作
  19. 最全面java面试题集
  20. postfix安装记录四-防病毒

热门文章

  1. 系统集成项目管理工程师有什么用,你真的了解吗?
  2. (更新至v0.108)termux下载、安装教程 版本v0.88
  3. testbed 桩函数设置
  4. 8-思科防火墙:Cisco ASA uRPF运用
  5. ios python3.0编程软件_ios编程软件-7款学习Python编程的iPhone/iPad应用
  6. 中望CAD的引线标注格式怎么改_大神总结:CAD设计五个段位 你在哪个阶段?
  7. 项目管理-产品开发流程
  8. 获取上周第一天,最后一天
  9. Niubility!华为天才少年自制机械臂能给葡萄缝针
  10. 微服务网关选型,请收下我的膝盖!