Python Pytest前置setup和后置teardown详解

本文详细介绍了Pytest中的不同级别的setup和teardown函数,包括函数级、类级以及类与函数混合使用的情况,阐述了它们的执行时机和作用范围,帮助理解测试框架在不同场景下的用例生命周期管理。
摘要由CSDN通过智能技术生成

pytest用例运行级别:
●模块级(setup_module/teardown_module)开始于模块始末,全局的
●函数级(setup_function/teardown_function)只对函数用例生效
●类级(setup_class/teardown_class)只在类中前后运行一次(在类中生效,类外不生效)
●方法级(setup_method/teardown_method)开始于方法始末(在类中生效,类外不生效)
●类里面的(setup/teardown)运行在调用方法的前后(类中生效、类外有函数时生效)

函数级:

函数前置setup_function和后置teardown_function,放类中无效,放类外且类外有函数用例时才生效,每个用例开始前和结束后各调用一次,调用多次

import pytest
def setup_function():
    print("setup_function:每个用例开始前都会执行")
def teardown_function():
    print("teardown_function:每个用例结束后都会执行")
def test_one():
    print("正在执行---test_one")
def test_two():
    print("正在执行---test_two")
def login():
    print("正在执行---test_two")
if __name__ == "__main__":
    pytest.main(["-s","test02.py"])


"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\Test
collected 2 items

test02.py setup_function:每个用例开始前都会执行
正在执行---test_one
.teardown_function:每个用例结束后都会执行
setup_function:每个用例开始前都会执行
正在执行---test_two
.teardown_function:每个用例结束后都会执行


============================== 2 passed in 0.14s ==============================

Process finished with exit code 0

模块前置setup_module和后置teardown_module,放类中无效,放类外且类外有函数用例或类内有函数用例时才生效,整个.

pytest 中,可以使用装饰器 `@pytest.fixture` 来定义测试用例的前置后置操作。 前置操作需要在测试用例执行前完成,可以使用 `@pytest.fixture(scope="function")` 来定义作用域为函数级别的前置操作。例如: ```python import pytest @pytest.fixture(scope="function") def setup(): print("\nsetup") def test_case1(setup): print("test_case1") def test_case2(setup): print("test_case2") ``` 在这个例子中,`setup` 函数被定义为函数级别的前置操作,即每个测试用例执行前都会执行一次。`test_case1` 和 `test_case2` 都有一个参数 `setup`,这个参数是用来调用 `setup` 函数的。 后置操作需要在测试用例执行后完成,可以使用 `yield` 和 `addfinalizer` 来定义作用域为函数级别的后置操作。例如: ```python import pytest @pytest.fixture(scope="function") def setup(): print("\nsetup") yield print("\nteardown") def test_case1(setup): print("test_case1") def test_case2(setup): print("test_case2") ``` 在这个例子中,`setup` 函数被定义为函数级别的前置后置操作,即每个测试用例执行前都会执行一次,执行完测试用例后也会执行一次。`yield` 前面的代码是前置操作,`yield` 后面的代码是后置操作。通过 `yield` 可以将控制权交给测试用例执行,测试用例执行完后再执行后置操作。如果需要在测试用例执行后执行多个后置操作,可以使用 `addfinalizer`,例如: ```python import pytest @pytest.fixture(scope="function") def setup(request): print("\nsetup") def teardown(): print("\nteardown1") request.addfinalizer(teardown) def teardown2(): print("\nteardown2") request.addfinalizer(teardown2) def test_case1(setup): print("test_case1") def test_case2(setup): print("test_case2") ``` 在这个例子中,定义了两个后置操作 `teardown1` 和 `teardown2`,它们都会在测试用例执行完后执行。可以使用 `request.addfinalizer` 将这些后置操作添加到 `request` 对象中,这样它们就会按照添加的顺序执行。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大力测试进阶之路

打赏博主喝瓶水吧!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值