71
Grail: шаги для ваших Python-тестов Игорь Хрол QA Automation Team Lead Wargaming.NET

Grail - CodeFest'2015

Embed Size (px)

Citation preview

Page 1: Grail - CodeFest'2015

Grail: шаги для ваших Python-тестов

Игорь Хрол QA Automation Team Lead

Wargaming.NET

Page 2: Grail - CodeFest'2015

О себе • Игорь Хрол • QA Automation Team Lead в

Wargaming.NET • 9 лет в отрасли • Инженер, архитектор, менеджер,

консультант, тренер • Пишу код с 12-ти лет • www.khroliz.com

Page 3: Grail - CodeFest'2015
Page 4: Grail - CodeFest'2015

Жила-была…

Команда автоматизации тестирования

Page 5: Grail - CodeFest'2015

…и получала она на вход задачи

JIRA-1 Created

JIRA-2 Created

JIRA-3 Created

Page 6: Grail - CodeFest'2015

…и получала она на вход задачи

…а отдавала в статусе Resolved

JIRA-1

Created

JIRA-2 Created

JIRA-3 Created

JIRA-1 Resolved

JIRA-2 Resolved

JIRA-3 Resolved

Page 7: Grail - CodeFest'2015

…и не понимали Проекты, когда они получат автоматизацию

Page 8: Grail - CodeFest'2015

…и не понимала Команда, что от неё хотели Проекты

Page 9: Grail - CodeFest'2015

…«ручные» QA-соратники вне команды не умели автоматизировать, хотя и очень хотели

Page 10: Grail - CodeFest'2015

…требовалось написать детальные тест-кейсы, чтобы автоматизатор заавтоматизировал, а времени не хватало

Page 11: Grail - CodeFest'2015

Проект 2 Проект 1

…и разошлись автоматизаторы по Проектам, дабы на местах распространять знания и автотесты

Проект 5 Проект 4 Проект 3

Проект 1

Page 12: Grail - CodeFest'2015

Проект 2 Проект 1

…но дабы не терять связей объединились они в Орден, несущий знания всем и сразу!

Проект 5 Проект 4 Проект 3

Page 13: Grail - CodeFest'2015

…и нашёл Орден Грааль, который помогает нести автотесты в массы и привлекать новых служителей!

Page 14: Grail - CodeFest'2015

…и поделился Орден Граалем со всем миром, чтобы сверкал он ещё ярче!

https://github.com/wgnet/grail

Page 15: Grail - CodeFest'2015

И как он выглядит?

Page 16: Grail - CodeFest'2015

Grail

Позволяет писать автотесты на основе шагов

Page 17: Grail - CodeFest'2015

Grail

Позволяет писать автотесты на основе шагов

@step - декоратор, превращающий метод или функцию в шаг

Page 18: Grail - CodeFest'2015

Аналоги: Thucydides (Java)

http://www.thucydides.info/

Многофункциональный комбайн

Page 19: Grail - CodeFest'2015

Аналоги: Allure

http://allure.qatools.ru/

Отчёты для ваших тестов

Page 20: Grail - CodeFest'2015

Аналоги: Allure

http://allure.qatools.ru/

Отчёты для ваших тестов

Когда-нибудь можно интегрировать с Grail

Page 21: Grail - CodeFest'2015

Базовый пример

Page 22: Grail - CodeFest'2015

Базовый пример

Page 23: Grail - CodeFest'2015

А зачем?

Page 24: Grail - CodeFest'2015

Как обычно выглядит процесс написания автотестов…

«Ручной» QA

Page 25: Grail - CodeFest'2015

Как обычно выглядит процесс написания автотестов…

«Ручной» QA

Тест Кейс

Page 26: Grail - CodeFest'2015

Как обычно выглядит процесс написания автотестов…

«Ручной» QA

Тест Кейс Auto QA

Page 27: Grail - CodeFest'2015

Как обычно выглядит процесс написания автотестов…

«Ручной» QA

Тест Кейс Auto QA Тест Скрипт

Page 28: Grail - CodeFest'2015

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(): …

Page 29: Grail - CodeFest'2015

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(): …

Как-то оно похоже..

Page 30: Grail - CodeFest'2015

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(): …

Как-то оно похоже.. Надо писать два раза…

Page 31: Grail - CodeFest'2015

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(): …

Как-то оно похоже.. Надо писать два раза… И исправлять в двух местах…

Page 32: Grail - CodeFest'2015

Как решить?

А давайте генерировать тест-кейс из кода!

«Ручной»

QA

Page 33: Grail - CodeFest'2015

Как решить?

А давайте генерировать тест-кейс из кода!

«Ручной»

QA Тест Скрипт

Page 34: Grail - CodeFest'2015

Как решить?

А давайте генерировать тест-кейс из кода!

«Ручной»

QA Тест Скрипт Auto QA

Page 35: Grail - CodeFest'2015

Как решить?

А давайте генерировать тест-кейс из кода!

«Ручной»

QA Тест Скрипт Auto QA

Реализация Шагов

Page 36: Grail - CodeFest'2015

Плюсы подхода

• Нет дублирования работы

Page 37: Grail - CodeFest'2015

Плюсы подхода

• Нет дублирования работы

• Повышается технический уровень QA

Page 38: Grail - CodeFest'2015

Плюсы подхода

• Нет дублирования работы

• Повышается технический уровень QA

• Нет новых «языков» вроде BDD-style, Keyword Driven и прочего…

Page 39: Grail - CodeFest'2015
Page 40: Grail - CodeFest'2015

Как это выглядит…

Page 41: Grail - CodeFest'2015

Как это выглядит…

Page 42: Grail - CodeFest'2015
Page 43: Grail - CodeFest'2015

Жёсткие рамки

Вся логика тестов должна быть внутри шагов

Page 44: Grail - CodeFest'2015

Жёсткие рамки

Вся логика тестов должна быть внутри шагов

Page 45: Grail - CodeFest'2015

export_mode = True

• Холостой прогон тестов, без выполнения шагов

Page 46: Grail - CodeFest'2015

export_mode = True

• Холостой прогон тестов, без выполнения шагов

• Проверка того, что все пишут тесты корректно

Page 47: Grail - CodeFest'2015

export_mode = True

Тесты в export_mode должны быть passed

Page 48: Grail - CodeFest'2015

Запуск в CI по комитам

Page 49: Grail - CodeFest'2015

export_mode = True output тестов в export_mode можно считать «ручным» тест-кейсом >> some actions

>> verify result correctness (4)

Page 50: Grail - CodeFest'2015

export_mode = True output тестов в export_mode можно считать «ручным» тест-кейсом >> some actions

>> verify result correctness (4)

И отправить в вашу любимую Test Management System!

Page 51: Grail - CodeFest'2015
Page 52: Grail - CodeFest'2015

Grail может больше!

Вы можете адаптировать вывод шагов

Page 53: Grail - CodeFest'2015

Логирование параметров и результатов шагов

Page 54: Grail - CodeFest'2015

Где хочешь!

Шаги можно хранить, где угодно

Page 55: Grail - CodeFest'2015

step_group

Объединяет шаги в группы

Page 56: Grail - CodeFest'2015

step_group

Page 57: Grail - CodeFest'2015

description

PASSED login to application

PASSED Some tricky actions with the application which I can't put to method name

Page 58: Grail - CodeFest'2015

format_description

PASSED Some info: value, another info: kw_value

value

kw_value

100500

Page 59: Grail - CodeFest'2015

Ну и ещё пара возможностей…

Page 60: Grail - CodeFest'2015

Выключается в fixtures

• Шаги ведут себя как обычные методы-функции в

– setup_package (_module, _class)

– teardown_package (_module, _class)

– teardown

Page 61: Grail - CodeFest'2015

Выключается в fixtures

• Шаги ведут себя как обычные методы-функции в

– setup_package (_module, _class)

– teardown_package (_module, _class)

– teardown

• Исключение: setup

Page 62: Grail - CodeFest'2015

treat_nested_steps_as_methods

PASSED external step

Page 63: Grail - CodeFest'2015

log_output

PASSED log output -> Important output

PASSED do not log output

Page 64: Grail - CodeFest'2015

Итого по Grail

Page 65: Grail - CodeFest'2015

Итого по Grail • Пишем код автотестов сразу

Page 66: Grail - CodeFest'2015

Итого по Grail • Пишем код автотестов сразу

Долой лишние бумажки и документы!

Page 67: Grail - CodeFest'2015

Итого по Grail • Пишем код автотестов сразу

Долой лишние бумажки и документы!

• Подключаем «ручных» тестировщиков к кодированию

Page 68: Grail - CodeFest'2015

Итого по Grail • Пишем код автотестов сразу

Долой лишние бумажки и документы!

• Подключаем «ручных» тестировщиков к кодированию

Долой псевдоязыки (BDD) и Keyword-driven!

Page 69: Grail - CodeFest'2015

Итого по Grail • Пишем код автотестов сразу

Долой лишние бумажки и документы!

• Подключаем «ручных» тестировщиков к кодированию

Долой псевдоязыки (BDD) и Keyword-driven!

• Контроль кода автотестов в Continuous Integration

Page 70: Grail - CodeFest'2015

Итого по Grail • Пишем код автотестов сразу

Долой лишние бумажки и документы!

• Подключаем «ручных» тестировщиков к кодированию

Долой псевдоязыки (BDD) и Keyword-driven!

• Контроль кода автотестов в Continuous Integration

• Открытый и бесплатный

Page 71: Grail - CodeFest'2015

Спасибо! 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