首页 > 其他分享 >pytest-fixture

pytest-fixture

时间:2024-08-14 11:55:49浏览次数:12  
标签:__ fix py fixture 用例 pytest

confest.py

confest.py可以理解成一个专门存放fixture的配置文件。
使用场景:当多个测试用例文件test_*.py的所有用例都需要使用同一个功能作为前置操作时,可以将其写入confest.py文件实现功能的共享。
注意事项:

  • pytest会默认读取conftest.py里面的所有fixture,不需要手动import
  • conftest.py 文件名称是固定的,不能改动
  • conftest.py只对同一个package下的所有测试用例生效
  • 不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py

一、fixutre优势

  • 命名方式灵活,不局限于 setup 和teardown 这几个命名
  • conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture
  • scope="module" 可以实现多个.py 跨文件共享前置
  • scope="session" 可以实现多个.py 跨文件使用一个fixture来完成多个用例

二、fixture函数

@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
def test():
    print("fixture初始化的参数列表")

scope:参数有四种,分别是'session'、'module'、'class'、'function',默认为function。
一个.py文件为一个module,module参数是每个module的所有test只运行一次; class是每个class的所有test只运行一次;function是每个test都运行;
若是多个.py文件共用一个功能时,可以使用session参数。session是每个session只运行一次
autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture

三、Fixture的调用方法

1.函数或类里面方法直接传fixture的函数参数名称

定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要以test开头,跟用例区分开。
fixture是有返回值的,没有返回值默认为None。
用例调用fixture的返回值,直接就是把fixture的函数名称当做变量名称。

2.使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

import pytest


@pytest.fixture()
def fix_1():
    print("fixture--fix1")


@pytest.fixture()
def fix_2():
    print("fixture--fix2")


def test1(fix_1):
    assert 3 == 3


@pytest.mark.usefixtures("fix_1", "fix_2")
def test2():
    print("用例1:调用fixture")


@pytest.mark.usefixtures("fix_1")
@pytest.mark.usefixtures("fix_2")
def test3():
    """
    叠加usefixtures:如果一个方法或者一个class用例想要同时调用多个fixture,
    可以使用@pytest.mark.usefixture()进行叠加。
    注意叠加顺序,先执行的放底层,后执行的放上层。
    :return:
    """
    print("用例2:叠加userfixture")

if __name__ == '__main__':
    pytest.main("-s xxxx.py")

结果如下:

============================= test session starts =============================
collecting ... collected 3 items

xxxx.py::test1 fixture--fix1
PASSED                                                    [ 33%]
xxxx.py::test2 fixture--fix1
fixture--fix2
PASSED                                                    [ 66%]用例1:调用fixture

xxxx.py::test3 fixture--fix2
fixture--fix1
PASSED                                                    [100%]用例2:叠加userfixture
============================== 3 passed in 0.03s ==============================

注意:usefixtures与传fixture区别
如果需要用到return出来的参数,只能使用fixture传参数。
如果不需要用到return出来的参数,两种方式都可以。

fixture自动使用autouse=True

当用例很多的时候,每次都传这个参数,会很麻烦。fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了。

import pytest


@pytest.fixture(autouse=True)
def fix_3():
    print("====auto===,自动执行该fix_3")


def test4():
    print("用例4:执行前自动执行fixture")


if __name__ == '__main__':
    pytest.main("-s xxxx.py")

结果如下:

============================= test session starts =============================
collecting ... collected 1 item

xxxx.py::test4 ====auto===,自动执行该fix_3
PASSED                                                    [100%]用例4:执行前自动执行fixture


============================== 1 passed in 0.02s ==============================

四、fixture之yield

前面的都是setup的操作,那么现在就来讲下teardown是怎么实现的。

标签:__,fix,py,fixture,用例,pytest
From: https://www.cnblogs.com/qev211/p/18358603

相关文章

  • pytest-setup/teardown
    Pytest提供了类似unittest的setup、teardown的方法,并且还超过四个,一共有十种模块级别:setup_module、teardown_module---模块前置setup_module和后置teardown_module,放类外生效,整个.py模块开始前和结束后各调用一次函数级别:setup_function、teardown_function---函数前置setup_......
  • 解决Pytest UnknownMarkWarning: Unknown pytest.mark.single - is this a typo?
    解决PytestUnknownMarkWarning:Unknownpytest.mark.single-isthisatypo?出现截图所示问题前提:1.项目中使用了mark标记:@pytest.mark.single2.同时项目中包含pytest.ini文件并进行了pytest.ini配置运行项目运行时报出截图所示Warning解决方法:切换运行项......
  • 为什么“pytest_addoption”钩子不使用配置的“testpaths”运行?
    摘要:我正在尝试使用pytest_addoption功能设置自定义pytest选项。但是当在使用所述自定义选项时尝试使用project.toml文件配置我的项目时,我得到出现以下错误:$pytest--foofooERROR:usage:pytest[options][file_or_dir][file_or_dir]......
  • 配置 Pytest 以跨多个项目目录查找测试
    我希望使用pytest对项目中的所有AWSLambda代码进行单元测试。由于我必须配置目录结构才能与基础设施即代码工具一起使用,每个Lambda都位于它自己的CloudFormation堆栈中,因此我有一个相当非标准的目录结构。我无法让pytest在我的所有Lambda函数中运行所有测试-理想......
  • Pytest 找不到我的设置目录
    我尝试启动pytest,但pytest找不到设置文件我在virtualenv中Python3.11.9和pytest8.3.2ImportError:Nomodulenamed'drf.settings'pytest-djangocouldnotfindaDjangoproject(nomanage.pyfilecouldbefound).Youmustexplicitlyadd......
  • Tox 中的 Pytest - 找不到测试,`ImportError`
    我有一个具有当前结构的包:my_package|-pyproject.toml|-poetry.lock|-tox.ini|-my_package||-__init__.py||-my_package.py|-tests|-test_my_package.pypyproject.toml为pytest配置如下:[tool.pytest.ini_option......
  • 如何在 pytest 的参数化中传递函数名称以及如何在测试用例中使用它?
    在下面的脚本中,我想参数化函数调用RegisterClientCabinMovementDetection(x)和RegisterClientOccupantInSeatDetection(x)(在脚本中以粗体显示)等等...有没有办法在pytest中参数化函数?@[email protected]('Qf,预期',[(UNDEFINED,"无效"),(INPROGR......
  • 从pytest源码的角度分析pytest工作原理
    从pytest源码的角度分析pytest工作原理从pytest源代码的角度来分析其工作原理,我们需要关注几个关键的部分,特别是pytest的启动过程以及测试的收集与执行。下面是基于pytest源代码的一个高层次的概述。 pytest的启动过程命令行解析:pytest 的入口点是 conftest.p......
  • Pycharm 设置 yaml 格式接口测试用例模板 (python+pytest+yaml)
    前言初次编写的伙伴们可能对yaml格式不太熟悉,自己写yaml用例的时候,总是格式对不齐啊记不住设定好的关键字啊等等等琐事是我们可以在pycharm上设置用例模块,通过快捷方式调用出对应的模块,达到高效写用例的目的。 pycharm操作集:1、File-Settings(快捷键Ctrl+Alt+S) 2、Live......
  • 在课堂上使用 JWT 令牌编写 pytest
    我有一个类TestSecured,其中有一些方法可以获取受保护的端点,因此您需要一个jwt来发出请求。我正在尝试优化我的测试类,这样我就不需要登录过程3次,而只需要1次,并在我的3个测试方法中使用相同的令牌。@pytest.mark.usefixtures("client","auth","setup_user_and......