doc: промпт Соннету — стратегия сравнительного тестирования Polygon ↔ Nubes API
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# Соннет: анализ сравнительного тестирования 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/svc`
|
||||
- `https://lk-api-gateway-test.ngcloud.ru/api/v1/svc`
|
||||
- `https://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. Общие советы
|
||||
|
||||
Что ещё мы упускаем в тестировании полигона? Какие сценарии, краевые
|
||||
случаи, проверки контрактов?
|
||||
|
||||
---
|
||||
|
||||
## Формат диалога
|
||||
|
||||
Ты можешь:
|
||||
- Сразу дать развёрнутый ответ по всем пунктам
|
||||
- Или задать уточняющие вопросы — и тогда я отвечу, а ты продолжишь
|
||||
|
||||
Я хочу чтобы в итоге получился **конкретный план действий**:
|
||||
что тестировать, как часто, что считать ошибкой, что — допустимым
|
||||
расхождением.
|
||||
Reference in New Issue
Block a user