# End-to-End (E2E) Testing E2E тесты требуют реальных credentials Kwork.ru и запускаются **только локально** (не в CI). ## ⚠️ Предупреждение - **Не запускай в CI** — требуются реальные credentials - **Используй тестовый аккаунт** — не основной аккаунт Kwork - **Rate limiting** — добавляй задержки между запросами --- ## 🔧 Настройка ### 1. Создай файл окружения ```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 ``` ### 3. Установи зависимости ```bash uv sync --group dev ``` --- ## 🚀 Запуск тестов ### Все E2E тесты ```bash uv run pytest tests/e2e/ -v ``` ### Конкретный тест ```bash uv run pytest tests/e2e/test_auth.py -v uv run pytest tests/e2e/test_catalog.py::test_get_catalog_list -v ``` ### С задержками (rate limiting) ```bash uv run pytest tests/e2e/ -v --slowmo=1 ``` --- ## 📁 Структура тестов ``` tests/e2e/ ├── README.md # Этот файл ├── .env.example # Шаблон для credentials ├── conftest.py # Фикстуры и setup ├── test_auth.py # Аутентификация ├── test_catalog.py # Каталог кворков ├── test_projects.py # Биржа проектов └── test_user.py # Пользовательские данные ``` --- ## 🧪 Пример теста ```python import pytest from kwork_api import KworkClient @pytest.mark.e2e async def test_get_user_info(): """E2E тест: получение информации о пользователе.""" async with await KworkClient.login( username="test_user", password="test_pass" ) as client: user = await client.user.get_info() assert user.username == "test_user" assert user.balance >= 0 ``` --- ## 🏷️ Маркировка тестов E2E тесты маркируются `@pytest.mark.e2e` для изоляции: ```bash # Запустить только unit тесты (исключить e2e) uv run pytest tests/ -v -m "not e2e" # Запустить только e2e тесты uv run pytest tests/ -v -m e2e ``` --- ## 🔒 Безопасность 1. **Никогда не коммить `.env`** — добавлен в `.gitignore` 2. **Используй тестовый аккаунт** — не основной 3. **Не сохраняй токены в коде** — только через env vars --- ## 🐛 Troubleshooting ### Ошибка аутентификации ``` KworkAuthError: Invalid credentials ``` **Решение:** Проверь credentials в `.env` ### Rate limit ``` KworkApiError: Too many requests ``` **Решение:** Запусти с задержкой: `pytest --slowmo=2` ### Session expired ``` KworkAuthError: Session expired ``` **Решение:** Перезапусти тесты (session создаётся заново)