Добрый день, буду очень благодарен если поможете с решением следующего вопроса.
Нужно найти способ вытянуть данные из pytest о количестве выполненых тестов (fail, pass, skip) которые подсчитывает pytest во время прогона.
В конце прогона тестов pytest выводит статистику выполнения в следующем формате:
=============== 6 failed, 39 passed, 6 skipped in 622.94 seconds ===============
Для получения статистики при прогоне без xdist был использован следующий хук:
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item):
global all_tests
global passed_tests
global failed_tests
global skipped_tests
outcome = yield
rep = outcome.get_result()
if rep.when == "call":
all_tests += 1
if rep.outcome == 'passed':
passed_tests += 1
elif rep.outcome == 'failed':
failed_tests += 1
item.funcargs['app'].capture_screen()
elif rep.outcome == 'skipped':
skipped_tests += 1
setattr(item, "rep_" + rep.when, rep)
В таком случае подсчеты верные для всего прогона. С использованием xdist такой подход не катит.
Когда я внедрил распаралеливание, то подсчеты начали выводиться отдельно для каждого xdist потока. И финальный результат получался - результат от потока, который завершил прогон последним.
Но в конце прогона pytest все равно выводит правильное суммарное количество тестов.
На сколько я понимаю, эти данные собираються на протяжении прогона тестов и выводяться в конце. Значит они должны до завершения выполнения храниться в pytest. Вопрос - где?
Может кто сталкивался (интересовался) подобным вопросом и знает куда смотреть и что вызывать, что бы вытянуть эти значения (в переменную или в файл).
Я подозреваю, что можно найти решение использоваав Reporting hooks, но по причине того, что я только недавно начал работать с pytest, не могу подобрать нужного варианта.
Заранее спасибо за подсказки и (возможно) примеры