pytest parametrize fixture_参数化方法

pytest parametrize fixture_参数化方法前言当某个接口中的一个字段,里面规定的范围为1-5,你5个数字都要单独写一条测试用例,就太麻烦了,这个时候可以使用pytest.mark.parametrize装饰器可以实现测试用例参数化。官方示

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

当某个接口中的一个字段,里面规定的范围为1-5,你5个数字都要单独写一条测试用例,就太麻烦了,这个时候可以使用pytest.mark.parametrize装饰器可以实现测试用例参数化。
 

官方示例

下面是一个典型的范例,检查特定的输入所期望的输出是否匹配:

# test_expectation.py 
import pytest 

@pytest.mark.parametrize("test_input, expected", [("3+5", 8), ("2+4", 6), ("6*9", 42),]) 
def test_eval(test_input, expected): 
  assert eval(test_input) == expected

测试用例传参需要用装饰器@pytest.mark.parametrize,里面写两个参数

  • 第一个参数类型是字符串,多个参数中间用逗号隔开,这里填写的就是参数化的字段
  • 第二个参数类型是list,多组数据用元祖类型,这里填写的就是参数化的数据,通常我们把数据都会存放在yaml或者json文件中

装饰器@parametrize定义了三组不同的(test_input, expected)数据,test_eval则会使用这三组数据执行三次:

test_1.py::test_eval[3+5-8] 
test_1.py::test_eval[2+4-6] 
test_1.py::test_eval[6*9-42] PASSED                                       [ 33%]PASSED                                       [ 66%]FAILED                                      [100%]
test_1.py:10 (test_eval[6*9-42])
54 != 42

Expected :42
Actual   :54
<Click to see difference>

test_input = '6*9', expected = 42

    @pytest.mark.parametrize("test_input, expected", [("3+5", 8), ("2+4", 6), ("6*9", 42),])
    def test_eval(test_input, expected):
>       assert eval(test_input) == expected
E       assert 54 == 42

test_1.py:13: AssertionError

 

参数组合(笛卡尔积)

可以对一个函数使用多个parametrize的装饰器,这样多个装饰器的参数会组合进行调用:

import pytest 

@pytest.mark.parametrize("x", [0, 1]) 
@pytest.mark.parametrize("y", [2, 3]) 
def test_foo(x, y): 
  print("测试数据组合:x->%s, y->%s" % (x, y))

测试结果

collecting ... collected 4 items

test_example.py::test_foo[2-0] PASSED                                    [ 25%]测试数据组合:x->0, y->2

test_example.py::test_foo[2-1] PASSED                                    [ 50%]测试数据组合:x->1, y->2

test_example.py::test_foo[3-0] PASSED                                    [ 75%]测试数据组合:x->0, y->3

test_example.py::test_foo[3-1] PASSED                                    [100%]测试数据组合:x->1, y->3
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166352.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JDK 1.8 Stream Collectors groupingBy 例子[通俗易懂]

    JDK 1.8 Stream Collectors groupingBy 例子[通俗易懂]在这篇文章中,我们将向您展示如何使用java8 Stream Collectors 对列表分组,计数,求和和排序。1.GroupBy,CountandSort1.1Groupbya List anddisplaythetotalcountofit.(按列表分组,并显示其总数)Java8Example1.javapackagecom.mkyong.java8;i…

  • C语言之数组反转

    C语言之数组反转数组反转是数组常见操作。大概来写一写数组反转添加上自己的理解注释。#include<stdio.h>#defineN6intmain(){inta[N]={0,1,2,3,4,5};inti;intt;intj;//反转算法for(i=0;i<N/2;i++){t=a[i];a[i]=a[N-1-i];a[N-1-i]=t;//遍历输出,每对换一对数值就打印一次数组

  • vue路由懒加载_vue路由原理怎么回答

    vue路由懒加载_vue路由原理怎么回答路由懒加载能够提高页面的加载速度,不过使用也得看场合。有时候需要懒加载,提升首页加载速度,一般是页面层级较为复杂的时候。大家看一下不加代码分割浏览器加载的文件。 这里蓝色部分是webpack自动分割出来的,当修改业务js时候manifest和vendor是不会改变的,浏览器直接在缓存中提取。会变的是app.js。如果不采用路由分割会是什么效果呢。所有的代码都打包到app.js中,如果项目巨大,那

  • SXSSFWorkbook 转 InputStream「建议收藏」

    SXSSFWorkbook 转 InputStream「建议收藏」publicstaticInputStreamworkbookConvertorStream(SXSSFWorkbookworkbook){InputStreamin=null;try{//临时缓冲区ByteArrayOutputStreamout=newByteArrayOutputStream();…

  • 矩阵行列式的几何意义是什么_矩阵的几何意义和物理意义

    矩阵行列式的几何意义是什么_矩阵的几何意义和物理意义矩阵行列式的几何意义 行列式的定义: 行列式是由一些数据排列成的方阵经过规定的计算方法而得到的一个数。当然,如果行列式中含有未知数,那么行列式就是一个多项式。它本质上代表一个数值,这点请与矩阵区别开来。矩阵只是一个数表,行列式还要对这个数表按照规则进一步计算,最终得到一个实数、复数或者多项式。 一阶行列式 (注意不是绝对值) …

    2022年10月30日
  • apk 查看签名,以及apk签名方法

    apk 查看签名,以及apk签名方法1、查看apk签名    jarsigner-verify-verbose-certsout/target/product/hq6735_65u_b1p_l1/system/app/FineOSSystemManager/FineOSSystemManager.apk2、添加签名    1.找到系统签名文件,文件路径:在源码的\build\targe

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号