广告
返回顶部
首页 > 资讯 > 精选 >pytest fixtures函数及测试函数的参数化实例分析
  • 321
分享到

pytest fixtures函数及测试函数的参数化实例分析

2023-06-30 17:06:34 321人浏览 泡泡鱼
摘要

这篇文章主要介绍“pytest fixtures函数及测试函数的参数化实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytest fixtures函数及测试函数的参数化实

这篇文章主要介绍“pytest fixtures函数及测试函数的参数化实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytest fixtures函数及测试函数的参数化实例分析”文章能帮助大家解决问题。

    pytest fixtures测试函数参数化

    Pytest会在以下几个级别启用测试参数化:

    • pytest.fixture(),可以对fixture函数进行参数化。

    • @pytest.mark.parametrize,可以在测试函数或类中定义多组参数和fixture。

    • pytest_generate_tests,可以自定义参数化方案或扩展。

    一、@pytest.mark.parametrize:参数化测试函数

    1. 常规用法

    对测试函数的参数进行参数化,直接使用内置的装饰器pytest.mark.parameterized即可。

    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

    从代码里可以看出,在装饰器里定义了三个不同的元组。我们把("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)])
    拆开看:

    • "test_input,expected":这个字符串里定义了2个参数,test_input和expected。

    • ("3+5", 8), ("2+4", 6), ("6*9", 42):这里3个元组,没个元组里有2个元素,依次序分别对应test_input和expected。

    • 3个元组外层的[]:列表里就是参数化具体的传参了,因为里面传了3个不同的元组,所以测试函数test_eval会分别执行3次。

    ============================= test session starts =============================platfORM win32 -- python 3.9.4, pytest-6.2.3, py-1.10.0, pluggy-0.13.1rootdir: D:\PyCharmProjects\wms-api\interface, configfile: pytest.inicollected 3 itemstest_module1.py ..Fdemo\test_module1.py:3 (test_eval[6*9-42])54 != 42Expected :42Actual   :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) == expectedE       AssertionError: assert 54 == 42E        +  where 54 = eval('6*9')test_module1.py:6: AssertionError

    运行结果可以看到最后一次失败了,因为第三次运行测试函数取的参数是 ("6*9", 42),54不等于42,所以断言失败。

    2. 在参数化中标记单个测试实例

    在参数化中标记单个测试实例,比如之前提到过的mark.xfail,这个可以标记测试函数为失败。那么在参数化中,如果想让其中的某个参数运行
    的时候测试失败,就可以这样用:

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

    运行一下:

    test_module1.py                                                       [100%]======================== 2 passed, 1 xfailed in 0.05s =========================..x
    3. 多个参数化组合,笛卡尔积

    如果在测试函数上加了多个参数化装饰器,那么得到的参数组合是一个笛卡尔积:

    import pytest@pytest.mark.parametrize("x", [0, 1])@pytest.mark.parametrize("y", [2, 3])def test_foo(x, y):    print("\nx:", x)    print("y:", y)

    应该会组合成4组数据x=0/y=2, x=1/y=2, x=0/y=3, 和x=1/y=3,测试函数执行4次:

    test_module1.py .x: 0y: 2.x: 1y: 2.x: 0y: 3.x: 1y: 3                                                     [100%]============================== 4 passed in 0.01s ==============================

    二、用钩子函数pytest_generate_tests example拓展

    如果有些场景需要动态的确定参数或者fixture的使用范围,那么可以使用pytest_generate_tests这个钩子函数,该函数会在收集测试函数时候被调用。

    通过传入的metafunc对象,可以检查请求测试函数的上下文,还可以进一步的调用metafunc.parameterize()来实现参数化。

    举例,有个测试函数需要接受输入的字符串作为参数,而且通过pytest命令行获取到,那么就要编写一个获取参数的fixture函数来给测试函数调用。

    # content of test_strings.pydef test_valid_string(stringinput):    assert stringinput.isalpha()

    新建conftest.py文件,fixture函数写在这里:

    # content of conftest.pydef pytest_addoption(parser):    parser.addoption(        "--stringinput",        action="append",        default=[],        help="list of stringinputs to pass to test functions",    )def pytest_generate_tests(metafunc):    if "stringinput" in metafunc.fixturenames:        metafunc.parametrize("stringinput", metafunc.config.getoption("stringinput"))

    现在用命令行方式来运行这个测试函数:

    pytest -q --stringinput="hello" --stringinput="world" test_strings.py

    会运行2次。

    D:\PycharmProjects\wms-api\interface\demo>pytest -q --stringinput="hello" --stringinput="world" test_strings.py..                                                                                                                                                                     [100%]2 passed in 0.01s

    再换个输入参数,让测试函数失败:

    pytest -q --stringinput="!" test_strings.py

    FAILED test_strings.py::test_valid_string[!] - AssertionError: assert False1 failed in 0.04s

    如果没有字符串输入,那么测试函数它将被跳过。因为metafunc.parameterize()被调用时&#xff0c;传过去的是一个列表:

    pytest -q -rs test_strings.py

    SKIPPED [1] test_strings.py: Got empty parameter set ['stringinput'], function test_valid_string at $REGENDOC_TMPDIR/test_strings.py:21 skipped in 0.12s

    注意,在调用metafunc时, 如果使用不同的参数集进行多次参数化,这些参数集上的所有参数名称都不能重复,否则将会报错。

    关于“pytest fixtures函数及测试函数的参数化实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: pytest fixtures函数及测试函数的参数化实例分析

    本文链接: https://www.lsjlt.com/news/330555.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • pytest fixtures函数及测试函数的参数化实例分析
      这篇文章主要介绍“pytest fixtures函数及测试函数的参数化实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytest fixtures函数及测试函数的参数化实...
      99+
      2023-06-30
    • pytest fixtures函数及测试函数的参数化解读
      目录pytest fixtures测试函数参数化一、@pytest.mark.parametrize:参数化测试函数1. 常规用法2. 在参数化中标记单个测试实例3. 多个参数化组合...
      99+
      2022-11-11
    • pytest实现测试用例参数化
      背景 本文总结pytest的测试用例参数化。 说明 软件测试中,输入相应值,检查期望值,是常见测试方法。 在自动化测试中,一个测试用例对应一个测试点,通常一组测试数据无法完全覆盖...
      99+
      2022-11-12
    • Python的pytest参数化实例分析
      今天小编给大家分享一下Python的pytest参数化实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。源代码分析def...
      99+
      2023-06-26
    • pytest如何实现测试用例参数化
      小编给大家分享一下pytest如何实现测试用例参数化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!说明软件测试中,输入相应值,检查期望值,是常见测试方法。在自动化...
      99+
      2023-06-14
    • C++函数参数实例分析
      这篇文章主要介绍了C++函数参数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++函数参数实例分析文章都会有所收获,下面我们一起来看看吧。一、函数参数的默认值C++ 中可以在函数声明时为参数提供一个默...
      99+
      2023-06-30
    • Python函数参数实例分析
      本文小编为大家详细介绍“Python函数参数实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python函数参数实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.函数参数# 1.位置参数...
      99+
      2023-06-28
    • 函数参数的示例分析
      这篇文章将为大家详细讲解有关函数参数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。函数的参数(实参和形参):形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,...
      99+
      2023-06-15
    • ES6函数自带参数实例分析
      本篇内容介绍了“ES6函数自带参数实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   ES6函数...
      99+
      2022-10-19
    • python+pytest自动化测试函数测试类测试方法的封装
      目录前言一、测试用例封装的一般规则三、测试类/方法的封装四、示例代码总结前言 今天呢,笔者想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才...
      99+
      2022-11-11
    • Python函数与参数实例代码分析
      这篇文章主要介绍了Python函数与参数实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python函数与参数实例代码分析文章都会有所收获,下面我们一起来看看吧。函数...
      99+
      2022-10-19
    • PHP中函数参数的示例分析
      小编给大家分享一下PHP中函数参数的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!PHP 函数参数可以通过参数向函数传递...
      99+
      2022-10-19
    • Python中函数的参数类型实例分析
      今天小编给大家分享一下Python中函数的参数类型实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、Python的函...
      99+
      2023-07-02
    • 软件测试之MySQL数据库函数的示例分析
      这篇文章将为大家详细讲解有关软件测试之MySQL数据库函数的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一.MySQL函数1.数学函数PI()  #返...
      99+
      2022-10-18
    • ES6函数参数必须的示例分析
      小编给大家分享一下ES6函数参数必须的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!函数参数必须ES6中可以给参数指定默...
      99+
      2022-10-19
    • JS中函数参数传递与同名参数的示例分析
      这篇文章主要为大家展示了“JS中函数参数传递与同名参数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS中函数参数传递与同名参数的示例分析”这篇文章吧...
      99+
      2022-10-19
    • vue中函数配置项watch及函数$watch的示例分析
      这篇文章主要为大家展示了“vue中函数配置项watch及函数$watch的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中函数配置项watch及函...
      99+
      2022-10-19
    • Redis的zmalloc函数实例分析
      这篇“Redis的zmalloc函数实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
      99+
      2022-10-19
    • C++信号处理sigaction函数的测试分析
      本篇内容主要讲解“C++信号处理sigaction函数的测试分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++信号处理sigaction函数的测试分析”吧!运行结果如图到此,相信大家对“C...
      99+
      2023-06-04
    • C语言中数组作为函数参数的示例分析
      这篇文章主要介绍了C语言中数组作为函数参数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数组作为函数参数1 冒泡排序函数的错误设计...
      99+
      2022-10-19
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作