Files
docs/infrastructure/autotesting.md
T
2026-06-04 13:22:23 +03:00

108 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Автотестирование Sova
Ветка внедрения: **`issues/27-test`** в репозиториях `k8s/sova-*`.
## Правило по контурам
| Контур (тег) | Тесты в CI | E2E |
|--------------|------------|-----|
| **`*-test`** | Unit + integration (backend), Jest (adminpanel), PHPUnit (cabinet) | Smoke + full (Playwright, mocks) |
| **`*-stage`** | То же pre-deploy | Только smoke read-only |
| **`*-prod`** | **Нет** автотестов | **Нет** |
Тесты **никогда** не гоняются на production-окружении. Запуск привязан к git-тегам `backend-v*`, `adminpanel-v*`, … в Gitea Actions.
## Пирамида
### 1. Backend (`sova-backend`)
- **Инструменты:** PHPUnit 12, Zenstruck Foundry (далее).
- **Unit:** `tests/Unit`, `tests/Service` — без БД.
- **Integration:** `tests/Controller`, `tests/Integration`с PostgreSQL в CI (только тег `*-test`, `continue-on-error` на старте).
- **Логи E2E:** `App\Log\TestTraceProcessor` — заголовки `X-Is-Auto-Test`, `X-Test-Trace-Id``extra.is_test`, `extra.test_trace_id` в Loki.
```bash
composer phpunit:unit
composer phpunit:coverage # var/coverage/clover.xml
```
**CI:** `.gitea/workflows/build.yml` — job `test` на `test|stage`, артефакт `backend-coverage-*` (14 дней).
### 2. adminPanel (`sova-adminpanel`)
- **Инструменты:** Jest + React Testing Library (миграция на Vitest — в roadmap).
- **CI:** `npm run test:ci` (coverage lcov), lint, build до образа.
### 3. E2E (`sova-e2e`)
- **Инструменты:** Playwright.
- **Проекты:** `smoke-readonly` (stage), `full-e2e` (test, сценарии в `tests/e2e/`).
- **CI:** `.gitea/workflows/e2e-tests.yml``workflow_dispatch` или тег `e2e-v*-*`.
Локально:
```bash
cd k8s/sova-e2e
npm install && npx playwright install chromium
export API_BASE_URL=http://192.168.252.6 API_HOST=api.test.sova.local
npm run test:smoke
```
## Loki (Grafana Explore)
После деплоя с прогоном E2E:
```logql
{namespace="sova-test"} | json | extra_is_test="true" | extra_test_trace_id="<GITHUB_RUN_ID>"
```
## CI/CD: две фазы
```mermaid
flowchart LR
tag[Git tag *-test] --> pre[Pre-deploy: unit/coverage]
pre --> build[Build image]
build --> deploy[sova-deploy GitOps]
deploy --> e2e[Post-deploy: sova-e2e]
```
1. **Pre-deploy** — в workflow каждого приложения (`build.yml`).
2. **Post-deploy** — репозиторий `sova-e2e`, ожидание Argo CD (`scripts/wait-for-argocd.sh`), отчёт Playwright HTML в artifacts.
## Проверка деплоя на test (локальная ферма)
После `./scripts/release-tag.sh backend backend-v1.0.6-test test` (и аналоги для adminpanel, cabinet, docs):
| Проверка | Команда / URL |
|----------|----------------|
| Образы в кластере | `kubectl get deploy -n sova-test` → теги `*-v1.0.x-test` |
| API smoke | `curl -H "Host: api.test.sova.local" http://192.168.252.6/news/list` |
| admin login | `curl -H "Host: admin.test.sova.local" http://192.168.252.6/login` |
| Docs | `curl -H "Host: docs.sova.local" http://192.168.252.6/` (или `docs.test.sova.local` после sync ingress) |
| Playwright | `cd sova-e2e && npm run test:smoke` |
Gitea Actions: артефакты `backend-coverage-*`, `adminpanel-coverage-*` (14 дней).
## Покрытие (test contour)
При теге `backend-v1.0.x-test` / `adminpanel-v1.0.x-test` в Gitea Actions → **Artifacts**:
- `backend-coverage-<tag>/` — Clover + HTML
- `adminpanel-coverage-<tag>/` — lcov
Просмотр: скачать артефакт job `test` или открыть summary в логе (`coverage` text-summary).
## Дорожная карта
| Месяц | Задачи |
|-------|--------|
| **1** (текущая ветка) | PHPUnit unit + coverage, Jest CI, TestTraceProcessor, sova-e2e smoke, документация |
| **2** | PG в runner, миграции, SpecialistRepository integration; 3 smoke в пайплайне |
| **3** | Full E2E JWT/CRUD/запись; nightly test; Telegram alerts |
## Связанные страницы
- [CI/CD и Loki (local-k8s)](./local-k8s/ci-and-logs)
- [Gitea CI (test-contour)](./test-contour/guides/gitea-ci)
- [Backend content CRUD](../apps/backend-content-crud)