От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
Ядро автоматизации под микро-сервисную архитектуру
1. Software quality assurance days
21 Международная конференция
по вопросам качества ПО
sqadays.com
Москва. 26–27 мая 2017
Дмитрий Химион
Avito. Москва, Россия
Ядро автоматизации тестирования
под µ-сервисную архитектуру
2. Ядро автоматизации тестирования под микро-сервисную архитектуру
Дмитрий Химион
Head of quality assurance
Avito
Докладчик на конференциях:
62 проектов по автоматизации тестирования
+9 прототипов инструментов АТ
• SQA Days 13
• ITSM Forum
• SQA Days 14
• SQA Days 15
• SQA Days 16
• CodeFest 2015
• SQA Days 17
• Quality days
• SQA Days 18
• CodeFest 2016
• SQA Days 19
• QA FEST 2016
• SQA Days 20
3. Введение
"an implementation should be
conservative in its sending
behavior, and liberal in its
receiving behavior"
Ядро автоматизации тестирования под микро-сервисную архитектуру
Jon Postel
4. Введение
"an implementation should be
conservative in its sending
behavior, and liberal in its
receiving behavior"
Ядро автоматизации тестирования под микро-сервисную архитектуру
+ µServices =Avito
Jon Postel
5. • Что такое µ-сервисная архитектура
• Контракты для µ-сервисной архитектуры
• Предикаты для CDC-testing
• Имплементация автоматизации под CDC
• Учесть при разработке
• Итоги
• Вопросы
Ядро автоматизации тестирования под микро-сервисную архитектуру
План доклада
6. Ядро автоматизации тестирования под микро-сервисную архитектуру
Что такое µ-сервисная архитектура?
External
Service
Front-end
• Небольшая функция
• ≈ 500 LoC
7. Ядро автоматизации тестирования под микро-сервисную архитектуру
Переход к µ-сервисам
Back-endFront-end
External
Service
Monolithic
8. Ядро автоматизации тестирования под микро-сервисную архитектуру
Back-end
µS4
µS2µS1
µS3
µS9
µS5µS6
µS8
µS10
µS7
Переход к µ-сервисам
9. Ядро автоматизации тестирования под микро-сервисную архитектуру
µS4
µS2µS1 µS3
µS9
µS5 µS6
µS8 µS10µS7
Front-
end DB2
DB1
External
Service
Переход к µ-сервисам
10. Ядро автоматизации тестирования под микро-сервисную архитектуру
µS4
µS2µS1 µS3
µS9
µS5 µS6
µS8µS7
Front-
end DB2
DB1
External
Service
Переход к µ-сервисам
µS10
11. Ядро автоматизации тестирования под микро-сервисную архитектуру
µS4
µS2µS1 µS3
µS9
µS5 µS6
µS8µS7
Front-
end DB2
DB1
External
Service
Переход к µ-сервисам
µS10
12. Ядро автоматизации тестирования под микро-сервисную архитектуру
Контракты для µ-сервисной архитектуры
ServiceY
«Classic» Contracts
13. Ядро автоматизации тестирования под микро-сервисную архитектуру
Контракты для µ-сервисной архитектуры
µS10
ServiceY
«Classic» Contracts Consumer Driven Contracts
Consumer
Consumer
Consumer
Provider
14. Ядро автоматизации тестирования под микро-сервисную архитектуру
Контракты для µ-сервисной архитектуры
µS10
Consumer Driven Contracts
CDC
15. Ядро автоматизации тестирования под микро-сервисную архитектуру
Контракты для µ-сервисной архитектуры
µS10
Consumer Driven Contracts
CDC
CDC-testing
(для команды тестирования)
16. Ядро автоматизации тестирования под микро-сервисную архитектуру
Предикаты для CDC-testing
1. Наличие контрактов в
разработке
2. Договорённость работать по
CDC
17. Ядро автоматизации тестирования под микро-сервисную архитектуру
Предикаты для CDC-testing
Repository
push
Post-hook
auto-test
Jira task
1.
2.
?
1. Наличие контрактов в
разработке
2. Договорённость работать по
CDC
18. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
Test Automation
PACT framework
µS6
19. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
Test Automation
PACT framework
µS6
20. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
Test Automation
PACT framework
µS6
Test_1
Test…
Test_X
External service
21. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
Test Automation
Logger
PACT framework
µS6
Test_1
Test…
Test_X
23. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
Logger
PACT framework
UP TO YOU
24. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
Test Automation
Logger
PACT framework
Config
reader
µS6
Test_1
Test…
Test_X
25. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
Test Automation
Logger
PACT framework
Config
reader
µS6
State
:request
:response
Pact files
Test_1
Test…
Test_X
26. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
:request
:response
Pact files
27. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
:request
:response
Pact files
28. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
State
:request
:response
Pact files
29. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
Test Automation
Logger
PACT framework
Suite
runner
Config
reader
µS6
trigger
Test_1
Test…
Test_X
State
:request
:response
Pact files
event
30. Ядро автоматизации тестирования под микро-сервисную архитектуру
µS4
µS2µS1 µS3
µS9
µS5 µS6
µS8µS7
Front-
end DB2
DB1
External
Service
Перехода к µ-сервисам
µS10
31. Ядро автоматизации тестирования под микро-сервисную архитектуру
Имплементация автоматизации под CDC
Mocks/Stubs
Test Automation
PACT framework
µS6
µS8
µS10
µSX
µSY
Pact files
state
32. Ядро автоматизации тестирования под микро-сервисную архитектуру
Учесть при имплементации
• Контейнеры для изоляции тестирования
• Актуализация «Pact file» требований по контрактам
• Ввести процесс актуализации «States» и «Data Suites»
33. Ядро автоматизации тестирования под микро-сервисную архитектуру
Учесть при имплементации
• Контейнеры для изоляции тестирования
• Актуализация «Pact file» - требований по контрактам
• Ввести процесс актуализации «States» и «Data Suites»
34. Ядро автоматизации тестирования под микро-сервисную архитектуру
Учесть при имплементации
• Контейнеры для изоляции тестирования
• Актуализация «Pact file» требований по контрактам
• Ввести процесс актуализацию «States» и «Data Suites»
Pact files
Test Automation
Logger
PACT framework
Suite
runner
Config
reader
Data Suites = Data Driven Testing
•Positive
•Boundary
•Negative
35. Ядро автоматизации тестирования под микро-сервисную архитектуру
Учесть при имплементации
• Контейнеры для изоляции тестирования
• Актуализация «Pact file» требований по контрактам
• Ввести процесс актуализации «States» и «Data Suites»
Pact files
State
Test Automation
Logger
PACT framework
Suite
runner
Config
reader
State = • Precondition
• SetUp
• Fixture
36. Ядро автоматизации тестирования под микро-сервисную архитектуру
Итоги
• Post-hooks – часть решения
• CDC pattern в разработке – это необходимость
• Снижение склонности системы к появлению дефектов
• Возможность уйти от ручного тестирования изменений
38. Ядро автоматизации тестирования под микро-сервисную архитектуру
The benefits to this approach are that you know who all the consumers of your
service are, you’ll know when you make breaking changes so it is easier to make
changes and the contract is also a form of documentation. Secondly, you’ll know
exactly what functionality needs to be provided so you can implement the right
services needed by your consumers and can follow the YAGNI principle
Ruby Pact: https://github.com/realestate-com-au/pact
JVM Pact: https://github.com/DiUS/pact-jvm
.Net Pact: https://github.com/SEEK-Jobs/pact-net
Pact Go: https://github.com/pact-foundation/pact-go
Pact.js: https://github.com/pact-foundation/pact-js
Pact Swift: https://github.com/DiUS/pact-consumer-swift
Pact Python: https://github.com/pact-foundation/pact-python
Editor's Notes
Микро-сервисная архитектура – это современное представление SOA, с девизом микро-сервис = одна функция, один целостный функционал.
В чем идея – выкатывать много изменений функциональности быстро, изолированно от всего остального
Шашлык или шпажка с едой
В чем идея – выкатывать много изменений функциональности быстро, изолированно от всего остального
В чем идея – выкатывать много изменений функциональности быстро, изолированно от всего остального
как выглядит – нарисовать распил на микро-сервисы
Как работает – описать работу на картинке
В чем идея – выкатывать много изменений функциональности быстро, изолированно от всего остального
как выглядит – нарисовать распил на микро-сервисы
Как работает – описать работу на картинке
В чем идея – выкатывать много изменений функциональности быстро, изолированно от всего остального
как выглядит – нарисовать распил на микро-сервисы
Как работает – описать работу на картинке
В чем идея – выкатывать много изменений функциональности быстро, изолированно от всего остального
как выглядит – нарисовать распил на микро-сервисы
Как работает – описать работу на картинке
Что такое контракты – шаблон или методология разработки в рамках парадигмы микро-сервисов. Есть сервис и он описывает контракт и что он по нему предоставляет.
CDC для µ-серсисов – меняет подход и говорит, что Consumer запрашивает от Provider что ему необходимо от его сервиса, и Provider для окружающих делает то, что им нужно, а не то что он думает, что от его сервиса надо.
Что такое контракты – шаблон или методология разработки в рамках парадигмы микро-сервисов. Есть сервис и он описывает контракт и что он по нему предоставляет.
CDC для µ-серсисов – меняет подход и говорит, что Consumer запрашивает от Provider что ему необходимо от его сервиса, и Provider для окружающих делает то, что им нужно, а не то что он думает, что от его сервиса надо.
Что такое контракты – шаблон или методология разработки в рамках парадигмы микро-сервисов. Есть сервис и он описывает контракт и что он по нему предоставляет.
CDC для µ-серсисов – меняет подход и говорит, что Consumer запрашивает от Provider что ему необходимо от его сервиса, и Provider для окружающих делает то, что им нужно, а не то что он думает, что от его сервиса надо.
Что такое контракты – шаблон или методология разработки в рамках парадигмы микро-сервисов. Есть сервис и он описывает контракт и что он по нему предоставляет.
CDC для µ-серсисов – меняет подход и говорит, что Consumer запрашивает от Provider что ему необходимо от его сервиса, и Provider для окружающих делает то, что им нужно, а не то что он думает, что от его сервиса надо.
Требования к используемой методологии разработки - CDC
Требования к процессу разработки – коммит-хуки на добавление файлов контрактов
Требования к используемой методологии разработки - CDC
Требования к процессу разработки – коммит-хуки на добавление файлов контрактов
Тестирвоание API – упомянуть, что оно почти тоже самое cdc только немного под соусом
Описать тут про реализации PACT решений – их много и разные
Упомянуть, что много логики может быть реализовано на уровне клиента
Описать требования и учесть при реализации прямо тут
Тестирвоание API – упомянуть, что оно почти тоже самое cdc только немного под соусом
Описать тут про реализации PACT решений – их много и разные
Упомянуть, что много логики может быть реализовано на уровне клиента
Описать требования и учесть при реализации прямо тут
Тестирвоание API – упомянуть, что оно почти тоже самое cdc только немного под соусом
Описать тут про реализации PACT решений – их много и разные
Упомянуть, что много логики может быть реализовано на уровне клиента
Описать требования и учесть при реализации прямо тут
В чем идея – выкатывать много изменений функциональности быстро, изолированно от всего остального
как выглядит – нарисовать распил на микро-сервисы
Как работает – описать работу на картинке