Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

pytest
selenium
python
Теги: #<Tag:0x00007fedbc54d268> #<Tag:0x00007fedbc54d128> #<Tag:0x00007fedbc54cfe8>

(Ihor Dodukh) #1

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

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


(Вадим) #2

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


(rmerkushin) #3

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


(Ihor Dodukh) #4

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

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