pytest中前置和后置
时间: 2023-07-08 10:05:19 浏览: 94
在 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` 对象中,这样它们就会按照添加的顺序执行。
阅读全文