Skip to content

Pytest Fixture 参数化

Pytest Fixture 参数化

简介

Fixture 的参数化是自动化测试中的重要应用之一,允许在多个测试用例中使用不同的输入数据来测试不同情况。参数化 Fixture 使测试用例可以在不同情况下运行,而不需要为每种情况编写不同的测试函数。

Pytest Fixture 参数化的优点

  1. 代码重用:参数化 fixture 允许在不同的测试函数中使用相同的 fixture,以消除重复的代码。通过将 fixture 的参数化和测试函数的参数化结合使用,可以更好地组织和管理测试代码。

  2. 数据驱动测试:参数化 fixture 可以方便地实现数据驱动测试,通过传递不同的参数,可以运行多组相似的测试用例,而不需要编写重复的测试代码。它使得在更多的测试输入下进行测试变得更加容易。

  3. 灵活性:参数化 fixture 可以根据不同的测试需求,使用不同的参数值,这样可以在一次运行中运行多个测试用例并获取不同的输出。这种灵活性使得可以轻松地覆盖不同的测试场景和边界条件。

Pytest Fixture 参数化的使用

  • 场景: 测试离不开数据,为了数据灵活,⼀般数据都是通过参数传递。

  • 解决: fixture 通过固定参数 request 传递。

  • 步骤: 在 fixture 中增加 @pytest.fixture(params=[["selenium",123],["appium",123456]])。 在⽅法参数中写 request,方法体里面使用 request.param 接收参数。

代码示例:

import pytest

@pytest.fixture(params=[["selenium",123],["appium",123456]])
def login(request):
    print(f"用户名:{request.param}")
    yield request.param

def test_demo(login):
    print(f"demo case: 数据为: {login}")

运行结果:

Fixture 总结

  1. Fixture 基本定义: 使用 @pytest.fixture 装饰器定义 Fixture 函数。Fixture 函数返回测试用例需要的数据或对象。

  2. Fixture 参数的传递: 在测试用例中将 Fixture 作为参数传递,以获取 Fixture 提供的数据或对象。

  3. Fixture 的自动注入: Fixture 会自动注入到测试用例中,不需要显式传递 Fixture。

  4. Fixture 的作用域: Fixture 可以设置不同的作用域,包括函数级(默认)、模块级、类级和会话级。作用域决定 Fixture 何时被设置和清理。

  5. Fixture 的清理操作: 使用 yield 语句在 Fixture 中执行清理操作。 清理操作会在测试用例执行后自动运行。

  6. Fixture 的共享: Fixture 可以用于共享资源、配置信息和测试数据。 共享 Fixture 可以在不同的测试模块之间共享。

  7. Fixture 的自动生效: Fixture 可以使用 @pytest.fixture(autouse=True) 使其自动在每个测试用例之前自动调用,而无需显式引用 Fixture。

  8. Fixture 的参数化: 使用 @pytest.fixture(params=[]) 来参数化 Fixture,允许多次运行测试用例以覆盖不同情况。

总结

  • Pytest Fixture 参数化的使用。
  • Fixture 的总结。