Автоматизация нуждается в человекочитаемых отчетах о тестировании — что тестировалось, какими тестовыми шагами, с каким результатом. Для этого существует система генерации отчетов Allure.
Allure поддерживается большинством известных тестовых фреймворков, а для неизвестных требует написания так называемого адаптера.
Как подключить Allure в любой произвольный фреймворк или не фреймворк вовсе?
Использование Allure состоит из двух независимых шагов:
Генерация json-ов содержащих все действия теста, так называемые allure-results.
Генерация отчета по собранным результатам (требует java8 и установки утилиты allure:https://bintray.com/qameta/generic/allure2). Этот пункт одинаков для всех типов фреймворков за счет того, что allure-results это достаточно универсальное описание тестов:
allure generate /some_path_to/allure-results
Написание полноценного адаптера для allure и интеграция его в произвольный фреймворк несколько трудоемко, поэтому воспользуемся минимально возможным набором действий, чтобы лишь проиллюстрировать идею. Код ниже — это python адаптация идей изложенных в докладе про allure-lifecycle на Java, оригинал.
Установим только ядро allure-репортера:
pip install allure-python-commons
Напишем простой тест генерирующий allure-results:
# -*- coding: utf-8 -*-
import allure_commons
from allure_commons.utils import now, uuid4
from allure_commons.reporter import AllureReporter
from allure_commons.logger import AllureFileLogger
from allure_commons.model2 import Status
from allure_commons.model2 import TestResult
from allure_commons.model2 import TestStepResult
def check_some_thing(some):
print ("Some is %s" % some)
return some
if __name__ == '__main__':
print ("Start main")
# Init allure
allurelogdir = "reportsx"
logger = AllureReporter()
file_logger = AllureFileLogger(allurelogdir)
allure_commons.plugin_manager.register(file_logger)
# Start testcase
case_uuid = uuid4()
testcase = TestResult(uuid=case_uuid, fullName='Hello, Habr')
logger.schedule_test(case_uuid, testcase)
# TestStep
allure_step = TestStepResult(name='Привет, habrateststepname (да здравствует русский язык)', start=now())
current_step_uuid = uuid4()
logger.start_step(None, current_step_uuid, allure_step)
check_some_thing('something') # origial procedure for testing
logger.stop_step(current_step_uuid, stop=now(), status=Status.PASSED)
testcase.status = Status.PASSED
logger.close_test(case_uuid)
После запуска данный код сформирует результаты в папке "reports"
Как видно код по работе с тестовым шагом(start_step и stop_step) прекрасно подходит под паттерн декоратор и должeн быть им реализован.
Расставьте данные блоки кода по своему тест-фреймворку и соберите фейковые тесты с результатами ручного тестирования, выполните генерацию allure generate и вы получите готовое решение по унификации отчетов отдела.