341 lines
9.3 KiB
Markdown
341 lines
9.3 KiB
Markdown
# 🧪 Примеры тестирования 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 для всех примеров
|
||
```bash
|
||
# Определите базовый URL
|
||
$API = "http://localhost:5000"
|
||
$ContentType = "application/json"
|
||
```
|
||
|
||
### Test 1: Базовый запрос - текущий квартал
|
||
```bash
|
||
curl -X POST $API/api/summary/ai `
|
||
-H "Content-Type: $ContentType" `
|
||
-d '{
|
||
"period": "quarter"
|
||
}'
|
||
```
|
||
|
||
**PowerShell:**
|
||
```powershell
|
||
$body = @{ period = "quarter" } | ConvertTo-Json
|
||
Invoke-RestMethod -Uri "$API/api/summary/ai" `
|
||
-Method Post `
|
||
-Body $body `
|
||
-ContentType $ContentType
|
||
```
|
||
|
||
### Test 2: Полугодовое резюме
|
||
```bash
|
||
curl -X POST $API/api/summary/ai `
|
||
-H "Content-Type: $ContentType" `
|
||
-d '{
|
||
"period": "halfyear"
|
||
}'
|
||
```
|
||
|
||
### Test 3: Пользовательский период
|
||
```bash
|
||
curl -X POST $API/api/summary/ai `
|
||
-H "Content-Type: $ContentType" `
|
||
-d '{
|
||
"startDate": "2024-01-01",
|
||
"endDate": "2024-01-31"
|
||
}'
|
||
```
|
||
|
||
### Test 4: Конкретный репозиторий
|
||
```bash
|
||
curl -X POST $API/api/summary/ai `
|
||
-H "Content-Type: $ContentType" `
|
||
-d '{
|
||
"repositoryPath": "C:/Projects/MyProject",
|
||
"period": "quarter"
|
||
}'
|
||
```
|
||
|
||
**PowerShell:**
|
||
```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: Все параметры
|
||
```bash
|
||
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: Запросить оба типа саммари
|
||
|
||
```powershell
|
||
$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: Неверный путь репозитория
|
||
```bash
|
||
curl -X POST $API/api/summary/ai `
|
||
-H "Content-Type: $ContentType" `
|
||
-d '{
|
||
"repositoryPath": "C:/NonExistent/Path",
|
||
"period": "quarter"
|
||
}'
|
||
```
|
||
**Ожидается:** 400 Bad Request с сообщением об ошибке
|
||
|
||
### Test 2: Пустой репозиторий (без коммитов)
|
||
```bash
|
||
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: Большой репозиторий (множество коммитов)
|
||
|
||
```powershell
|
||
# Измерим время обработки
|
||
$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: Множественные параллельные запросы
|
||
|
||
```powershell
|
||
# Создать 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
|
||
```bash
|
||
curl http://localhost:5000/health
|
||
```
|
||
|
||
**Ожидаемый ответ:**
|
||
```json
|
||
{
|
||
"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"
|
||
|
||
---
|
||
|
||
## Валидация результата
|
||
|
||
### Проверка структуры ответа
|
||
|
||
```powershell
|
||
$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`:
|
||
```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
|
||
```bash
|
||
curl http://localhost:5000/health -i
|
||
```
|
||
|
||
### Получить список всех коммитов
|
||
```bash
|
||
curl "http://localhost:5000/api/commits?period=quarter"
|
||
```
|
||
|
||
### Сравнить two summaries
|
||
```bash
|
||
# 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"
|
||
```
|
||
|
||
---
|
||
|
||
**Наслаждайтесь тестированием! 🚀**
|