Организация контрактного тестирования OpenAPI в CI при мульти-репозиториях
Краткий ответ
Спецификацию OpenAPI следует хранить как отдельный артефакт и интегрировать её в процессы CI. Используйте инструменты типа schemathesis, Dredd или Prism для запуска контрактных тестов, которые проверяют соответствие ответов сервера схеме при каждом pull request.
Развёрнуто
Краткий ответ
Для эффективного контрактного тестирования OpenAPI в CI при нескольких репозиториях спецификация должна храниться централизованно как артефакт. Инструменты schemathesis, Dredd или Prism запускаются в пайплайне CI, чтобы проверять соответствие API ответов спецификации на каждом этапе, особенно в pull request.
Как это работает
Контрактное тестирование в мульти-репозиторной архитектуре подразумевает, что спецификация API доступна независимо от реализации сервисов. Она хранится как отдельный артефакт (например, в отдельном репозитории или как версия в артефактном менеджере).
При каждом событии CI (например, pull request) запускаются тесты с использованием инструментов:
schemathesis— генерация тестов из OpenAPI и проверка схемы ответовDredd— проверка REST API на соответствие OpenAPI спецификацииPrism— мок-сервер и валидация на основе спецификации
Тесты валидируют, что ответы API строго соответствуют описанным типам, структурам и статусам, предотвращая рассогласование между сервисами.
| Инструмент | Особенности | Применение |
|---|---|---|
| schemathesis | Генерация тестов на основе схемы | Автоматическое тестирование |
| Dredd | Сравнение реального API с описанием | Контрактное тестирование |
| Prism | Мокирование и валидация ответов | Локальная разработка и тесты |
Пример
# Пример CI pipeline (GitLab CI)
stages:
- test
contract_test:
stage: test
image: python:3.9
script:
- pip install schemathesis
- schemathesis run openapi.yaml --base-url $API_BASE_URL
only:
- merge_requests
Данный пример демонстрирует запуск schemathesis для проверки актуального API на соответствие спецификации при каждом merge request.
Что важно знать на собеседовании
- Спецификация OpenAPI должна быть централизованным артефактом, доступным для всех репозиториев.
- Инструменты контрактного тестирования позволяют обнаружить рассогласования на ранних этапах разработки.
- Важно интегрировать проверку API в CI/CD, чтобы тесты запускались автоматически на каждом PR.
- Выбор инструмента зависит от потребностей — schemathesis удобен для генерации тестов, Dredd — для строгой проверки контракта.
- Контрактное тестирование помогает избежать регрессий и поддерживает согласованность API между командами.
Тема: Инструменты QA | Уровень: senior