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(«Эпик») | эпики |
Отображается на вкладке Behaviors |
| @allure.feature(«Module Name») | Имя модуля |
Сгруппировать первый слой |
| @allure.story(«User Story») | пользовательская история в модуле функции |
Группировка второго слоя |
| @allure.suite(«Test Suite») | тестовый комплект (Set) | Заменяет название файла test_%name%.py на вкладке Suites |
| @allure.title(«Название отчета») | заголовок теста/ название отчета |
Заменяет (программное) название тестовой функции |
| @allure.tag(«Тэг») | тэги |
|
| @allure.description(«Описание») | Описание |
|
|
@allure.severity(allure.severity_level.xxx) |
Уровень серьезности |
@allure.severity(allure.severity_level.CRITICAL) |
| @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.testcase(«Test Case») | Связанные тестовые случаи (могут напрямую связать адресную ссылку на тестовый пример) | |
| @allure.step(«Шаг») | шаги |
Отображается в ключевых шагах в отчете (раздел Execution) |
|
@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 - расширение используемое при создании файла |
|
| @owner("Владелец") | Владелец | |
| @test | ||
Лучше один раз увидеть:
Перехватчик (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, item.funcargs, rep.failed)
if rep.when == 'call' and rep.failed:
if 'browser' in item.funcargs:
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 внутри кода python:
msg = "Важное сообщение!"
with allure.step(f"{msg}"):
...
Просмотреть отчёт 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 для Pyhton (автоматизация тестирования) - учебный курс на Stepik
- 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