Возможно ли, чтобы pytest вызывал webhook после каждого выполненного теста? - PullRequest
0 голосов
/ 15 января 2019

Мы используем py.test для выполнения наших интеграционных тестов. Поскольку у нас довольно много тестов, мы хотели бы отслеживать прогресс на панели управления, которую мы используем.

Можно ли настроить webhook или что-то, что pytest будет вызывать с результатами каждого выполненного теста (пройден / не пройден / пропущен)?

Я нашел интеграцию с teamcity, но мы бы предпочли следить за прогрессом на другой панели.

1 Ответ

0 голосов
/ 16 января 2019

Это зависит от того, какие данные вы хотите передать. Если будет достаточно простой проверки завершения, запишите пользовательский хук pytest_runtest_logfinish в файл conftest.py, так как он напрямую предоставляет много тестовой информации:

def pytest_runtest_logfinish(nodeid, location):
    (filename, line, name) = location
    print('finished', nodeid, 'in file', filename,
          'on line', line, 'name', name)

Если вам нужен доступ к результату теста, пользовательский pytest_runtest_makereport является хорошим вариантом. Вы можете получить ту же самую информацию теста (и больше), что и выше, из параметра item:

import pytest

@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    report = yield
    result = report.get_result()

    if result.when == 'teardown':
        (filename, line, name) = item.location
        print('finished', item.nodeid, 'with result', result.outcome,
              'in file', filename, 'on line', line, 'name', name)

Вы также можете перейти с опцией демонтажа прибора, как это предлагается в комментариях:

@pytest.fixture(autouse=True)
def myhook(request):
    yield
    item = request.node
    (filename, line, name) = item.location
    print('finished', item.nodeid, 'in file', filename,
          'on line', line, 'name', name)

Тем не менее, это зависит от того, когда вы хотите, чтобы ваш веб-крючок испускал - вышеупомянутые пользовательские крючки запускаются, когда тест завершен, и все приборы завершены, тогда как в примере с приборами вы не можете гарантировать, что все приборы завершены, так как Там нет явного упорядочения приборов. Кроме того, если вам нужен результат теста, вы не сможете получить к нему доступ в приборе.

...