t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как получить количество выполненых тестов (pass, fail, skip) которые подсчитывает pytest во время прогона

Теги: #<Tag:0x00007f9b02631a38> #<Tag:0x00007f9b02631920> #<Tag:0x00007f9b026317e0>

Добрый день, буду очень благодарен если поможете с решением следующего вопроса.

Нужно найти способ вытянуть данные из 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, не могу подобрать нужного варианта.

Заранее спасибо за подсказки и (возможно) примеры :slightly_smiling_face:

А почему бы не использовать Allure ? Красивые отчеты + интересные фишки.

поглядите как оформлены плагины для разных ide, может поможет. У pycharm вроде можно посмотреть python код для pytest плагина.

Allure отчеты подключены. Все красиво и удобно. Только поднимался вопрос с отправкой имейла со статистикой выполнения тестов после каждой сборки билда в Jenkins. Не нашёл решения, чтобы из Allure репорта вытянуть данные. Пошел путём получения статистики подсчетом тестов вручную и передачи данных через переменную Jenkins в тело имейла.

Все было гладко до распаралеливания.