Files
PerfReviewSummarizer/TESTING_EXAMPLES.md
ZakirovT 057e1f526b init
2026-01-22 00:45:41 +03:00

9.3 KiB
Raw Permalink Blame History

🧪 Примеры тестирования OpenAI интеграции

Тестирование через веб-интерфейс

1. Basic Test - Квартальное резюме

  1. Откройте http://localhost:5000
  2. Выберите вкладку "AI Summary (OpenAI)"
  3. Оставьте Путь по умолчанию: .
  4. Выберите Период: "Текущий квартал"
  5. Нажмите "Получить AI Summary"
  6. Ожидайте 5-10 секунд
  7. Появится резюме от GPT

2. Custom Period Test

  1. Выберите вкладку "AI Summary (OpenAI)"
  2. Выберите Период: "Произвольный период"
  3. Укажите:
    • Начальная дата: 2024-01-01
    • Конечная дата: 2024-01-31
  4. Нажмите "Получить AI Summary"

3. Different Repository Test

  1. Выберите вкладку "AI Summary (OpenAI)"
  2. Укажите Путь: C:\Path\To\Your\Repo (или /home/user/project)
  3. Выберите Период: "Текущий квартал"
  4. Нажмите "Получить AI Summary"

Тестирование через curl/PowerShell

Setup для всех примеров

# Определите базовый URL
$API = "http://localhost:5000"
$ContentType = "application/json"

Test 1: Базовый запрос - текущий квартал

curl -X POST $API/api/summary/ai `
  -H "Content-Type: $ContentType" `
  -d '{
    "period": "quarter"
  }'

PowerShell:

$body = @{ period = "quarter" } | ConvertTo-Json
Invoke-RestMethod -Uri "$API/api/summary/ai" `
  -Method Post `
  -Body $body `
  -ContentType $ContentType

Test 2: Полугодовое резюме

curl -X POST $API/api/summary/ai `
  -H "Content-Type: $ContentType" `
  -d '{
    "period": "halfyear"
  }'

Test 3: Пользовательский период

curl -X POST $API/api/summary/ai `
  -H "Content-Type: $ContentType" `
  -d '{
    "startDate": "2024-01-01",
    "endDate": "2024-01-31"
  }'

Test 4: Конкретный репозиторий

curl -X POST $API/api/summary/ai `
  -H "Content-Type: $ContentType" `
  -d '{
    "repositoryPath": "C:/Projects/MyProject",
    "period": "quarter"
  }'

PowerShell:

$body = @{
    repositoryPath = "C:/Projects/MyProject"
    period = "quarter"
} | ConvertTo-Json

Invoke-RestMethod -Uri "$API/api/summary/ai" `
  -Method Post `
  -Body $body `
  -ContentType $ContentType

Test 5: Все параметры

curl -X POST $API/api/summary/ai `
  -H "Content-Type: $ContentType" `
  -d '{
    "repositoryPath": ".",
    "startDate": "2024-01-01",
    "endDate": "2024-12-31"
  }'

Сравнение Traditional vs AI Summary

Test: Запросить оба типа саммари

$traditional = Invoke-RestMethod -Uri "$API/api/summary" `
  -Method Post `
  -Body (@{ period = "quarter" } | ConvertTo-Json) `
  -ContentType "application/json"

$ai = Invoke-RestMethod -Uri "$API/api/summary/ai" `
  -Method Post `
  -Body (@{ period = "quarter" } | ConvertTo-Json) `
  -ContentType "application/json"

# Вывести results
Write-Host "=== TRADITIONAL SUMMARY ===" -ForegroundColor Yellow
Write-Host $traditional.stats | Format-Table

Write-Host "`n=== AI SUMMARY ===" -ForegroundColor Green
Write-Host $ai.summary

Write-Host "`nОба запроса успешно выполнены!"

Тестирование обработки ошибок

Test 1: Неверный путь репозитория

curl -X POST $API/api/summary/ai `
  -H "Content-Type: $ContentType" `
  -d '{
    "repositoryPath": "C:/NonExistent/Path",
    "period": "quarter"
  }'

Ожидается: 400 Bad Request с сообщением об ошибке

Test 2: Пустой репозиторий (без коммитов)

curl -X POST $API/api/summary/ai `
  -H "Content-Type: $ContentType" `
  -d '{
    "repositoryPath": ".",
    "startDate": "2024-12-31",
    "endDate": "2024-12-31"
  }'

Ожидается: 200 OK с сообщением "Нет коммитов для анализа"

Test 3: Невалидный API ключ

  1. Измените ключ в appsettings.json на sk-invalid-key
  2. Перезагрузите приложение
  3. Отправьте запрос

Ожидается: 500 Internal Server Error с информацией об ошибке OpenAI


Тестирование производительности

Test: Большой репозиторий (множество коммитов)

# Измерим время обработки
$sw = [System.Diagnostics.Stopwatch]::StartNew()

$result = Invoke-RestMethod -Uri "$API/api/summary/ai" `
  -Method Post `
  -Body (@{
    period = "halfyear"
  } | ConvertTo-Json) `
  -ContentType "application/json"

$sw.Stop()

Write-Host "Время обработки: $($sw.ElapsedMilliseconds) мс"
Write-Host "Количество коммитов: $($result.commitsCount)"
Write-Host "Длина резюме: $($result.summary.Length) символов"

Test: Множественные параллельные запросы

# Создать 5 параллельных запросов
1..5 | ForEach-Object -Parallel {
    Invoke-RestMethod -Uri "http://localhost:5000/api/summary/ai" `
      -Method Post `
      -Body (@{ period = "quarter" } | ConvertTo-Json) `
      -ContentType "application/json" | Out-Null
    
    Write-Host "Запрос $_ завершён"
} -ThrottleLimit 5

Проверка здоровья API

Health Check

curl http://localhost:5000/health

Ожидаемый ответ:

{
  "status": "healthy",
  "timestamp": "2024-01-21T10:30:00.000Z"
}

Проверка документации

Swagger UI

  1. Откройте http://localhost:5000/swagger
  2. Найдите endpoint POST /api/summary/ai
  3. Нажмите "Try it out"
  4. Заполните параметры
  5. Нажмите "Execute"

Валидация результата

Проверка структуры ответа

$response = Invoke-RestMethod -Uri "http://localhost:5000/api/summary/ai" `
  -Method Post `
  -Body (@{ period = "quarter" } | ConvertTo-Json) `
  -ContentType "application/json"

# Проверить наличие обязательных полей
$hasRequiredFields = @(
    $response.PSObject.Properties.Name -contains "summary",
    $response.PSObject.Properties.Name -contains "periodInfo",
    $response.PSObject.Properties.Name -contains "commitsCount",
    $response.PSObject.Properties.Name -contains "commitMessages"
) | Where-Object { $_ -eq $true }

if ($hasRequiredFields.Count -eq 4) {
    Write-Host "✅ Структура ответа корректна"
} else {
    Write-Host "❌ Недостающие поля в ответе"
}

# Проверить что саммари не пуст
if ($response.summary.Length -gt 0) {
    Write-Host "✅ Саммари содержит текст"
} else {
    Write-Host "❌ Саммари пуст"
}

Loggging и отладка

Включить детальное логирование

Отредактируйте appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft.AspNetCore": "Debug",
      "PerfReviewSummarizer.Api.Services": "Debug"
    }
  }
}

Просмотр логов в реальном времени

При запуске приложения будут видны все детали обработки запросов.


Чек-лист для полного тестирования

  • Веб-интерфейс загружается корректно
  • Вкладки переключаются правильно
  • Traditional Summary работает
  • AI Summary работает с текущим квартелом
  • AI Summary работает с полугодием
  • AI Summary работает с пользовательским периодом
  • Обработка ошибок работает правильно
  • Health check endpoint отвечает
  • Swagger UI доступен и работает
  • API ключ корректно используется
  • Результаты содержат правильную структуру
  • Резюме на русском языке
  • Резюме содержит полезную информацию
  • Производительность приемлемая (<15 секунд)

💡 Полезные команды

Проверить доступность API

curl http://localhost:5000/health -i

Получить список всех коммитов

curl "http://localhost:5000/api/commits?period=quarter"

Сравнить two summaries

# Traditional
curl -X POST http://localhost:5000/api/summary `
  -d '{"period":"quarter"}' -H "Content-Type: application/json"

# AI
curl -X POST http://localhost:5000/api/summary/ai `
  -d '{"period":"quarter"}' -H "Content-Type: application/json"

Наслаждайтесь тестированием! 🚀