You need to enable JavaScript to run this app. 如何在pytest中使用subprocess并让测试在subprocess.run报错时失败
优惠活动
大模型
产品
解决方案
定价
更多

如何在pytest中使用subprocess并让测试在subprocess.run报错时失败

pytest中subprocess.run执行出错时判定测试失败的方法

默认情况下subprocess.run只会返回命令执行结果对象,不会校验命令的退出状态码,哪怕命令执行出错返回非0值,测试用例也会判定为通过,你可以用以下两种方案实现执行出错时自动判定测试失败:

  • 方案1:添加check=True参数(最简单)
    将subprocess.run的check参数设置为True后,只要命令返回非0状态码,就会自动抛出subprocess.CalledProcessError异常,pytest遇到未捕获的异常会直接判定测试用例失败。
    修改后的代码示例:
import pytest
import subprocess

@pytest.mark.parametrize("input_json", ["input.json"])
def test_main(input_json):
    subprocess.run(['python', 'main.py', input_json], check=True)
  • 方案2:手动断言返回状态码(灵活度高)
    如果你需要自定义错误提示、或者要同时校验命令的输出内容,可以手动获取返回结果的状态码做断言:
import pytest
import subprocess

@pytest.mark.parametrize("input_json", ["input.json"])
def test_main(input_json):
    result = subprocess.run(
        ['python', 'main.py', input_json],
        capture_output=True, # 可选:捕获stdout和stderr,方便出错时排查问题
        text=True # 可选:将输出内容转为字符串格式,而非字节流
    )
    # 自定义断言,返回码非0时测试失败,同时打印错误信息
    assert result.returncode == 0, f"程序执行失败,错误输出:{result.stderr}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:51:03