Рейтинг  

Яндекс.Метрика
Яндекс цитирования
 

   

Статистика  

Пользователи
7
Материалы
578
Кол-во просмотров материалов
2743054
   

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"

Можно использовать параметры командной строки, чтобы указать различные наборы/группы тестов для выполнения, передавая список значений, разделенных запятыми:

  1. --allure-epics
  2. --allure-features
  3. --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:

  1. Открытие отчета в Chrome:
    1. Распаковать allure-report.zip
    2. Если браузер Chrome запущен, то его необходимо закрыть
    3. Открыть файл 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"
  2. Открытие отчета в FireFox:
    1. Распаковать allure-report.zip
    2. Настроить FireFox
      1. Перейдите к about:config (введите адрес в строке навигации)
      2. Найдите параметр security.fileuri.strict_origin_policy
      3. Установить как «неверно» ("false")
    3. Открыть файл index.html

Allure-framework

   
   

Login Form