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

如何从使用monkeypatch的pytest测试函数中获取返回数据

报错原因

  • monkeypatch是pytest的内置fixture,仅在pytest框架自动执行测试用例时会自动注入参数,手动调用test_take_sample()没有传入该参数,因此触发参数缺失报错。
  • 现有代码存在逻辑错误:test_take_sample中return语句写在所有assert校验之前,执行到return时函数会直接退出,后续校验逻辑完全不会运行,测试校验失效。
  • 直接调用测试函数传递测试数据的做法不符合pytest的设计规范,测试用例应当保持独立,共享测试数据/前置逻辑应使用fixture实现。

最优解决方案:使用pytest fixture共享测试数据

fixture是pytest专门用于封装测试前置逻辑、共享测试数据的功能,支持自动注入fixture依赖,可完美解决你的需求,改造后代码示例如下:

import pytest

# 封装前序测试的输出数据为fixture
@pytest.fixture
def data_to_test_1():
    # 此处替换为原test_load_sample中生成测试数据的逻辑,直接返回结果即可
    return test_load_sample()

# 封装take_sample的输出数据为fixture,自动注入monkeypatch和前置fixture
@pytest.fixture
def data_to_test_2(monkeypatch, data_to_test_1):
    monkeypatch.setattr('builtins.input', lambda _: "373978487")
    return take_sample(data_to_test_1, NAME_FILE_1)

# 原take_sample测试用例直接注入fixture做校验即可
def test_take_sample(data_to_test_2):
    assert data_to_test_2["GT"] == "0/1"
    assert data_to_test_2["AD"] == "28,46"
    assert data_to_test_2["DP"] == "74:99"

# 后续测试直接注入data_to_test_2即可使用,无需手动调用生成
def test_filter_1(data_to_test_2):
    # 直接使用data_to_test_2作为入参完成测试逻辑
    ...

注意事项

  • 普通测试用例中不要随意添加return语句,尤其不能放在校验逻辑之前,否则会导致测试校验失效。
  • 若有跨测试用例的数据共享需求,优先使用fixture实现,避免手动调用测试用例传递数据。

内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:57:02