хранение) 1 Новый тип хранения (паллеты) 2 Много складов 3 Новый тип склада (распределительный центр) 4 Склады в других странах (Казахстан, Беларусь) 5
хранение) 1 Новый тип хранения (паллеты) 2 Много складов 3 Новый тип склада (распределительный центр) 4 Склады в других странах (Казахстан, Беларусь) 5 Новый тип бизнеса (Ozon Fresh) 6
service 2 API-gateway N API-gateway 1 storage service M workflow • Много entity- и storage-сервисов • Сервисы бизнес процессов — под рабочие места сотрудников • Зависимости сервисов направленны всегда вниз • Workflow сервис для оркестрации процессов • Логика в API-Gateway
• Сервис бизнес процесса — не только автоматизация рабочего места сотрудника • Начали уходить от концепции слоев API-gateway 1 API-gateway N business process service X storage service M business process service Y
логические пачки Выбирается точка в процессе, в которой происходит синхронизация всей пачки Сложность из разных мест уходит в одну точку Сложный код синхронизации Cинхронизация с задержкой Синхронизация пачки — тяжелая операция
Перешли на Task-based API в некоторых сценариях • Сделали framework для упрощения разработки Id Type (text) Data (jsonb) Created_at Finished_at Failed_reason ‣ Dal model по умолчанию, можно расширять ‣ BLL model, реализованная по принципам богатой модели ‣ Базовая реализация ORM ‣ CRUD generic repository ‣ Интеграционные события создания и завершения саги, можно расширять ‣ Метрики и алерты из коробки
• Большая часть тестирования выполняется на конечных этапах разработки • Больше всего самых сложных и хрупких тестов • Вовлеченность тестировщиков низкая
Целиком флоу процесса • Фокус на проверке фронтовой части • Целиком флоу процесса • Фокус на проверке взаимодействия с внешними сервисами • Все основные бизнес-сценарии процесса • Тестируются все слои сервиса, начиная с клиента, на моках внешних сервисов • Интеграция с БД, Redis и пр. • Все методы репозитория, query handlers • По необходимости command handlers • Обязательна вся доменная логика • Любой нетривиальный код (command handlers, providers и т.д.)
• Тесты более высоких уровней должны фокусироваться на частях, которые не могут быть проверены на более низком уровне • Если на уровне выше была найдена ошибка, которую должен был обнаружить нижний уровень, но не обнаружил — обязательно добавляем тест именно на нижний уровень • Лучше избегать дублирования тестов на разных уровнях • Необходимое покрытие тестами всегда входит в definition of done задач
• Фокус на том, ЧТО делает система, а не на том, КАК она это делает • Тестируется весь «вертикальный столбик», взаимодействие всех слоев сервиса • Используют реальные собственные зависимости (БД, кэш, очереди и пр.) • Зависимости внешних сервисов мокируются
которые 1:1 соответствуют существующему бизнес-сценарию ‣ Given steps (Дано) — описание изначально состояния, контекста системы (seed) ‣ When steps (Когда) — тестируемое действие ‣ Then steps (Тогда) — ожидаемый результат на тестируемое действие ‣ And (И) — используется для последовательности действий 24