Это зависит от того, какие данные вы хотите передать. Если будет достаточно простой проверки завершения, запишите пользовательский хук 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)
Тем не менее, это зависит от того, когда вы хотите, чтобы ваш веб-крючок испускал - вышеупомянутые пользовательские крючки запускаются, когда тест завершен, и все приборы завершены, тогда как в примере с приборами вы не можете гарантировать, что все приборы завершены, так как Там нет явного упорядочения приборов. Кроме того, если вам нужен результат теста, вы не сможете получить к нему доступ в приборе.