You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pytest中从测试用例向fixture传递参数或值?

解决pytest fixture获取测试用例中变量的问题

你无法直接获取测试用例函数内的局部变量json_name,因为fixture在测试用例执行前运行,此时测试函数的局部变量还未定义。可以通过以下几种方案实现需求:

方案一:使用pytest标记传递元数据

给测试用例添加自定义标记,在fixture中通过request.node获取标记内容:

import pytest

@pytest.fixture(autouse=True)
def pretest(request):
    tc_name = request.node.name
    # 获取自定义标记的json_name值
    json_mark = request.node.get_closest_marker("json_name")
    if json_mark:
        json_name = json_mark.args[0]
        print(f"测试用例{tc_name}的json_name: {json_name}")
    yield

@pytest.mark.json_name("file1.json")
def test_case_EVA_01():
    # 测试逻辑
    pass

@pytest.mark.json_name("file2.json")
def test_case_EVA_02():
    # 测试逻辑
    pass

方案二:给测试函数设置属性

直接为测试函数添加属性,fixture中通过request.node.function读取该属性:

import pytest

@pytest.fixture(autouse=True)
def pretest(request):
    tc_name = request.node.name
    # 检查测试函数是否有json_name属性
    if hasattr(request.node.function, "json_name"):
        json_name = request.node.function.json_name
        print(f"测试用例{tc_name}的json_name: {json_name}")
    yield

def test_case_EVA_01():
    pass
# 给测试函数添加属性
test_case_EVA_01.json_name = "file1.json"

def test_case_EVA_02():
    pass
test_case_EVA_02.json_name = "file2.json"

方案三:使用参数化传递值

通过@pytest.mark.parametrize传递json_name,既可以在fixture中获取,也能在测试用例中直接使用:

import pytest

@pytest.fixture(autouse=True)
def pretest(request):
    tc_name = request.node.name
    # 获取参数化的json_name值
    if hasattr(request, "param"):
        json_name = request.param
        print(f"测试用例{tc_name}的json_name: {json_name}")
    yield

@pytest.mark.parametrize("json_name", ["file1.json"])
def test_case_EVA_01(json_name):
    # 测试逻辑中可直接使用json_name
    print(f"测试用例内使用json_name: {json_name}")

@pytest.mark.parametrize("json_name", ["file2.json"])
def test_case_EVA_02(json_name):
    print(f"测试用例内使用json_name: {json_name}")

方案对比

  • 标记方案:代码整洁直观,适合批量管理测试用例元数据,是最常用的方式。
  • 函数属性方案:无需依赖标记,写法简单但不够直观,适合少量测试用例的场景。
  • 参数化方案:兼顾fixture和测试用例的使用需求,适合需要在测试逻辑中也用到json_name的场景。

内容的提问来源于stack exchange,提问作者Sunil Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:35:22