214 lines
6.3 KiB
Markdown
214 lines
6.3 KiB
Markdown
# E2E Testing Guide
|
||
|
||
End-to-end тесты для Kwork API client.
|
||
|
||
## ⚠️ Важные замечания
|
||
|
||
1. **Требуют реальных credentials** — используйте тестовый аккаунт
|
||
2. **Запускаются только локально** — НЕ в CI
|
||
3. **Все тесты read-only** — ничего не изменяют на сервере
|
||
4. **Rate limiting** — Kwork может ограничивать частые запросы
|
||
|
||
---
|
||
|
||
## 🔧 Настройка
|
||
|
||
### 1. Создайте файл с credentials
|
||
|
||
```bash
|
||
cd /root/kwork-api
|
||
cp tests/e2e/.env.example tests/e2e/.env
|
||
```
|
||
|
||
### 2. Заполните credentials
|
||
|
||
```bash
|
||
# tests/e2e/.env
|
||
KWORK_USERNAME=your_test_username
|
||
KWORK_PASSWORD=your_test_password
|
||
```
|
||
|
||
**Важно:** Используйте тестовый аккаунт, не основной!
|
||
|
||
---
|
||
|
||
## 🚀 Запуск тестов
|
||
|
||
### Все E2E тесты
|
||
|
||
```bash
|
||
uv run pytest tests/e2e/ -v
|
||
```
|
||
|
||
### Только авторизация
|
||
|
||
```bash
|
||
uv run pytest tests/e2e/test_auth.py -v
|
||
```
|
||
|
||
### Только каталог и пользователи
|
||
|
||
```bash
|
||
uv run pytest tests/e2e/test_catalog.py -v
|
||
```
|
||
|
||
### С задержкой между тестами (rate limiting)
|
||
|
||
```bash
|
||
uv run pytest tests/e2e/ -v --slowmo=1
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 Список тестов
|
||
|
||
### Авторизация (`test_auth.py`)
|
||
|
||
| Тест | Endpoint | Описание |
|
||
|------|----------|----------|
|
||
| `test_login_success` | `POST /api/user/login` | Успешный логин |
|
||
| `test_login_invalid_credentials` | `POST /api/user/login` | Ошибка логина |
|
||
| `test_restore_session` | N/A | Восстановление сессии (пропущен) |
|
||
|
||
### Каталог и пользователи (`test_catalog.py`)
|
||
|
||
| Тест | Endpoint | Описание |
|
||
|------|----------|----------|
|
||
| `test_get_projects_list` | `GET /projects` | Список проектов |
|
||
| `test_get_categories` | `GET /categories/{slug}` | Категория |
|
||
| `test_get_user_profile` | `GET /user/{username}` | Профиль пользователя |
|
||
| `test_api_checknotify` | `POST /api/user/checknotify` | Проверка уведомлений |
|
||
| `test_api_addview` | `POST /api/offer/addview` | Добавить просмотр |
|
||
| `test_get_reviews` | `POST /user/get_reviews` | Отзывы пользователя |
|
||
|
||
---
|
||
|
||
## 📊 Endpoints из HAR анализа
|
||
|
||
Эти endpoints использует официальный сайт Kwork.ru:
|
||
|
||
### ✅ Работающие (200 OK)
|
||
|
||
```
|
||
GET /projects # Список проектов
|
||
GET /projects/{id}/view # Просмотр проекта
|
||
GET /categories/{slug} # Категория
|
||
GET /user/{username} # Профиль пользователя
|
||
GET /seller # Страница продавца
|
||
GET /faq # Помощь
|
||
GET /settings # Настройки
|
||
GET /api/user/checknotify # Проверка уведомлений
|
||
POST /api/user/login # Логин
|
||
POST /user/get_reviews # Отзывы
|
||
POST /api/offer/addview # Добавить просмотр
|
||
POST /captcha/check_phone_captcha_enabled
|
||
POST /quick-faq/init
|
||
POST /support2/hit
|
||
```
|
||
|
||
### ❌ Не работающие (404 Not Found)
|
||
|
||
```
|
||
POST /catalogMainv2 # Используется в client.py (нужно исправить)
|
||
POST /getKworkDetails # Используется в client.py (нужно исправить)
|
||
POST /userReviews # Используется в client.py (нужно исправить)
|
||
POST /cities # Используется в client.py (нужно исправить)
|
||
POST /countries # Используется в client.py (нужно исправить)
|
||
POST /user # Не существует
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 Отладка
|
||
|
||
### Включить логирование
|
||
|
||
```python
|
||
import logging
|
||
logging.basicConfig(level=logging.DEBUG)
|
||
```
|
||
|
||
### Посмотреть логи запросов
|
||
|
||
```bash
|
||
uv run pytest tests/e2e/test_auth.py::test_login_success -v -s 2>&1 | grep -E "INFO|DEBUG|ERROR"
|
||
```
|
||
|
||
Пример вывода:
|
||
```
|
||
INFO:kwork_api.client:Login request: POST https://kwork.ru/api/user/login (user: username)
|
||
DEBUG:kwork_api.client:Login payload: {'l_username': '...', 'l_password': '...', ...}
|
||
DEBUG:kwork_api.client:Login response status: 200
|
||
INFO:kwork_api.client:Login successful: user_id=12345, csrf_token=abc123...
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠 Troubleshooting
|
||
|
||
### Ошибка: "Нужно ввести логин"
|
||
|
||
**Проблема:** Credentials не переданы в login()
|
||
|
||
**Решение:** Проверьте что .env файл существует и заполнен:
|
||
```bash
|
||
cat tests/e2e/.env
|
||
```
|
||
|
||
### Ошибка: 404 Not Found
|
||
|
||
**Проблема:** Endpoint не существует
|
||
|
||
**Решение:** Проверьте HAR файл для правильных endpoints:
|
||
```bash
|
||
cd /root
|
||
python3 << 'EOF'
|
||
import json
|
||
with open('kwork-dump.har') as f:
|
||
har = json.load(f)
|
||
for entry in har['log']['entries']:
|
||
if 'kwork.ru/' in entry['request']['url'] and 'cdn' not in entry['request']['url']:
|
||
print(f"{entry['request']['method']} {entry['response']['status']} {entry['request']['url'].split('?')[0]}")
|
||
EOF
|
||
```
|
||
|
||
### Ошибка: Rate limit
|
||
|
||
**Проблема:** Слишком много запросов
|
||
|
||
**Решение:** Запустите с задержкой:
|
||
```bash
|
||
uv run pytest tests/e2e/ -v --slowmo=2
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 Добавление новых тестов
|
||
|
||
1. Создайте тест в `tests/e2e/test_*.py`
|
||
2. Добавьте маркер `@pytest.mark.e2e`
|
||
3. Используйте фикстуру `require_credentials`
|
||
4. Убедитесь что тест read-only (не изменяет данные)
|
||
|
||
Пример:
|
||
```python
|
||
@pytest.mark.e2e
|
||
async def test_my_feature(require_credentials):
|
||
"""E2E: Мой новый тест."""
|
||
client = await KworkClient.login(
|
||
username=require_credentials["username"],
|
||
password=require_credentials["password"],
|
||
)
|
||
|
||
try:
|
||
# Ваш тест здесь
|
||
result = await client.some_method()
|
||
assert result is not None
|
||
finally:
|
||
await client.close()
|
||
```
|
||
|
||
---
|
||
|
||
_Updated: 2026-03-29_
|