pytest前置后置
时间: 2023-09-21 15:09:55 浏览: 100
pytest中有两种方式可以实现用例的前后置处理:一种是通过xunit风格的前后置方法,另一种是通过测试夹具(fixtrue)来实现。对于函数用例的前后置方法,可以使用xunit风格的setup和teardown方法来实现。例如,可以在测试模块中定义setup_module和teardown_module方法,在每个测试用例之前和之后执行相应的前后置操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [超详细的pytest教程(二)之前后置方法和fixture机制](https://blog.csdn.net/a448335587/article/details/128268279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关问题
pytest 前置后置
pytest提供了两个装饰器fixture和yield_fixture来实现前置和后置操作。其中fixture是yield_fixture的升级版,建议使用fixture。
以下是pytest前置后置的例子:
```python
import pytest
@pytest.fixture(scope="module")
def open():
print("打开浏览器,并且打开百度首页")
yield
print("执行teardown!")
print("最后关闭浏览器")
def test_soso(open):
print("case1:搜索不到的情况")
def test_search(open):
print("case2:搜索到的情况")
```
在上面的例子中,@pytest.fixture(scope="module")表示open是一个前置操作,作用域是整个模块。yield表示前置操作的结束,后面的语句表示后置操作。
pytest中前置和后置
在 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` 对象中,这样它们就会按照添加的顺序执行。
阅读全文