Pytest 测试用例生命周期管理 - yield
简介
fixture 可以执行清理工作。在 fixture 函数中,如果有需要清理的资源,可以使用 yield 语句。yield 语句会分隔出测试代码和清理代码,yield 后面的部分会在测试执行后被执行,从而进行清理工作。
yield 语句的使用可以创建更加灵活的测试环境,使得资源的初始化和清理可以在一个 fixture 中完成,同时减少了重复代码。
yield 在 fixture 中的工作流程
- 准备工作:yield 之前的部分是准备工作,通常是初始化测试所需的资源(如数据库连接、测试数据等)。
- 测试执行:yield 会将控制权交给测试函数,并将测试所需的资源传递给它。
- 清理工作:测试函数执行完成后,yield 后面的代码会被执行,用于清理资源,如关闭文件、断开连接等。
使用步骤
- 在 fixture 中,初始化动作结束后,使用 yield 关键字。
- fixture 初始化了测试数据跟在 yield 关键字后,传递给测试函数。
- 在 yield 关键字下方编写测试用例执行之后需要完成的操作。
实战案例
-
场景: 已经将测试⽅法的前置操作解决了,运行测试⽅法后销毁清除数据要如何进⾏?
-
解决: 通过在 fixture 函数中加⼊ yield 关键字,yield 是调⽤第⼀次返回结果,第⼆次执⾏它下⾯的语句返回。
-
步骤: 在登录的⽅法中加 yield,之后加销毁清除的步骤。
代码示例:
import pytest
@pytest.fixture(scope="class")
def login():
# setup 操作
print("完成登录操作")
token = "abcd"
username = 'hogwarts'
yield token,username # 相当于return
# teardown 操作
print("完成登出操作")
def test_search(login):
token,username = login
print(f"token: {token} , name : {username}")
print("搜索")
运行结果:
总结
- yield 在 fixture 中的工作流程
- 使用步骤
- 实战案例