Repository navigation
Allure Reports
Allure Reports - фреймворк для формирования отчётов о прохождении автотестов. Преимущество Allure Reports перед другими фреймворками в том, что он не зависит от языка программирования и его можно подключить к любому окружению.
Allure Reports доступен для Windows, Linux и macOS. Установка фреймворка сильно зависит от того, на какой операционной системе работает ваша машина. Подробные инструкции по установке можно найти по ссылке.
На машинах под управлением debian-подобных систем Allure Reports поставляется в PPA. Для установки необходимо поочерёдно ввести команды следующие команды в терминал:
sudo apt-add-repository ppa:qameta/allure
sudo apt-get update
sudo apt-get install allureДля Windows Allure Reports поставляется в Scoop. Его необходимо отдельно установить, а затем выполнить в Powershell команду scoop install allure.
На macOS установка производится с помощью Homebrew, который необходимо отдельно установить. После этого вводим в терминале команду brew install allure и система сама установит фреймворк.
Для подключения к проекту Allure Reports необходимо перейти в файл requirements.txt и добавить к нему строку allure-pytest. После этого следует нажать кнопку «Install plugins» в верхней части экрана. Также, можно установить Allure через консоль командой pip install allure-pytest.
Далее переходим в файл с тестами. И нажимаем на зеленую иконку запуска кода. В открывшемся меню выбираем пункт «Modify Run Configuration». В окне находим пункт «Additional Arguments». Вводим в поле строку --alluredir=allure-results. Нажимаем «ОК». Также, при запуске тестов через консоль можно вручную прописать строку --alluredir=allure-results.
После этого в директории проекта появится папка allure-results со служебными файлами в ней.
Для генерации отчётов в терминале необходимо выполнить команду allure serve [directory]. Вместо [directory] следует подставить путь до директории, в которой у нас лежат результаты отчётов, к примеру tests/allure-results. После этого в браузере откроется подробный отчёт по тестам.
Отчёты тестов получаются достаточно подробными, но в них всё ещё сложно разбираться. Для этого необходимо обернуть весь тест в разметку сценария, которая поможет явно отслеживать на каком этапе упал тест.
Для этого перед каждый ключевым шагом теста следует добавить степ с описанием:
def test():
with allure.step("Открываем главую страницу GitHub")
browser.open("https://github.com")Также есть другой способ оформить разметку сценария. Для этого каждый осмысленный и завершённый шаг теста мы оформим в виде отдельной функции, а после вызовем каждый шаг в главной функции. Такой подход можно назвать некоторым видом Page Object. Также это помогает переиспользовать код.
К примеру:
def test_decorator_steps():
open_main_page()
search_for_repository("eroshenkoam/allure-example")
go_to_repository("eroshenkoam/allure-example")
open_issue_tab()
should_see_issue_with_number("#76")
@allure.step("Открываем главную страницу")
def open_main_page():
browser.open("https://github.com")
@allure.step("Ищем репозиторий {repo}")
def search_for_repository(repo):
s(".header-search-input").click()
s(".header-search-input").send_keys(repo)
s(".header-search-input").submit()
@allure.step("Переходим по ссылке репозитория {repo}")
def go_to_repository(repo):
s(by.link_text(repo)).click()
@allure.step("Открываем таб Issues")
def open_issue_tab():
s("#issues-tab").click()
@allure.step("Проверяем наличие Issue с номером {number}")
def should_see_issue_with_number(number):
s(by.partial_text(number)).click()Отчёты можно сопровождать дополнительными материалами и комментариями, которые могут помочь анализировать их состояние.
К примеру:
def test_attachments():
# Текст
allure.attach("Text content", name="Text", attachment_type=attachment_type.TEXT)
# HTML
allure.attach("<h1>Hello, world</h1>", name="Html", attachment_type=attachment_type.HTML)
# JSON
allure.attach(json.dumps({"first": 1, "second": 2}), name="Json", attachment_type=attachment_type.JSON)Также тесты можно оформить другой служебной информацией, которая удобно сгруппируется в отчёте Allure:
def test_no_labels():
pass
# Первый способ
def test_dynamic_labels():
allure.dynamic.tag("web")
allure.dynamic.severity(Severity.BLOCKER)
allure.dynamic.feature("Задачи в репозитории")
allure.dynamic.story("Неавторизованный пользователь не может создать задачу в репозитории")
allure.dynamic.link("https://github.com", name="Testing")
pass
# Второй способ
@allure.tag("web")
@allure.severity(Severity.CRITICAL)
@allure.label("owner", "eroshenkoam")
@allure.feature("Задачи в репозитории")
@allure.story("Авторизованный пользователь может создать задачу в репозитории")
@allure.link("https://github.com", name="Testing")
def test_decorator_labels():
pass