4.3 KiB
⚠️ LEGACY — НЕАКТУАЛЬНО. Исторический документ.
Ревью Соннета: история тестов — ответы и решения
Дата: 2026-07-26 Рецензируемый файл:
DOCS/test-results-history-plan.md
Вопрос 1: SQLite в /tmp/ — надёжно?
Ответ: ✅ Да, для тестового инструмента достаточно.
/tmp/ теряется только при рестарте пода (OOMKill, node restart, редеплой с новым контейнером). PostgreSQL добавил бы зависимость от отдельного сервиса, provisioning и точки отказа — несоразмерно задаче.
Решение: SQLite, /tmp/autotest_results.db.
Вопрос 2: Схема БД — нормально?
Ответ: В целом да, но:
- Добавить
UNIQUEиндекс наop_uid— это внешний идентификатор облака, должен быть уникальным test_paramsубрать из MVP (Фаза 1). Добавить в Фазе 2 когда понадобится «повторный запуск с теми же параметрами»
Решение: Фаза 1 — только test_runs + test_stages. Параметры позже.
Вопрос 3: Хранить stageMsg?
Ответ: ✅ Да, обязательно.
100 запусков × 5 стадий × 5 КБ = 2.5 МБ. SQLite справляется без проблем. stageMsg — самое ценное для диагностики «почему упало».
Решение: Хранить. Поле TEXT, ограничений нет.
Вопрос 4: API эндпоинты — достаточный набор?
Ответ: Да, плюс один:
DELETE /api/results(без<id>) — очистка всей истории или старше N дней (?older_than_days=30). Нужно чтобы/tmp/не раздувался.
Решение: Добавить DELETE /api/results с опциональным ?older_than_days=N.
Вопрос 5: UI — серверный рендеринг или SPA?
Ответ: Оставить текущий подход (Jinja2 + vanilla JS).
Фильтры-кнопки + раскрытие строк — 30 строк JS. SPA для одной страницы — избыточно.
Решение: Серверный рендеринг, фильтры на JS.
Вопрос 6: Экспорт — поток или файл?
Ответ: Файл.
return jsonify(data), 200, {
"Content-Disposition": "attachment; filename=results.json"
}
На 1000 записей — мгновенно, стриминг не нужен.
Решение: GET /api/results/export → JSON-файл.
Вопрос 7: Что упущено?
Ответ: _finish_op() сейчас не получает op_name и svc_op_id — а они нужны для save_result().
Сейчас сигнатура:
def _finish_op(client, op_uid, instance_uid, svc_id, display_name, is_create, is_delete=False)
Нужно:
def _finish_op(client, op_uid, instance_uid, svc_id, display_name, op_name, svc_op_id, is_create, is_delete=False)
И передавать op_name и svc_op_id из api_test() при вызове threading.Thread(...).
Решение: Исправить сигнатуру до реализации results_db.py.
Итоговый план (скорректированный)
Фаза 1 (MVP)
- Исправить
_finish_op()— добавитьop_name,svc_op_id site/operations/results_db.py— SQLite (толькоtest_runs+test_stages)_finish_op()→save_result()GET /api/results,DELETE /api/results- UI — простая таблица без фильтров
Фаза 2
GET /api/results/<id>— деталиGET /api/results/stats— статистикаtest_paramsтаблица- UI — фильтры, раскрытие
Фаза 3
- Экспорт JSON
- Повторный запуск
- Таймлайн