Введение в тестирование контрактов, часть 1: встречаем участников |
09.12.2021 00:00 |
Автор: Баз Дейкстра (Bas Dijkstra) В этой серии статей вы столкнетесь с выдуманным, но реалистичным сценарием использования контрактного тестирования с Pact и Pactflow. За последние примерно десять лет архитектура программных систем перешла от монолитной к сервисно-ориентированной, а затем – к сильно распределенной и зачастую основанной на микросервисах. В прошлом команда или отдел отвечали за разработку и поставку системы целиком, а сейчас эта ответственность зачастую распределена между разными командами, работающими на разные отделы и зачастую – на разные компании. Этот распределенный подход к разработке ПО имеет ряд существенных преимуществ, особенно в плане гибкости и масштабируемости:
Помимо этих, есть и другие плюсы. Однако этот подход к разработке несет и проблемы, особенно в интеграции и end-to-end тестировании. Чтобы пристальнее взглянуть на эти проблемы и пути их решения, возьмем для примера приложение, состоящие из нескольких неплотно связанных компонентов. Приложение Эта и последующие статьи в серии будут вертеться вокруг онлайн-магазина, продающего и доставляющего бутерброды в США. Приложение спроектировано и разработано на основе микросервисной архитектуры. Изначально мы сконцентрируемся на трех компонентах – частях этой архитектуры. Пользовательский API (потребитель) Одна из ключевых задач нашего онлайн-магазина – это отслеживание пользовательских данных, не только ради доставки заказов правильному человеку, но и для отслеживания повторных продаж, промо-акций и рекламных инструментов. Этот компонент потребляет данные, поступающие из API Address, о котором мы поговорим позже и который увязывает платежные адреса с покупателями. Одна из задач этого пользовательского API – это выдавать данные сайту и мобильному приложению, чтобы пользователи могли видеть и редактировать свои данные. Пользовательский API разработан и запущен, в соответствии с модой на DevOps, командой "Пользователь", которая работает в головном офисе нашей компании по доставке бутербродов. API заказов (потребитель) Если наш магазин не сможет принимать и обрабатывать заказы, мы вскоре разоримся. Чтобы отслеживать заказы и все сопутствующие данные, мы используем Order API. Этот API тоже потребитель данных Address API, и используется для отслеживания адресов конкретных заказов. Данные о заказе также выдаются в веб онлайн-магазина и мобильное приложение, которыми люди пользуются для заказа бутербродов. Order API разработан и запущен командой Order. Как и команда Customer, они работают в головном офисе нашей компании. API адресов (провайдер) Как уже упоминалось, и Customer, и Order API потребляют данные о платежах и адресах доставки соответственно. Эти данные предоставляются Address API, предоставляющим следующие операции создания, чтения, обновления и удаления (CRUD) для адресов: GET /address/{id} Эта операция создает новый адрес в базе данных. Она принимает примерно такой запрос (все поля обязательные): { Эта операция обновляет существующий адрес в базе данных. Запрос аналогичен запросу для POST. DELETE /address/{id} И, наконец, API также дает возможность удалить из базы существующий адрес. Компания Address API разработан и запущен командой Address. В отличие от команд Customer и Order, эта команда работает в подразделении на другом конце страны. Ниже – графическое представление взаимоотношений между вышеописанными компонентами:
Процесс тестирования Все команды, ответственные за разработку онлайн-магазина бутербродов, включая команды Customer, Order и Address, делают все необходимое для тестирования разрабатываемых ими компонентов. Они пишут юнит-тесты и функциональные приемочные тесты, проводят статический анализ кода и проверку его оформления, и даже выполняют тестирование безопасности и производительности – все это встроено в их цепи поставки. Интеграция и end-to-end тестирование, однако – дело другое. Команды страдают от ряда проблем, пытаясь создавать и запускать эти тесты:
Эти проблемы приводят к низкому покрытию проекта интеграционными и end-to-end тестами, и компания уже страдала от последствий, когда проблемы интеграции просочились на прод. Следовательно, компании нужно решение получше… Мы подробно разберем, как команды справляются с этими проблемами, во второй статьей серии. |