在测试用例执行期间清理启动的进程

时间:2016-02-06 13:33:19

标签: subprocess pytest

我正在构建一个使用subprocess.Popen()启动进程的应用程序。这些流程可能会根据他们的工作开始自己的流程。作为测试套件的一部分,我想彻底测试该功能,但我担心我的代码中的最终错误可能导致许多进程(在许多测试用例中)保持活动状态,我将不得不手动清理。

py.test 或插件中是否有一些功能可以解决此问题并清理在测试用例执行期间启动的所有进程?如果必须清理的流程被报告和/或计入测试用例失败,则奖励积分。

1 个答案:

答案 0 :(得分:1)

您可以使用yield_fixture装饰器来定义 setup & 拆解创建进程的部分,存储它的PID然后全部杀死它们。例如:

import pytest
import subporcess

@pytest.yield_fixture
def run_sh():
    sh = subprocess.Popen(['/bin/sh'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
    yield sh
    sh.kill()

def test_popen(run_sh):
    assert run_sh.pid > 1