在pytest中捕获nagiosplugin输出

时间:2019-05-13 11:30:23

标签: python pytest

因此,我正在尝试为使用nagiosplugin编写单元测试。但是,我无法捕获此插件生成的stdout输出。

这是我非常基本的小测试:

def test_check(mocker, capsys):
    mocker.patch('sys.exit')
    lc = nagios.LogCheck(EXPORTIT_LOG)
    lc.main()

    captured = capsys.readouterr()
    print captured

这是输出:

test_nagios.py::test_check LOGRESOURCE CRITICAL - Failed. |  last_entry_runtime=19.871235s;300;600 since_last_entry=7296.123125s;600;1200
CaptureResult(out=u'', err=u'')
PASSED

您可以说,尽管生成了输出,但没有捕获到任何输出。

我相信这是由于nagiosplugin中的这段代码造成的:

(来源:https://bitbucket.org/flyingcircus/nagiosplugin/src/default/src/nagiosplugin/runtime.py

class Runtime(object):

    stdout = sys.stdout

    def execute(self, check, verbose=None, timeout=None):
        print('{0}'.format(self.output), end='', file=self.stdout)
        self.sysexit()

我删除了其中的大部分内容,但问题似乎在于该对象将 sys.stdout 存储为 self.stdout ,然后使用它产生输出。这似乎完全绕过了pytest完成的捕获。简短的调试会话似乎证实了这种怀疑:在打印语句之后, self.stdout 是常规的 sys.stdout ,而实际的 sys.stdout < / strong>是pytest的捕获替代物。

以前有人遇到过此问题(或类似问题)吗?您是如何解决的?

0 个答案:

没有答案