Pytest装饰器@pytest.mark.parametrize一键生成接口正交试验用例
我们在做接口测试时,有时会遇到涉及用例特别多的时候,每个用例都去手动调一遍,很费时费力,也是不现实的,这篇文章我们就解决下这种费时费力的情况.
一、业务需求
某所大学通信系共2个班级,刚考完某一门课程,想通过“性别”、“班级”和“成绩”这三个查询条件对通信系这门课程的成绩分布,男女比例或班级比例进行人员查询:
根据“性别”=“男,女”进行查询
根据“班级”=“一班,二班”查询
根据“成绩”=“及格,不及格”查询
按照传统设计——全部测试
分析上述测试需求,有3个被测元素,被测元素我们称为因素,每个因素有两个取值,我们称之为水平值,所以全部测试用例个数是2*2*2=8,参见下表
序号 |
性别 |
班级 |
成绩 |
1 |
女 |
1班 |
及格 |
2 |
女 |
1班 |
不及格 |
3 |
女 |
2班 |
及格 |
4 |
女 |
2班 |
不及格 |
5 |
男 |
1班 |
及格 |
6 |
男 |
1班 |
不及格 |
7 |
男 |
2班 |
及格 |
8 |
男 |
2班 |
不及格 |
如果有10个因素,每个因素有2个水平取值,那么我们需要组合2*2*2*2*2*2*2*2*2*2=1024个用例,这样去实现是不可能的,大家是如何处理这种情况的?
二、利用pytest装饰器@pytest.mark.parametrize实现快速生成所有正交测试用例可以解决这种问题,我们看到脚本生成的用例和上面手动列的用例完全一样,这样我们就可以根据需求中因数和因数水平值,快速生成所有正交测试用例
@pytest.mark.parametrize('因数1字段',['因数1的水平值1','因数1的水平值2'])
@pytest.mark.parametrize('因数2字段',['因数2的水平值1','因数2的水平值2'])
……
这样有几个因素就写几个装饰器,然后每个装饰器里分别放入对应因数的水平值,组成不同的测试用例data,一次调用可出所有测试用例结果,可实现快速接口测试,是不是很方便呢。
import pytestclass Test(object):@pytest.mark.parametrize('sex',['男','女'])@pytest.mark.parametrize('classes ', ['一班','二班'])@pytest.mark.parametrize('score', ['及格', '不及格'])def test(self,sex,classes,score):data={'sex':'','classes':'','score':''}data['sex']=sexdata['classes'] = classesdata['score'] = scoreprint(data)
if __name__=="__main__":pytest.main(["-s","test02.py"])"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test02.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 8 itemstest02.py {'classes': '一班', 'score': '及格', 'sex': '男'}
.{'classes': '一班', 'score': '及格', 'sex': '女'}
.{'classes': '二班', 'score': '及格', 'sex': '男'}
.{'classes': '二班', 'score': '及格', 'sex': '女'}
.{'classes': '一班', 'score': '不及格', 'sex': '男'}
.{'classes': '一班', 'score': '不及格', 'sex': '女'}
.{'classes': '二班', 'score': '不及格', 'sex': '男'}
.{'classes': '二班', 'score': '不及格', 'sex': '女'}
.============================== 8 passed in 0.26s ==============================Process finished with exit code 0
Pytest装饰器@pytest.mark.parametrize一键生成接口正交试验用例相关推荐
- Python Pytest装饰器@pytest.mark.parametrize用例数据驱动(三)
一.测试用例用excel管理,存放地址:C:\Users\wangli\PycharmProjects\Test\test\files\apiCase.xls 二.代码实现如下: 1.封装读取exce ...
- Python Pytest装饰器@pytest.mark.parametrize详解
Pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化,类似DDT 如:@pytest.mark.parametrize('请求方式,接口地 ...
- Python Pytest装饰器@pytest.mark.parametrize多样参数化(二)
Pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化,类似DDT 1.第一个参数是字符串,多个参数中间用逗号隔开 2.第二个参数是list ...
- pytest装饰器实现批量造数
最近的需求需要造1w多的数据,如何用Python代码实现批量造数呢?强大的pytest装饰器可以再次冲出江湖 今天要介绍的就是pytest-repeat,实现重复执行脚本的目的 1.首先安装插件pyt ...
- 开发者必备工具,一键生成接口文档、调用示例
前言 开发中,接口文档很重要,特别是现在web开发都开始前后端分离了,更加需要一个好的接口文档. 那要怎么快速的出接口文档.调用示例.mock呢?如果太麻烦,很多人就不愿意去写了. 今天给大家介绍一个 ...
- Python叠加装饰器,三元表达,生成,调用,递归
叠加多个装饰器的加载.运行分析 def deco1(func1): # func1 = wrapper2的内存地址def wrapper1(*args,**kwargs):print('正在运行=== ...
- python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...
1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...
- 装饰器+依赖注入开发node后台接口
前言 起因来源于最近在开发一个小网站的时候,突发奇想,想要使用node来自己开发后台接口,毕竟每一个前端都有一个全栈的梦想
- 搭建YApi接口管理平台+IDEA插件easyYapi一键生成接口动态发布到YApi平台
文章目录 一.简介 二.YApi搭建 1.准备 2.可视化部署 3.浏览器访问 4.新建项目 5.获取项目的token 三.IDEA插件easyYapi 1.安装easyYapi 2.配置连接YApi ...
最新文章
- 【LeetCode从零单排】No15	 3Sum
- 深度拷贝 java_Java深度拷贝方式和性能对比
- 冯山C语言3 15,冯山
- Codeforces-gym-101020 problem C. Rectangles
- 《Python Cookbook 3rd》笔记(3.12):基本的日期与时间转换
- 二叉树创建,遍历,叶子,深度
- 15.1 异常(异常的基本概念+自定义异常)
- IDEA查看Java源码技巧
- 刘帅嵌入式系统-MLA指令
- 【组合数学】指数型母函数(多重集排列问题)
- BZOJ2794 [Poi2012]Cloakroom [离线][DP]
- 为什么选择电阻式温度传感器呢
- 谈谈Python的Flask框架学习与福利分享
- 微信小程序 如何接入视频激励广告
- 【目标流畅阅读文献_语法篇】1.3简单句_动词时态
- 【R语言】时间序列案例:住宅销量预测的乘法季节模型
- android 股票 开发,Android版的股票行情K线图开发
- Catherine 成长记第一篇
- 如何学好iphone游戏开发
- 什么是模块化?模块化的好处
热门文章
- python2中xrange比range优点_【Python面试】 说说Python中xrange和range的区别?
- c++ new 数组_用Java实现JVM第八章《数组和字符串》
- linux 监控mysql脚本_Linux系统MySQL主从同步监控shell脚本
- 排序算法 —— 堆排序
- vue内检测是否有swiper_vue.js怎么用swiper
- 计算机应用技术工作项目是,论计算机应用技术在工程项目管理中的应用(原稿)...
- 江西省计算机应用基础对口高考复习,江西省对口高考计算机应用基础复习题(各章及综合练习)...
- python 子线程返回值_python-从线程返回值
- python 替换文本 通配符_使用通配符搜索和替换文本文件中的字符串
- 51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管