如何将 pytest 与子进程一起使用?

pap*_*eps 6 python testing pytest

下面是一个测试。subprocess.run如果结果出现错误,如何使该测试失败?

import pytest
import subprocess

@pytest.mark.parametrize("input_json", ["input.json"])
def test_main(input_json):
    subprocess.run(['python', 'main.py', input_json]
Run Code Online (Sandbox Code Playgroud)

dor*_*ian 7

subprocess.run返回一个CompletedProcess实例,您可以检查它。

\n

我不确定你所说的“导致错误”到底是什么意思\xe2\x80\x94如果它是进程的返回代码非零,你可以检查。\ returncoden如果它是一个特定的错误正在输出消息,请检查stdoutstderr

\n

例如:

\n
import pytest\nimport subprocess\n\n@pytest.mark.parametrize("input_json", ["input.json"])\ndef test_main(input_json):\n    completed_process = subprocess.run([\'python\', \'main.py\', \'input_json\']\n    assert completed_process.returncode == 0\n
Run Code Online (Sandbox Code Playgroud)\n

注意。您似乎没有input_json在测试函数中使用参数化参数。只是一个观察。

\n

  • 我的错误,编辑错误。我实际上在测试中使用了参数化参数。 (2认同)