test: нагрузочные/стресс-тесты (маркер load): массовый pipeline, apply_ops, конкуренция, HTTP-стресс
This commit is contained in:
@@ -41,3 +41,33 @@ pytest установлен в venv: `/home/naeel/nubes/contracts/.venv/bin/pyth
|
||||
- Каждый тест, работающий с БД, получает свою копию SQLite через фикстуру `db`
|
||||
(monkeypatch `DB_PATH` → `tmp_path`, `init_db()`).
|
||||
- LLM-вызовы в пайплайне подменяются через `monkeypatch.setattr("services.llm.call_llm", ...)` — сеть не используется.
|
||||
|
||||
## Нагрузочные тесты (`tests/load/`, маркер `load`)
|
||||
|
||||
Долгие стресс-тесты, реально нагружают SQLite/пайплайн. Запуск отдельно:
|
||||
|
||||
```bash
|
||||
pytest -m load -q # только нагрузочные
|
||||
pytest -m "not load" -q # быстрые юнит-тесты без нагрузочных
|
||||
```
|
||||
|
||||
| Файл | Что нагружает |
|
||||
|---|---|
|
||||
| `load/test_load_pipeline.py` | массовый `run_pipeline`: N контрактов × M допников (Fake LLM) — проверка, что `full_replace` не дублирует строки в масштабе |
|
||||
| `load/test_load_apply_ops.py` | массовые `apply_ops`: N ADD → N UPDATE → N DELETE, целостность `spec_events` |
|
||||
| `load/test_load_concurrency.py` | конкурентная запись в SQLite (WAL + `busy_timeout`), проверка отсутствия потери данных |
|
||||
| `load/stress_http.py` | standalone HTTP-стресс (`/upload`, `/health`) — параллельные запросы, RPS/ошибки/таймауты |
|
||||
|
||||
Масштаб через переменные окружения (дефолты — большие):
|
||||
|
||||
```bash
|
||||
LOAD_CONTRACTS=100 LOAD_SUPPS=20 LOAD_SERVICES=10 \
|
||||
LOAD_OPS=5000 LOAD_THREADS=16 LOAD_PER=200 \
|
||||
pytest -m load -q
|
||||
```
|
||||
|
||||
HTTP-стресс против локального/прод сервиса:
|
||||
|
||||
```bash
|
||||
python tests/load/stress_http.py --url http://127.0.0.1:5000 --n 1000 --threads 32 --size 100000
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user