4.8 KiB
Соннет: анализ сравнительного тестирования Polygon ↔ реальный Nubes API
Адресат: Claude Sonnet 4.6 (новый чат) ⛔ Режим: диалог. Задавай встречные вопросы если нужно уточнение. ⛔ НЕ редактировать файлы. Только анализ и советы в чат.
Контекст
Polygon (v0.5.4) — эмулятор REST API облачной платформы Nubes.
3 стенда: dev (37 сервисов), test (37), prod (35). YAML-конфиги генерируются
из терраформ-репы (~/tf_provider/generated/{dev,test,prod}/resources_yaml/).
Реальное API:
https://lk-api-gateway-dev.ngcloud.ru/api/v1/svchttps://lk-api-gateway-test.ngcloud.ru/api/v1/svchttps://lk-api-gateway.ngcloud.ru/api/v1/svc
Токены в secrets/{dev,test,prod}.token.
Что сделано
Написан скрипт compare_test.py который сравнивает read-only эндпоинты
полигона и реального API:
GET /services— список сервисовGET /services/{id}— операции (svcOperationId, operation, kind, action)GET /instanceOperations/default/{id}— cfsParams (id, код, dataType, isRequired)
Первый прогон показал:
- dev: операции совпадают, но у 2 параметров
dataType: Noneвместо"string" - test: аналогично
- prod: чисто, расхождений нет
Также обнаружено что реальный API возвращает HTML-entities в dataType
(integer >= 0), а полигон — чистый текст (integer >= 0).
Полигон здесь правильнее реального API.
Ключевой нюанс: идеология стендов
Стенды НЕ идентичны. Dev опережает test, test опережает prod. Новые сервисы и параметры появляются сначала в dev, потом через какое-то время попадают в test, и только затем в prod. Поэтому:
- Если в dev-полигоне и dev-реальном API есть расхождения — это может быть нормально (реальный API уже обновился, а YAML в полигоне — ещё нет)
- Если в prod есть расхождения — скорее всего баг в генерации YAML
- Нужно различать «допустимое отставание» и «реальный баг»
Что нужно от тебя
1. Стратегия сравнительного тестирования
Как правильно сравнивать полигон с реальным API учитывая что:
- Стенды могут и должны отличаться
- YAML генерируется не в реальном времени, а батчами из терраформа
- Некоторые сервисы есть в реальном API но НЕ в терраформе (их не тестируем)
Что должно считаться PASS, а что FAIL? Какие допуски?
2. Какие ещё эндпоинты сравнивать?
Сейчас сравниваются 3 read-only эндпоинта. Какие ещё можно безопасно сравнять? Что ещё есть в реальном API такого что полигон должен повторять один-в-один?
3. Периодичность и автоматизация
Как часто запускать сравнение? При каких событиях (изменение терраформа, деплой полигона)? Должно ли это быть частью CI?
4. dataType: None
В from_stands.py для некоторых параметров dataType падает в None
(хотя дефолт "string"). Где конкретно искать причину?
5. Общие советы
Что ещё мы упускаем в тестировании полигона? Какие сценарии, краевые случаи, проверки контрактов?
Формат диалога
Ты можешь:
- Сразу дать развёрнутый ответ по всем пунктам
- Или задать уточняющие вопросы — и тогда я отвечу, а ты продолжишь
Я хочу чтобы в итоге получился конкретный план действий: что тестировать, как часто, что считать ошибкой, что — допустимым расхождением.