175 lines
4.6 KiB
Markdown
175 lines
4.6 KiB
Markdown
# QATesterAgent Mechanism - VoIdea
|
|
|
|
**Дата:** 2026-05-10
|
|
**Статус:** Backlog
|
|
|
|
---
|
|
|
|
## Обзор
|
|
|
|
Механизм функционального тестирования с созданием временных аккаунтов и очисткой.
|
|
|
|
---
|
|
|
|
## Архитектура
|
|
|
|
### QATesterAgent responsibilities
|
|
|
|
1. **Создание временных аккаунтов**
|
|
- Уникальный префикс: `test_*`
|
|
- Автоматическая генерация данных
|
|
- Ограничение по времени жизни
|
|
|
|
2. **Выполнение тестов**
|
|
- Функциональные тесты
|
|
- API тесты
|
|
- UI тесты (через UITestAgent)
|
|
|
|
3. **Очистка**
|
|
- Удаление временных данных
|
|
- Проверка целостности
|
|
- Логирование результатов
|
|
|
|
---
|
|
|
|
## Процесс работы
|
|
|
|
```python
|
|
async def run_tests(test_config: TestConfig) -> TestResult:
|
|
# 1. Создание временных аккаунтов
|
|
temp_users = await create_temp_users(count=test_config.count)
|
|
|
|
try:
|
|
# 2. Выполнение тестов
|
|
results = []
|
|
for user in temp_users:
|
|
result = await execute_test_suite(user, test_config)
|
|
results.append(result)
|
|
|
|
# 3. Сохранение результатов
|
|
await save_test_results(results)
|
|
|
|
# 4. Очистка
|
|
await cleanup_temp_users(temp_users)
|
|
|
|
return aggregate_results(results)
|
|
|
|
except Exception as e:
|
|
# При ошибке - очистка обязательна
|
|
await cleanup_temp_users(temp_users)
|
|
raise
|
|
```
|
|
|
|
---
|
|
|
|
## Правила очистки
|
|
|
|
### Безопасность
|
|
|
|
1. **Никогда не удалять пользователей без `test_` префикса**
|
|
2. **Использовать soft delete перед hard delete**
|
|
3. **Логировать все операции очистки**
|
|
4. **Проверять foreign key constraints**
|
|
5. **Тестировать очистку в staging**
|
|
|
|
### Механизм очистки
|
|
|
|
```python
|
|
async def cleanup_temp_users(users: list[TempUser]):
|
|
for user in users:
|
|
# 1. Soft delete
|
|
await user.soft_delete()
|
|
|
|
# 2. Проверка связанных данных
|
|
related = await check_related_entities(user.id)
|
|
if related:
|
|
await cleanup_related(related)
|
|
|
|
# 3. Hard delete (через время)
|
|
await schedule_hard_delete(user.id, delay_minutes=5)
|
|
```
|
|
|
|
---
|
|
|
|
## Конфигурация
|
|
|
|
```yaml
|
|
qa_tester:
|
|
max_temp_users: 10 # Максимум одновременно
|
|
user_ttl_minutes: 30 # Время жизни
|
|
auto_cleanup: true # Автоматическая очистка
|
|
cleanup_delay_minutes: 5 # Задержка перед hard delete
|
|
|
|
tests:
|
|
functional:
|
|
enabled: true
|
|
timeout_seconds: 300
|
|
api:
|
|
enabled: true
|
|
timeout_seconds: 60
|
|
ui:
|
|
enabled: true # Через UITestAgent
|
|
timeout_seconds: 120
|
|
```
|
|
|
|
---
|
|
|
|
## Триггеры
|
|
|
|
1. **pre-commit** — автоматически перед merge
|
|
2. **Ежедневно** — scheduled в cron
|
|
3. **Вручную** — кнопка в админ-панели
|
|
4. **После failed тестов** — FixAgent запускает повторно
|
|
|
|
---
|
|
|
|
## Статусы
|
|
|
|
Агент может находиться в состояниях:
|
|
- `idle` — готов к работе
|
|
- `creating_users` — создаёт temp аккаунты
|
|
- `running_tests` — выполняет тесты
|
|
- `cleaning` — очищает данные
|
|
- `error` — требует внимание
|
|
- `offline` — отключён
|
|
|
|
---
|
|
|
|
## Отчёты
|
|
|
|
После каждого теста создаётся отчёт:
|
|
```json
|
|
{
|
|
"test_id": "uuid",
|
|
"timestamp": "2026-05-10T12:00:00Z",
|
|
"status": "passed|failed",
|
|
"users_created": 3,
|
|
"users_cleaned": 3,
|
|
"tests_run": [
|
|
{
|
|
"name": "test_create_idea",
|
|
"status": "passed",
|
|
"duration_ms": 150
|
|
}
|
|
],
|
|
"bugs_found": [],
|
|
"logs": "..."
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## TODO
|
|
|
|
- [ ] Реализовать QATesterAgent
|
|
- [ ] Создать механизм создания temp users
|
|
- [ ] Реализовать безопасную очистку
|
|
- [ ] Добавить отчёты в админ-панель
|
|
- [ ] Настроить триггеры
|
|
- [ ] Интегрировать с FixAgent
|
|
- [ ] Написать тесты механизма
|
|
|
|
---
|
|
|
|
*Создано: 2026-05-10*
|
|
*Управляется QATesterAgent* |