🧪
Process Testing
Test matrix, smoke tests и quality gates
Test Matrix (Mandatory)
Каждый process template должен пройти через 4 типа тестов перед релизом:
✅
Happy Path
Нормальное выполнение процесса от start до succeeded.
Given:Валидный input, все сервисы доступны
When:Запуск процесса через /run или n8n
Then:- • status = succeeded
- • output соответствует schema
- • latency в пределах SLA
- • user получил ответ в Telegram
⚠️
Degraded Path
Выполнение с fallback (timeout, memory, model).
Scenarios:- • Ollama timeout → lighter model
- • Memory error → reduced num_predict
- • Model not found → fallback model
Then:- • status = succeeded OR degraded
- • degraded = true в ответе
- • fallback trace в automation_events
- • user получил честный degraded ответ
❌
Failure Path
Обработка критических ошибок.
Scenarios:- • Ollama недоступен
- • All fallback models exhausted
- • Invalid input schema
- • Safety policy violation
Then:- • status = failed
- • error_text заполнен
- • incident ticket создан
- • user получил информативное сообщение
👥
Group/Thread Path
Тестирование в групповых чатах (если процесс групповой).
Scenarios:- • Команда без @mention → hint или игнор
- • Команда с @bot → адресный ответ
- • Thread reply → ответ в thread
Then:- • Нет fan-out (один бот отвечает)
- • Chat_id корректно определён
- • Thread_id сохранён
Done Criteria
Тест считается пройденным, если:
✓Есть row в process_runs
process_runs✓Есть step history
process_run_steps✓Есть user-facing output в Telegram
messages✓Есть trace в automation_events
automation_events✓LLM calls залогированы
llm_calls✓Latency в пределах SLA
process_runs.latency_msSmoke Test Commands
/swarm_test statusПроверить статус swarm тестов
/swarm_test start [scenario]Запустить bot-to-bot chain scenario
/swarm_test processes [all|n8n|local] [limit]Прогнать все активные процессы через smoke matrix
Test-related DB Tables
process_template_testsРезультаты smoke тестов для каждого template
- template_key - test_type (happy|degraded|failure|group) - status (passed|failed) - latency_ms - error_text - ran_at
mart.vw_process_test_gateView для quality gate проверки
SELECT * FROM mart.vw_process_test_gate WHERE template_key = 'web_search'; -- Возвращает: -- all_tests_passed: true/false -- missing_tests: [...] -- last_run_at
Quality Gate
Процесс готов к прод-запуску если:
✅ Must Have
- • Happy path passed
- • Degraded path passed
- • Failure path passed
- • Contract в БД
- • n8n workflow (если применимо)
⚠️ Should Have
- • Group path passed (если групповой)
- • Swarm test scenario
- • Run panel template
- • Documentation в wiki
Example: Test Run Trace
-- 1. Запуск теста
INSERT INTO process_runs (process_id, status, input_payload)
VALUES (123, 'running', '{"query": "test query"}')
RETURNING id; -- run_id = 456
-- 2. Step events
INSERT INTO process_run_steps (run_id, step_name, status)
VALUES (456, 'decompose', 'succeeded');
INSERT INTO process_run_steps (run_id, step_name, status)
VALUES (456, 'search', 'succeeded');
INSERT INTO process_run_steps (run_id, step_name, status)
VALUES (456, 'synthesize', 'succeeded');
-- 3. LLM calls
INSERT INTO llm_calls (scope, model, latency_ms, process_id)
VALUES ('process:web_search', 'phi4-mini', 3500, 123);
-- 4. Automation events
INSERT INTO automation_events (event_type, payload)
VALUES ('process.run.succeeded', '{"run_id": 456}');
-- 5. Telegram output
INSERT INTO messages (chat_id, role, text)
VALUES (789, 'assistant', 'Вот результаты поиска...');
-- 6. Test result
INSERT INTO process_template_tests (template_key, test_type, status, latency_ms)
VALUES ('web_search', 'happy', 'passed', 3500);