国外网站推广方法,ui设计包括哪些,濮阳网格化app,全国十大家装公司排名 返回目录
1 pytest自动化测试 - pytest夹具的基本概念 夹具可以为测试用例提供资源(测试数据)、执行预置条件、执行后置条件#xff0c;夹具可以是函数、类或模块#xff0c;使用pytest.fixture装饰器进行标记。
1.1 夹具的作用范围 夹具的作用范围#xff1a;
… 返回目录
1 pytest自动化测试 - pytest夹具的基本概念 夹具可以为测试用例提供资源(测试数据)、执行预置条件、执行后置条件夹具可以是函数、类或模块使用pytest.fixture装饰器进行标记。
1.1 夹具的作用范围 夹具的作用范围
函数范围夹具默认范围是函数级即每个测试函数执行时都会执行一遍夹具的前置和后置条件类范围夹具的前置条件在类的第一个测试函数执行前执行在类的最后一个测试函数执行后执行。模块范围夹具的前置条件在模块的第一个测试函数执行前执行在模块的最后一个测试函数执行后执行。会话范围夹具的前置条件在测试会话开始时执行一次后置条件在测试会话结束时执行一次。
1.1.1 函数范围的夹具 默认(未指定参数)时是函数级的范围。
import pytestpytest.fixture
def setup_resource():# 准备资源resource This is a test resourceprint(\n *65)print(BEGIN: 用例预置条件.)yield resource# 清理资源print(END: 用例后置条件.)def test_with_fixture(setup_resource):print(第一个用例开始.center(70))assert test resource in setup_resourceprint(第一个用例结束.center(70))def test_another_with_fixture(setup_resource):print(第二个用例开始.center(70))assert len(setup_resource) 10print(第二个用例结束.center(70))yield前的语句是前置条件yield后的语句是后置条件。夹具中的前置条件和后置条件在每个测试用例中都会执行。
输出 test session starts
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_subf_fixture_001.py BEGIN: 用例预置条件.第一个用例开始 第一个用例结束
.END: 用例后置条件.
BEGIN: 用例预置条件.第二个用例开始 第二个用例结束
.END: 用例后置条件. 2 passed in 0.01s 从报文可以看到夹具中的前置条件在用例开始前执行后置条件在用例执行结束时执行。
1.1.2 类范围的夹具 通过参数pytest.fixture(scopeclass)可以指定夹具的类范围
import pytestpytest.fixture(scopeclass)
def setup_class_resource():resource Class resourceprint(\n * 65)print(【预置条件】)yield resourceprint(【后置条件】.)class TestClassWithFixture:def test_class_fixture(self, setup_class_resource):print(第1个测试用例开始.)assert Class in setup_class_resourceprint(第1个测试用例结束.\n)def test_another_class_fixture(self, setup_class_resource):print(第2个测试用例开始.)assert len(setup_class_resource) 10print(第2个测试用例结束.)输出 test session starts
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_fixture_class_001.py 【预置条件】
第1个测试用例开始.
第1个测试用例结束..第2个测试用例开始.
第2个测试用例结束.
.【后置条件】. 2 passed in 0.01s 1.1.3 模块范围的夹具 前置条件在模块第一个测试函数执行前执行后置条件在最后一个函数执行后执行。
import pytestpytest.fixture(scopemodule)
def setup_module_resource():resource Module resourceprint(\n * 65)print(【预置条件】)yield resourceprint(【后置条件】)def test_module_fixture1(setup_module_resource):print(第1个用例开始)assert Module in setup_module_resourceprint(第1个用例结束\n)def test_module_fixture2(setup_module_resource):print(第2个用例开始)assert len(setup_module_resource) 10print(第2个用例结束\n)#这个函数函数没有使用夹具
def test_module_fixture3():print(第3个用例开始)assert len(测试不用夹具的函数是否会干扰) 10print(第3个用例结束)输出 test session starts
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 3 itemstest_ft_fixture_module_001.py 【预置条件】
第1个用例开始
第1个用例结束.第2个用例开始
第2个用例结束.第3个用例开始
第3个用例结束
.【后置条件】 3 passed in 0.01s 说明模块中即使存在测试函数没有使用夹具也不会干扰夹具中的预置条件和后置条件预置条件始终保存在模块开始执行前执行后续条件在模块的所有函数执行完时执行。
1.1.4 会话范围的夹具 下面的示例探索模块范围和会话范围的区别其中test_ft_fixture_module_001是上一个示例中的模块范围的测试代码使用from test_ft_fixture_module_001 import *将模块的所有夹具和用例导入到本用例。
import pytest
from test_ft_fixture_module_001 import *pytest.fixture(scopesession)
def setup_session_resource():resource Session resourceprint(\n * 65)print(【会话-前置条件】)yield resourceprint(【会话-后置条件】)def test_session_fixture1(setup_session_resource):print(会话-第1个用例开始)assert Session in setup_session_resourceprint(会话-第1个用例结束\n)def test_session_fixture2(setup_session_resource):print(会话-第2个用例开始)assert len(setup_session_resource) 10print(会话-第2个用例结束\n)def test_session_fixture3():print(会话-第3个用例开始)assert len(测试没有使用夹具的第3个用例对后置条件的影响) 10print(会话-第3个用例结束)输出 test session starts
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 6 itemstest_ft_fixture_session_001.py 【模块-预置条件】
模块-第1个用例开始
模块-第1个用例结束.模块-第2个用例开始
模块-第2个用例结束.模块-第3个用例开始
模块-第3个用例结束
.【会话-前置条件】
会话-第1个用例开始
会话-第1个用例结束.会话-第2个用例开始
会话-第2个用例结束.会话-第3个用例开始
会话-第3个用例结束
.【模块-后置条件】
【会话-后置条件】 6 passed in 0.02s 从执行结果来看模块的预置条件在最开始执行紧随其后的是导入的模块中的测试函数而会话的前置条件只在当前模块执行前才执行后置条件是先执行了模块的后置条件再执行会话的后置条件 作者声明本文用于记录和分享作者的学习心得可能有部分文字或示例来源自豆包AI由于本人水平有限难免存在表达错误欢迎留言交流和指教 Copyright © 2022~2025 All rights reserved. 返回目录