每次执行测试后,pytest是否可以调用webhook?

时间:2019-01-15 20:00:23

标签: python integration-testing pytest webhooks

我们正在使用py.test执行集成测试。由于我们进行了大量测试,因此我们希望在使用的仪表板中监视进度。

是否可以配置一个Webhook或pytest将在每次执行的测试结果(通过/失败/跳过)中调用的东西?

我确实发现了teamcity集成,但是我们希望在其他仪表板上监视进度。

1 个答案:

答案 0 :(得分:1)

这取决于您要发出什么数据。如果简单的完成检查就足够了,请在conftest.py文件中编写一个自定义pytest_runtest_logfinish钩子,因为它直接提供了许多测试信息:

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)

但是,这取决于您希望何时发出Webhook-上面的自定义hookimpls将在测试完成且所有固定装置都已完成时运行,而在固定装置示例中,您不能保证所有固定装置都已最终完成。没有明确的灯具订购。另外,如果您需要测试结果,则不能在固定装置中访问它。