【问题标题】:Clean up processes started during by test case execution清理测试用例执行期间启动的进程
【发布时间】:2016-05-16 11:04:40
【问题描述】:

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

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

【问题讨论】:

    标签: subprocess pytest


    【解决方案1】:

    您可以使用yield_fixture 装饰器来定义创建进程的setupteardown 部分,存储它的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
    

    【讨论】:

    • 这只会终止fixture启动的进程,不会终止任何子进程。
    • 这似乎是一个计划!我只需要编写一个fixture,它将为我的测试用例提供进程生成功能,以便它可以注入组更改行为。
    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多