Захватить выход нагиосплугина в пыстере - PullRequest
0 голосов
/ 13 мая 2019

Поэтому я пытаюсь написать модульные тесты для моего использования 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 является заменой захвата от pytest.

Кто-нибудь когда-нибудь сталкивался с этой проблемой (или чем-то подобным) раньше? Как ты это решил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...