Pytest(8)parametrize参数化[通俗易懂]

Pytest(8)parametrize参数化[通俗易懂]前言当某个接口中的一个字段,里面规定的范围为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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165148.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • post跨域get不跨域_request获取请求的域名

    post跨域get不跨域_request获取请求的域名转载博客一、当只有addRequestProperty的时候[html]viewplaincopyprint?URL url = new URL(“http://localhost:8080/net/listnets.jsp”);              URLConnection connection = url.openConnection();              conne

    2022年9月10日
    2
  • 周末web前端练习

    在CSS样式定义中,以下哪种RGB颜色值是Web安全色?A]#111111B]#222222C]#333333D]#444444答案:http://hovertree.com/tiku

    2021年12月22日
    48
  • AJAX学习(一)AJAX基础

    AJAX学习(一)AJAX基础AJAX学习(一)AJAX基础举一个栗子AJAX请求的五个步骤AJAX详解Jquery中的ajaxajax常用的格式ajax在网络应用开发上运用很广泛,它能够达到局部刷新的效果,也就是页面的某一个组件或功能上进行客户端和服务端的数据交互来实现数据的刷新,而不需要整个页面重载,这样可以提升用户的使用感,缩短等待的时间。ajax的可以用的地方很多,因此是一个很重要的知识点。所以在此写下有关于我对a…

    2022年10月19日
    2
  • DotNet开发的微商分销系统源码,微信三级分销系统源码

    DotNet开发的微商分销系统源码,微信三级分销系统源码DotNet开发的微商分销系统源码,微信三级分销系统源码开发环境:vs2017+sqlserver2012部署环境:iis7,.netframework4.0,应用程序池为4.0经典模式。安装请注意:1、将安装目录:UI.Web拷贝到服务器上,搭建站点;1、打开网站xxx.com域名/Installer/Default.aspx,按照安装提示一步一步走(傻瓜式的安装)2、安装完毕后,请打开web.config文件,找到节点:CurDomainUrl,设置vlaue的值…

    2022年5月17日
    35
  • Android 自定义View 三板斧之三——重写View来实现全新控件

    Android 自定义View 三板斧之三——重写View来实现全新控件

    2021年9月13日
    50
  • csgo新皮肤预告2021_csgo开箱怎么提现

    csgo新皮肤预告2021_csgo开箱怎么提现最新CSGO国服能取回皮肤的国内开箱网站大全incsgo可直接取回最好的国内CSGO饰品皮肤开箱网站官方链接:www.incsgo.gg注册登录自动免费获得$1.00美金取回状态:直接取回优惠码:csgogo(充值使用csgogo可增加5%充值金额)skinsdog狗网CSGO饰品皮肤开箱网站可直接取回官方链接:skinsdog.cc注册登录自动免费获得$0.8美金取回状态:直接取回优惠码:csgogo(注册使用送0.8美金)88skins国内CSGO.

    2022年10月5日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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