pytest学习问题2:类中前置(setup)和后置(teardown)不生效

问题:在类中设置了setup和teardown,在执行测试用例的时候,在用例前后并没有执行setup和teardown

上代码:

import pytest

class TestFunc():
    def setup(self):
        print("\n这是用例前执行准备工作")

    def teardown(self):
        print("\n这是用例后执行的扫尾工作")

    def test_01_function_01(self):
        print("\n这是第一个功能测试。")

if __name__ == "__main__":
    pytest.main(['-vs'])

执行结果:

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

test_func.py::TestFunc::test_01_function_01 
这是第一个功能测试。
PASSED

=================

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` 对象中,这样它们就会按照添加的顺序执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值