pytest yield
时间: 2023-08-14 11:11:27 浏览: 182
pytest中的yield是一个测试框架提供的特殊关键字,用于在测试函数中创建一个生成器。在测试函数中使用yield关键字,可以将测试函数分成多个部分,并在每个部分之间进行一些操作或断言。yield关键字允许在测试函数执行期间暂停和恢复测试,以便更灵活地控制测试流程。
使用yield关键字在pytest中编写测试用例时,可以实现以下效果:
- 在测试函数执行期间可以暂停和恢复测试。
- 在测试函数中可以执行一些准备工作和清理工作。
- 在测试函数中可以断言多个步骤的结果。
下面是一个使用yield的示例代码:
```python
import pytest
def test_example():
# 测试准备工作
setup()
# 第一个测试步骤
yield step1
# 第二个测试步骤
yield step2
# 第三个测试步骤
yield step3
# 测试清理工作
teardown()
```
在上述示例中,test_example函数是一个测试函数。通过使用yield关键字,我们将测试函数分成了多个部分,每个部分对应一个测试步骤。在每个步骤之间,可以执行一些操作或断言。同时,在测试函数开始和结束时,可以执行一些准备工作和清理工作。
注意:yield关键字在pytest中与生成器的常规用法略有不同。它是pytest框架提供的特殊功能,用于控制测试流程。
相关问题
pytest中yield关键字
在pytest中,yield关键字用于实现fixture的teardown操作。fixture是在测试用例执行之前或之后执行的一段代码,用于进行一些预置操作或清理操作。通常情况下,teardown操作是通过在fixture函数中使用yield关键字来实现的。当测试用例调用fixture函数时,yield关键字会在测试用例执行完之后执行,用于执行teardown操作。在teardown操作中,可以进行一些清理工作,例如关闭浏览器、退出登录等。通过使用yield关键字,可以实现teardown操作的自动执行,并确保在每个测试用例执行之后进行必要的清理工作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [pytest系列——fixture之yield关键字实现teardown用例后置操作](https://blog.csdn.net/mashang_z111/article/details/126752230)[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^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [pytest使用yield关键字实现teardown_xxx的功能和request.addfinalizer()注册清理函数](https://blog.csdn.net/weixin_42550871/article/details/109137575)[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^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
pytest中yield用法
在pytest中,yield可以用来代替return进行返回。特别地,当fixture函数需要在前置操作中返回数据时,可以在yield之前进行操作,yield之后进行后置操作。示例如下:
```python
import pytest
@pytest.fixture()
def fixture_demo():
# setup
print("\n连接数据库")
yield
# teardown
print("清空脏数据")
def test_case(fixture_demo):
print("执行test_case")
assert True
if __name__ == '__main__':
pytest.main(["-s"])
```
在上述代码中,fixture_demo函数在yield之前进行了前置操作,即连接数据库,yield之后进行了后置操作,即清空脏数据。
另外,当fixture函数需要在多个测试用例中使用时,可以使用autouse=True参数,使其自动应用于所有测试用例。示例如下:
```python
import pytest
@pytest.fixture(autouse=True)
def fixture_one():
print("执行fixture_one")
yield 1
def test_e(fixture_one):
print("执行test_e")
print(fixture_one)
assert fixture_one == 1
if __name__ == '__main__':
pytest.main(["-s"])
```
在上述代码中,fixture_one函数被autouse=True参数修饰,因此会自动应用于所有测试用例。在test_e测试用例中,fixture_one被作为参数传入,并打印了其返回值。
阅读全文