Разрабатываем тестовый скрипт, запускам и получаем классный отчет с результатами
Всем привет. Как часто вам нужно разрабатывать сотни авто тестов и предоставлять заинтересованным лицам отчеты с результатами? Лично мне очень часто. В этом мне помогает Anna.
Зачем это нужно
Я работаю QA инженером в крупной IT компании. Мы предоставляем тестирование как сервис. К нам обращаются команды, которые разрабатывают свой продукт за автоматизацией ручных тестов. Как правило, это UI или API тесты. Многие не понимают, что такое автоматизация тестов и приходится каждый раз объяснять, что к чему. Самое главное в любом тестировании это результаты тестирования. Все будет отлично, если они представлены в удобном и понятном виде. Исторически сложилось, что мы используем для отчетов Allure Framework. Наши клиенты привыкли видеть результаты в таком виде.
Моя команда пишет тестовые скрипты на Python. Мы первая команда в нашей компании, которая внедрила данный язык в тестирование. Я всегда хотел делать больше и затрачивать на это как можно меньше времени. В Python отличные встроенные и пользовательские библиотеки, но они не удовлетворяли наши запросы в полной мере. Приходилось импортировать кучу библиотек, писать длинный код и тратить на написание много времени. Время разработки и поддержки - главные критерий, который я установил. Для этого была разработана Anna.
Как установить
Для установки выполнить следующую команду:
python -m pip install anna-api-test-framework
Как использовать
Для начала импортируем библиотеку
from anna import Actions, Report, Asserts
Для использования предоставляется три класса.
Actions - содержит методы для выполнения http запросов. Под капотом спрятана библиотека requests. Все данные о запросах и отчетах автоматически добавляются в отчет о тестировании.
action = Action(url=url)
response = action.request(method=method)
Report - содержит методы для добавления необходимых данных в отчет: шаги, названия тестов, группировка тестов, ссылки, описание и т.п.
@Report.epic('Simple tests')
@Report.story('Tests google')
@Report.testcase('https://www.google.com', 'Google')
@Report.link('https://www.google.com', 'Just another link')
class TestExample:
@Report.title('Simple test google')
@Report.severity('CRITICAL')
def test_simple_request(self):
url = 'https://google.com'
method = 'GET'
want = 200
Report.description(url=url, method=method, other='other information')
Asserts - содержит методы для проверки условий тестов.
with Report.step('Checking response'):
Assert.compare(
variable_first=want,
comparison_sign='==',
variable_second=got,
text_error='Response status code is not equal to expected'
)
Как запустить тесты
Для запуска используем следующую команду:
python -m pytest --alluredir="./results"
Мы используем для своих тестов библиотеку pytest. Данной командой мы запускам все тесты из текущей директории и указываем куда сохранять данные с результатами тестов. В данном случае сохраняем все в директорию results
Как сформировать отчет
Для формирования и отображения отчета необходимо установить утилиту Allure.
Далее используем команду для формирования отчета из полученных тестовых данных в директории results
:
allure generate "./results" -c -o "./report"
Данная команда формирует отчет в директорию report
Как открыть отчет
Выполняем следующую команду:
allure open "./report"
Команда запускает локальный сервер через который мы получаем доступ к отчету из директории report
в своем браузере.
Данный отчет сформирован на основе следующего тестового скрипта:
from anna import Action, Report, Assert
# добавляем всю необходимую информацию для набора тестов, а также
# группируем их
@Report.epic('Simple tests')
@Report.story('Tests google')
@Report.testcase('https://www.google.com', 'Google')
@Report.link('https://www.google.com', 'Jast another link')
class TestExample:
# тестовый метод. Задаем ему имя и важность
@Report.title('Simple test google')
@Report.severity('CRITICAL')
def test_simple_request(self):
url = 'https://google.com'
method = 'GET'
want = 200
# добавляем описание в отчет со всей необходимой
# информацией
Report.description(url=url, method=method, other='other information')
# создаем новый объект класса Action
action = Action(url=url)
# выполняем запрос
response = action.request(method=method)
# получаем код ответа
got = response.status_code
# вставляем шаг теста в отчет
with Report.step('Checking response'):
# проверяем код ответа
Assert.compare(
variable_first=want,
comparison_sign='==',
variable_second=got,
text_error='Response status code is not equal to expected'
)
Итог
Данный инструмент ускоряет разработку тестовых скриптов для API тестов и стандартизирует вид тестового отчета на всех проектах. Наши тесты гоняются в CI/CD (Jenkins) и запускаются автоматически по событиям. Остается только смотреть отчеты и поддерживать тесты в актуальном состоянии.
Ссылка на репозиторий github
P.S.
Спасибо за ваше внимание. Буду рад услышать ваши мнения, предложения и замечания