- Add 6 fixtures to integration conftest: superset_db_url, superset_secret_key, superset_admin_password, superset_container (init+web), superset_url, superset_admin_headers - Two-container architecture: init (db upgrade → create-admin → init) + web (superset run -p 8088) - Superset 4.1.2 pinned (6.x incompatible: no psycopg2, SUPERSET__ prefix required) - 8 integration tests cover health, form-login auth, SupersetClient construction - Document decision in ADR-0012 with architecture rationale, rejected alternatives, and migration path to Superset 6.x - Update docs/architecture.md with testing infrastructure overview
2.6 KiB
2.6 KiB
[DEF:DocArchitecture:Module]
@TIER: STANDARD
@PURPOSE: Placeholder architecture document reserved for future normalized project architecture guidance.
@RELATION: DEPENDS_ON -> [DEF:Std:Architecture:Standard]
Architecture guidance currently lives in .ai/standards/architecture.md and .ai/MODULE_MAP.md.
Интеграционное тестирование с Testcontainers
Проект использует Testcontainers для интеграционных тестов, требующих реальных сервисов (PostgreSQL, ClickHouse, Apache Superset).
Принцип
Каждая тестовая сессия получает изолированные Docker-контейнеры на случайных портах. Контейнеры уничтожаются после завершения сессии. Это гарантирует отсутствие утечек состояния между запусками.
Поддерживаемые сервисы
| Сервис | Образ | Scope | Конфигурация |
|---|---|---|---|
| PostgreSQL | postgres:16-alpine |
session | backend/tests/integration/conftest.py |
| ClickHouse | clickhouse/clickhouse-server:24.3 |
module | test_translate_clickhouse.py |
| Apache Superset | apache/superset:4.1.2 |
session | backend/tests/integration/conftest.py |
Apache Superset Testcontainers
Решение: ADR-0012 — Superset Testcontainers
Архитектура:
Test Session
├── PostgresContainer (общий) # DB: superset_meta
├── Init Container (краткоживущий) # db upgrade → create-admin → init
└── Web Container (на всю сессию) # superset run -p 8088
Запуск:
cd backend && source .venv/bin/activate
python -m pytest tests/integration/test_superset_integration.py -v
# 8 passed in ~25s
Доступные fixtures:
superset_db_url— PostgreSQL URI для метаданных Supersetsuperset_container— запущенный веб-сервер Supersetsuperset_url—http://host:portsuperset_admin_headers— авторизованная сессия (admin:admin123)
Ограничения:
- JWT-авторизация (
/api/v1/security/login) требует дополнительной конфигурации FAB-permission'ов - Метаданные хранятся в SQLite (образ 4.1.2 не содержит psycopg2)