https://www.lexium.ru/2022/10/pytest-reshenie-problemy-s-kirillicejj-v-otchjotakh/

PyTest: Решение проблемы с кириллицей в отчётах

Уже который день меня выбешивает одна проблема. Суть вот в чём. Имеется автотест на PyTest, для проверки сайдбара на одном сайте.

Алгоритм прост:

  1. Открываю сайт,
  2. Авторизуюсь,
  3. Перехожу на первую попавшуюся страницу,
  4. В сайдбаре страницы открываю вертикальное выпадающее меню и кликаю на один из пунктов (берётся из массива),
  5. На открывшихся страницах проверяю сайдбар на наличие меню, на возможность свернуть-развернуть, на всплывающие подсказки, на ширину и прочее-прочее.

И всё вроде было нормально, когда эти действия шли в обычном цикле for. Однако, у цикла был жирный минус, который всё портил.

Представь, что один из пунктов меню пропал. Или на одной из страниц сайдбар оказался битый. В этом месте цикла тест падал и остальные пункты меню уже не проверялись.

Было найдено более корректное решение — параметризованный тест. Массив такому тесту передаётся в виде параметра и тест запускается до тех пор, пока не пройдёт массив до конца.

Т.е. по сути это тот же цикл, но каждая итерация в нём — отдельный тест, с отдельным результатом выполнения. Таким образом я вижу в каких разделах сайта не всё в порядке с сайдбаром.

Вот кусок кода с примером.

items_text = ["текст 1", "текст 2", "текст 3"]
@allure.feature('Функциональное тестирование')
@pytest.mark.parametrize("item_text", items_text)
@allure.story("Общие функции сайдбара в разделе")
def test_sidebar_in(pages, item_text):
    page = SidebarElements(pages.browser)
    with allure_step(f"Шаг 5: Проверка сайдбара в разделе '{item_text}'"):
        print(f" Раздел: '{item_text}'")
        ................

Вот тут и появилась новая проблема. Дело в том, что параметры из массива PyTest отображает в отчёте. А поскольку пункты меню на русском, он заменяет кириллицу на эскейп-последовательности. Получаются совершенно неинформативные строки. И это раздражает всякий раз.

Слышал, что в PyTest 2.9 такой проблемы не было, но начиная с 3.0 — появилась.

Я кучу времени угрохал на то, чтобы найти решение. Баг известный, и достаточно давно, но в сети не попадалось ничего кроме стенаний пользователей. Решение нашёл мой коллега.

Устранить проблему PyTest с отображением кириллицы в отчётах оказалось достаточно легко, если знать как.

Как исправить отображение кириллицы в отчётах PyTest?

  • В корень проекта кладём файлик pytest.ini
  • В фале пишем вот такой текст:
[pytest]
disable_test_id_escaping_and_forfeit_all_rights_to_community_support = true

Внимание, на скрине выше пропущен символ «_» в «_all_rights_».
  • Сохраняем.
  • ??????
  • PROFIT!

Вот так отчёт выглядит теперь.

Совсем другое дело. И в ходе выполнения теста текущие шаги тоже корректно отображают кириллицу.

Помогло? Зашли Админу на чай.

Флаг «disable_test_id_escaping_and_forfeit_all_rights_to_community_support» экспериментальный, но работает уже несколько месяцев. Т.е. типа временный, но прижился вроде-как.

А с вами был Доктор Лексиум.
До новых постов.))

Напишите комментарий