我们正在使用py.test执行集成测试。由于我们进行了大量测试,因此我们希望在使用的仪表板中监视进度。
是否可以配置一个Webhook或pytest将在每次执行的测试结果(通过/失败/跳过)中调用的东西?
我确实发现了teamcity集成,但是我们希望在其他仪表板上监视进度。
答案 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将在测试完成且所有固定装置都已完成时运行,而在固定装置示例中,您不能保证所有固定装置都已最终完成。没有明确的灯具订购。另外,如果您需要测试结果,则不能在固定装置中访问它。