Как интегрироваться со сторонними системами
Что проверяют
Для тестировщика вопрос не про написание клиента, а про то, как проверять чужую систему, которую вы не контролируете. Интервьюер хочет услышать про контракт, заглушки и негативные сценарии. Следом почти всегда спрашивают: а если у партнёра нет тестового стенда?
Как отвечать
Стройте ответ от контракта к уровням проверок:
- контракт: спецификация OpenAPI или WSDL, форматы, коды ошибок, лимиты запросов, SLA. Первым делом выясните, что считается успехом, что ошибкой и какие поля обязательны;
- заглушки: WireMock или MockServer вместо реального партнёра. Так проверяются ответы, которые на живом стенде не получить: таймаут,
500,429, обрезанный JSON, пустое тело; - контрактные тесты: Pact или аналог фиксируют ожидания потребителя, и изменение API на стороне партнёра ловится до релиза;
- песочница партнёра: интеграционные тесты на ключевые сценарии. Их немного, потому что такие стенды нестабильны и ограничены по частоте запросов;
- асинхронные сценарии: вебхуки и колбэки приходят с задержкой, дважды или в другом порядке. Проверьте, что повторный колбэк не создаёт вторую запись;
- что уходит от нас: WireMock позволяет проверить сам запрос, который отправило приложение, а не только реакцию на ответ;
- наблюдаемость: сквозной correlation id в логах, чтобы по жалобе найти конкретный обмен.
Инструменты для API: Postman с прогоном через Newman в CI, REST Assured для автотестов на Java, SoapUI для SOAP. Для платёжной интеграции обязателен набор тестовых карт и сценариев отказа от провайдера. Если есть свой опыт, назовите систему, какие дефекты нашли и где именно они прятались.
Где спотыкаются
Рассказывают только про успешный сценарий. Интеграции ломаются на таймаутах, повторах и неожиданных форматах, и именно это хотят услышать.
Строят всю проверку на стенде партнёра. Он падает, упирается в лимиты, и прогон краснеет без единого дефекта в вашем коде.
Забывают про идемпотентность повторов. Клиент повторил запрос после таймаута, партнёр выполнил оба, и деньги списались дважды.