Pytest精通指南(08)利用Fixture实现参数化

46 篇文章 1 订阅
28 篇文章 1 订阅


请添加图片描述

前言

pytest中,可以使用@pytest.fixture装饰器来定义fixture,并通过request对象来传递参数。

然而,通常我们不会通过request对象来传递参数给fixture,而是直接在测试函数中传递参数。

fixture本身可以接收参数,并且这些参数可以通过其他fixture或测试函数传递。

request 对象

request 对象是一个内置的fixture,它总是作为第一个参数传递给其他的fixture函数。

request 对象的主要用途是允许fixture之间进行通信和传递数据,以及控制fixture的行为。

request对象具有以下一些重要的属性和方法:

  • request.param: 当fixture被参数化时,request.param 会包含传递给fixture的参数值。
  • request.node: 当前请求的节点信息,通常是一个 FunctionItemSession 对象。
  • request.addfinalizer(func): 注册一个最终化函数,该函数会在测试完成后执行,无论测试是否成功。
  • request.config: 访问 pytest 的配置信息。
  • request.scope: 获取fixture的作用域(如 “function”, “module”, “session” 等)。
  • request.fixturenames: 获取当前请求所依赖的所有fixture名称。

传递参数给 Fixture

示例代码

import pytest


@pytest.fixture
def give_data_to_fixture(request):
    marker = request.node.get_closest_marker("data")
    if marker is None:
        data = None
    else:
        print("marker1:", marker)   # Mark(name='mydata', args=(1,), kwargs={})
        print("marker2:", marker.args[0])   # 10
        data = marker.args[0] * 10
    return data


@pytest.mark.data(1)
def test_data(give_data_to_fixture):
    print("data={}".format(give_data_to_fixture))

执行结果

请添加图片描述

Fixture传递参数给testcase

方式一:利用return

示例代码

import pytest

@pytest.fixture(params=[1, 2, 3])
def flexible_fixture(request):
    value = request.param
    print(f"灵活的fixture参数值:{value}")
    return value


# 测试函数,接收来自fixture的参数
def test_with_params(flexible_fixture):
    assert flexible_fixture > 0, f"参数值 {flexible_fixture} 必须大于0"

执行效果

请添加图片描述

方式二:利用yield

示例代码

import pytest


@pytest.fixture(params=[
    {"name": "zhangsan", "age": 3},
    {"name": "lisi", "age": 18},
    {"name": None, "age": 20}]
)
def yield_fixture(request):
    print("\n--- 调用前置")
    yield request.param
    print("\n--- 调用后置")


# 测试函数,接收来自fixture的参数
def test_with_params(yield_fixture):
    name = yield_fixture.get("name")
    age = yield_fixture.get("age")
    print("姓名:", name, "年龄:", age)
    assert name or age >= 18, f"姓名为None或年龄小于18"

执行效果

请添加图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要休息的KK.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值