grail - codefest'2015
TRANSCRIPT
Grail: шаги для ваших Python-тестов
Игорь Хрол QA Automation Team Lead
Wargaming.NET
О себе • Игорь Хрол • QA Automation Team Lead в
Wargaming.NET • 9 лет в отрасли • Инженер, архитектор, менеджер,
консультант, тренер • Пишу код с 12-ти лет • www.khroliz.com
Жила-была…
Команда автоматизации тестирования
…и получала она на вход задачи
JIRA-1 Created
JIRA-2 Created
JIRA-3 Created
…и получала она на вход задачи
…а отдавала в статусе Resolved
JIRA-1
Created
JIRA-2 Created
JIRA-3 Created
JIRA-1 Resolved
JIRA-2 Resolved
JIRA-3 Resolved
…и не понимали Проекты, когда они получат автоматизацию
…и не понимала Команда, что от неё хотели Проекты
…«ручные» QA-соратники вне команды не умели автоматизировать, хотя и очень хотели
…требовалось написать детальные тест-кейсы, чтобы автоматизатор заавтоматизировал, а времени не хватало
Проект 2 Проект 1
…и разошлись автоматизаторы по Проектам, дабы на местах распространять знания и автотесты
Проект 5 Проект 4 Проект 3
Проект 1
Проект 2 Проект 1
…но дабы не терять связей объединились они в Орден, несущий знания всем и сразу!
Проект 5 Проект 4 Проект 3
…и нашёл Орден Грааль, который помогает нести автотесты в массы и привлекать новых служителей!
…и поделился Орден Граалем со всем миром, чтобы сверкал он ещё ярче!
https://github.com/wgnet/grail
И как он выглядит?
Grail
Позволяет писать автотесты на основе шагов
Grail
Позволяет писать автотесты на основе шагов
@step - декоратор, превращающий метод или функцию в шаг
Аналоги: Thucydides (Java)
http://www.thucydides.info/
Многофункциональный комбайн
Аналоги: Allure
http://allure.qatools.ru/
Отчёты для ваших тестов
Аналоги: Allure
http://allure.qatools.ru/
Отчёты для ваших тестов
Когда-нибудь можно интегрировать с Grail
Базовый пример
Базовый пример
А зачем?
Как обычно выглядит процесс написания автотестов…
«Ручной» QA
Как обычно выглядит процесс написания автотестов…
«Ручной» QA
Тест Кейс
Как обычно выглядит процесс написания автотестов…
«Ручной» QA
Тест Кейс Auto QA
Как обычно выглядит процесс написания автотестов…
«Ручной» QA
Тест Кейс Auto QA Тест Скрипт
Test Case vs Test Script Step 1: login to application def login_to_application():
…
Step 2: verify user is logged in def verify_user_is_logged_in(): …
Step 3: do some important thing def do_some_important_thing(): …
Test Case vs Test Script Step 1: login to application def login_to_application():
…
Step 2: verify user is logged in def verify_user_is_logged_in(): …
Step 3: do some important thing def do_some_important_thing(): …
Как-то оно похоже..
Test Case vs Test Script Step 1: login to application def login_to_application():
…
Step 2: verify user is logged in def verify_user_is_logged_in(): …
Step 3: do some important thing def do_some_important_thing(): …
Как-то оно похоже.. Надо писать два раза…
Test Case vs Test Script Step 1: login to application def login_to_application():
…
Step 2: verify user is logged in def verify_user_is_logged_in(): …
Step 3: do some important thing def do_some_important_thing(): …
Как-то оно похоже.. Надо писать два раза… И исправлять в двух местах…
Как решить?
А давайте генерировать тест-кейс из кода!
«Ручной»
QA
Как решить?
А давайте генерировать тест-кейс из кода!
«Ручной»
QA Тест Скрипт
Как решить?
А давайте генерировать тест-кейс из кода!
«Ручной»
QA Тест Скрипт Auto QA
Как решить?
А давайте генерировать тест-кейс из кода!
«Ручной»
QA Тест Скрипт Auto QA
Реализация Шагов
Плюсы подхода
• Нет дублирования работы
Плюсы подхода
• Нет дублирования работы
• Повышается технический уровень QA
Плюсы подхода
• Нет дублирования работы
• Повышается технический уровень QA
• Нет новых «языков» вроде BDD-style, Keyword Driven и прочего…
Как это выглядит…
Как это выглядит…
Жёсткие рамки
Вся логика тестов должна быть внутри шагов
Жёсткие рамки
Вся логика тестов должна быть внутри шагов
export_mode = True
• Холостой прогон тестов, без выполнения шагов
export_mode = True
• Холостой прогон тестов, без выполнения шагов
• Проверка того, что все пишут тесты корректно
export_mode = True
Тесты в export_mode должны быть passed
Запуск в CI по комитам
export_mode = True output тестов в export_mode можно считать «ручным» тест-кейсом >> some actions
>> verify result correctness (4)
export_mode = True output тестов в export_mode можно считать «ручным» тест-кейсом >> some actions
>> verify result correctness (4)
И отправить в вашу любимую Test Management System!
Grail может больше!
Вы можете адаптировать вывод шагов
Логирование параметров и результатов шагов
Где хочешь!
Шаги можно хранить, где угодно
step_group
Объединяет шаги в группы
step_group
description
PASSED login to application
PASSED Some tricky actions with the application which I can't put to method name
format_description
PASSED Some info: value, another info: kw_value
value
kw_value
100500
Ну и ещё пара возможностей…
Выключается в fixtures
• Шаги ведут себя как обычные методы-функции в
– setup_package (_module, _class)
– teardown_package (_module, _class)
– teardown
Выключается в fixtures
• Шаги ведут себя как обычные методы-функции в
– setup_package (_module, _class)
– teardown_package (_module, _class)
– teardown
• Исключение: setup
treat_nested_steps_as_methods
PASSED external step
log_output
PASSED log output -> Important output
PASSED do not log output
Итого по Grail
Итого по Grail • Пишем код автотестов сразу
Итого по Grail • Пишем код автотестов сразу
Долой лишние бумажки и документы!
Итого по Grail • Пишем код автотестов сразу
Долой лишние бумажки и документы!
• Подключаем «ручных» тестировщиков к кодированию
Итого по Grail • Пишем код автотестов сразу
Долой лишние бумажки и документы!
• Подключаем «ручных» тестировщиков к кодированию
Долой псевдоязыки (BDD) и Keyword-driven!
Итого по Grail • Пишем код автотестов сразу
Долой лишние бумажки и документы!
• Подключаем «ручных» тестировщиков к кодированию
Долой псевдоязыки (BDD) и Keyword-driven!
• Контроль кода автотестов в Continuous Integration
Итого по Grail • Пишем код автотестов сразу
Долой лишние бумажки и документы!
• Подключаем «ручных» тестировщиков к кодированию
Долой псевдоязыки (BDD) и Keyword-driven!
• Контроль кода автотестов в Continuous Integration
• Открытый и бесплатный
Спасибо! Q&A
Ссылки: – https://github.com/wgnet/grail – http://wgnet.github.io/grail/ – https://pypi.python.org/pypi/grail
Контакты: Игорь Хрол [email protected] [email protected] skype: igor.khrol http://www.khroliz.com