Skip to content

Pytest 测试用例生命周期管理 - yield


简介

fixture 可以执行清理工作。在 fixture 函数中,如果有需要清理的资源,可以使用 yield 语句。yield 语句会分隔出测试代码和清理代码,yield 后面的部分会在测试执行后被执行,从而进行清理工作。

yield 语句的使用可以创建更加灵活的测试环境,使得资源的初始化和清理可以在一个 fixture 中完成,同时减少了重复代码。


yield 在 fixture 中的工作流程

  1. 准备工作:yield 之前的部分是准备工作,通常是初始化测试所需的资源(如数据库连接、测试数据等)。
  2. 测试执行:yield 会将控制权交给测试函数,并将测试所需的资源传递给它。
  3. 清理工作:测试函数执行完成后,yield 后面的代码会被执行,用于清理资源,如关闭文件、断开连接等。

使用步骤

  1. 在 fixture 中,初始化动作结束后,使用 yield 关键字。
  2. fixture 初始化了测试数据跟在 yield 关键字后,传递给测试函数。
  3. 在 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 中的工作流程
  • 使用步骤
  • 实战案例