Allure - инструментарий для визуализации отчётов по проделанным авто-тестам.
Для работы allure требуется установленная java
Сам
allure скачивается отсюда:
https://github.com/allure-framework/allure2/releases
Внутри просто каталоги с бинарниками и плагинами.
Для работы allure необходимо распаковать каталог в удобное место и
указать в системной переменной PATH абсолютный путь к внутреннему каталогу bin (где лежит allure.bat).
Для генерации отчётов по тестам в pytest нужно установить allure-pytest:
pip install allure-pytest
Как пользоваться?:
Собрать отчёты в каталог my_allure_results, указывая его через опцию --alluredir:
$ pytest --alluredir=/tmp/my_allure_results
Посмотреть отчёт, который сгенерирован в каталог my_allure_results:
$ allure serve /tmp/my_allure_results
Последнюю команду можно запускать из любого системного терминала, не только из PyCharm
Аналогично запуску отдельных маркированных тестов командой:
pytest -m "Mark1 or Mark2 or Mark3"
Можно использовать параметры командной строки, чтобы указать различные наборы/группы тестов для выполнения, передавая список значений, разделенных запятыми:
- --allure-epics
- --allure-features
- --allure-stories
Значит можно запускать наборы/группу тестов по epics- и/или stories- и/или feature-метке allure
(т.е. те тесты, у которых будет указано в @allure.feature("Управление логикой") будут запущены):
pytest --allure-features 'Управление логикой'
pytest tests.py --allure-stories story_1,story_2
pytest tests.py --allure-features feature2 --allure-stories story2
Декораторы Allure
Декоратор |
Описание |
Дополнительно |
@allure.epic(«Эпик») | эпики |
|
@allure.feature(«Module Name») | Имя модуля |
Сгруппировать первый слой |
@allure.story(«User Story») | пользовательская история в модуле функции |
Группировка второго слоя |
@allure.title(«Название отчета») | заголовок теста/ название отчета |
|
@allure.step(«Шаг») | шаги |
Отображается в ключевых шагах в отчете |
@allure.tag(«Тэг») | тэги |
|
@allure.suite(«Test Suite») | тестовый комплект (Set) | |
@allure.testcase(«Test Case») | Связанные тестовые случаи (могут напрямую связать адресную ссылку на тестовый пример) | |
@allure.description(«Описание») | Описание |
|
@allure.severity(allure.severity_level.xxx) |
Уровень серьезности |
@allure.severity(allure.severity_level.CRITICAL) |
@owner("Владелец") | Владелец | |
@test | ||
@allure.issue() |
Связанная ошибка --allure-link-pattern=issue:http//www.mytesttracker.com/issue/{}
# Полная команда заключается в следующем: pytest test.py ----allure-link-pattern=issue:http//www.mytesttracker.com/issue/{} --alluredir=../result/report/1
|
|
@allure.attach(body, name, attachment_type, extension) |
body - содержимое записываемого файла. name - строка, содержащая имя файла attachment_type - тип вложения — значение из allure.attachment_type extension - расширение используемое при создании файла |
|
@allure.attach.file(source, name, attachment_type, extension) |
source - строка, содержащая путь к файлу. name - строка, содержащая имя файла attachment_type - тип вложения — значение из allure.attachment_type extension - расширение используемое при создании файла |
Лучше один раз увидеть:
Перехватчик (hook) для создания скриншотов при падении теста (conftest.py)
import os, datetime import pytest import allure from selenium import webdriver @pytest.hookimpl(tryfirst=True, hookwrapper=True) def pytest_runtest_makereport(item, call): outcome = yield web_driver = None rep = outcome.get_result() # print(item, item.fixturenames, rep.failed) if rep.when == 'call' and rep.failed: if 'browser' in item.fixturenames: web_driver = item.funcargs['browser'] # print('-= SHOT =-') else: print('Fail to take screen-shot') return file_name = f"{datetime.datetime.now().strftime('%Y_%m_%d__%H_%M_%S_%F')}" \ .replace("/", "_").replace("::", "__") dir_path = 'C:/apps/_place/allure/screenshots/' if not os.path.exists(dir_path): os.makedirs(dir_path) capture_path = os.path.join(dir_path, f"{file_name}.png") # print(capture_path) web_driver.save_screenshot(capture_path) allure.attach( web_driver.get_screenshot_as_png(), name=f'screenshot {file_name}', attachment_type=allure.attachment_type.PNG )
item - функция, в которой происходит событие. Если посмотреть внутри, то каждая функция проходит через через перехватчик в 3-х состояниях (rep.when) - setup, call, teardown.
Если rep.failed == true - функция 'упала', т.е. в ней (item) произошёл инцидент.
Метод (функция) создания скриншота с вырезкой (через библиотеку pillow) веб-элемента
from PIL import Image def make_screenshot(self, web_locator: tuple[str, str], file_path: str, file_name: str): """ Делает скриншот элемента :param web_locator: Кортеж из метода поиска элемента и локатора элемента :param img_file_path: Путь к файлу скриншота элемента :return: """ element = self.get_element(web_locator) place = element.location size = element.size tmp_img = "tmp_image.png" self.browser.save_screenshot(tmp_img) x = place['x'] y = place['y'] width = x + size['width'] height = y + size['height'] img = Image.open(tmp_img) img = img.crop((x, y, width, height)) img.save(f"{file_path}{file_name}")
Просмотреть отчёт Allure в браузере без запуска allure serve:
- Открытие отчета в Chrome:
- Распаковать allure-report.zip
- Если браузер Chrome запущен, то его необходимо закрыть
- Открыть файл index.html с помощью команды:
start chrome --allow-file-access-from-files "%cd%/index.html"
или (в новом окне браузера):start chrome --allow-file-access-from-files --user-data-dir="%cd%/chrome" "%cd%/index.html"
- Открытие отчета в FireFox:
- Распаковать allure-report.zip
- Настроить FireFox
- Перейдите к about:config (введите адрес в строке навигации)
- Найдите параметр security.fileuri.strict_origin_policy
- Установить как «неверно» ("false")
- Открыть файл index.html
Allure-framework
- Allure Report: How it works
- Руководство по практическому использованию Allure Report (Java)
- 【Pytest-Allure】 Создание красивого отчета об автоматизации
- Allure Python (QA черновик)
- Allure 2: тест-репорты нового поколения
- Allure-framework. Часть 1
- Allure-Framework. Работа с кодом (Java)
- Тесты на pytest с генерацией отчетов в Allure с использованием Docker и Gitlab Pages и частично selenium