# 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_