我们在做接口测试时,有时会遇到涉及用例特别多的时候,每个用例都去手动调一遍,很费时费力,也是不现实的,这篇文章我们就解决下这种费时费力的情况.

一、业务需求

某所大学通信系共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一键生成接口正交试验用例相关推荐

  1. Python Pytest装饰器@pytest.mark.parametrize用例数据驱动(三)

    一.测试用例用excel管理,存放地址:C:\Users\wangli\PycharmProjects\Test\test\files\apiCase.xls 二.代码实现如下: 1.封装读取exce ...

  2. Python Pytest装饰器@pytest.mark.parametrize详解

    Pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化,类似DDT 如:@pytest.mark.parametrize('请求方式,接口地 ...

  3. Python Pytest装饰器@pytest.mark.parametrize多样参数化(二)

    Pytest中装饰器@pytest.mark.parametrize('参数名',list)可以实现测试用例参数化,类似DDT 1.第一个参数是字符串,多个参数中间用逗号隔开 2.第二个参数是list ...

  4. pytest装饰器实现批量造数

    最近的需求需要造1w多的数据,如何用Python代码实现批量造数呢?强大的pytest装饰器可以再次冲出江湖 今天要介绍的就是pytest-repeat,实现重复执行脚本的目的 1.首先安装插件pyt ...

  5. 开发者必备工具,一键生成接口文档、调用示例

    前言 开发中,接口文档很重要,特别是现在web开发都开始前后端分离了,更加需要一个好的接口文档. 那要怎么快速的出接口文档.调用示例.mock呢?如果太麻烦,很多人就不愿意去写了. 今天给大家介绍一个 ...

  6. Python叠加装饰器,三元表达,生成,调用,递归

    叠加多个装饰器的加载.运行分析 def deco1(func1): # func1 = wrapper2的内存地址def wrapper1(*args,**kwargs):print('正在运行=== ...

  7. python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...

    1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...

  8. 装饰器+依赖注入开发node后台接口

    前言  起因来源于最近在开发一个小网站的时候,突发奇想,想要使用node来自己开发后台接口,毕竟每一个前端都有一个全栈的梦想

  9. 搭建YApi接口管理平台+IDEA插件easyYapi一键生成接口动态发布到YApi平台

    文章目录 一.简介 二.YApi搭建 1.准备 2.可视化部署 3.浏览器访问 4.新建项目 5.获取项目的token 三.IDEA插件easyYapi 1.安装easyYapi 2.配置连接YApi ...

最新文章

  1. 【LeetCode从零单排】No15 3Sum
  2. 深度拷贝 java_Java深度拷贝方式和性能对比
  3. 冯山C语言3 15,冯山
  4. Codeforces-gym-101020 problem C. Rectangles
  5. 《Python Cookbook 3rd》笔记(3.12):基本的日期与时间转换
  6. 二叉树创建,遍历,叶子,深度
  7. 15.1 异常(异常的基本概念+自定义异常)
  8. IDEA查看Java源码技巧
  9. 刘帅嵌入式系统-MLA指令
  10. 【组合数学】指数型母函数(多重集排列问题)
  11. BZOJ2794 [Poi2012]Cloakroom [离线][DP]
  12. 为什么选择电阻式温度传感器呢
  13. 谈谈Python的Flask框架学习与福利分享
  14. 微信小程序 如何接入视频激励广告
  15. 【目标流畅阅读文献_语法篇】1.3简单句_动词时态
  16. 【R语言】时间序列案例:住宅销量预测的乘法季节模型
  17. android 股票 开发,Android版的股票行情K线图开发
  18. Catherine 成长记第一篇
  19. 如何学好iphone游戏开发
  20. 什么是模块化?模块化的好处

热门文章

  1. python2中xrange比range优点_【Python面试】 说说Python中xrange和range的区别?
  2. c++ new 数组_用Java实现JVM第八章《数组和字符串》
  3. linux 监控mysql脚本_Linux系统MySQL主从同步监控shell脚本
  4. 排序算法 —— 堆排序
  5. vue内检测是否有swiper_vue.js怎么用swiper
  6. 计算机应用技术工作项目是,论计算机应用技术在工程项目管理中的应用(原稿)...
  7. 江西省计算机应用基础对口高考复习,江西省对口高考计算机应用基础复习题(各章及综合练习)...
  8. python 子线程返回值_python-从线程返回值
  9. python 替换文本 通配符_使用通配符搜索和替换文本文件中的字符串
  10. 51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管