- Add E2E test structure (tests/e2e/) - Add conftest.py with fixtures and credentials loading - Add test_auth.py with authentication tests - Add .env.example template - Add README.md with usage instructions - Mark tests with @pytest.mark.e2e - Add --slowmo option for rate limiting
3.2 KiB
3.2 KiB
End-to-End (E2E) Testing
E2E тесты требуют реальных credentials Kwork.ru и запускаются только локально (не в CI).
⚠️ Предупреждение
- Не запускай в CI — требуются реальные credentials
- Используй тестовый аккаунт — не основной аккаунт Kwork
- Rate limiting — добавляй задержки между запросами
🔧 Настройка
1. Создай файл окружения
cd /root/kwork-api
cp tests/e2e/.env.example tests/e2e/.env
2. Заполни credentials
# tests/e2e/.env
KWORK_USERNAME=your_test_username
KWORK_PASSWORD=your_test_password
3. Установи зависимости
uv sync --group dev
🚀 Запуск тестов
Все E2E тесты
uv run pytest tests/e2e/ -v
Конкретный тест
uv run pytest tests/e2e/test_auth.py -v
uv run pytest tests/e2e/test_catalog.py::test_get_catalog_list -v
С задержками (rate limiting)
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 # Пользовательские данные
🧪 Пример теста
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 для изоляции:
# Запустить только unit тесты (исключить e2e)
uv run pytest tests/ -v -m "not e2e"
# Запустить только e2e тесты
uv run pytest tests/ -v -m e2e
🔒 Безопасность
- Никогда не коммить
.env— добавлен в.gitignore - Используй тестовый аккаунт — не основной
- Не сохраняй токены в коде — только через env vars
🐛 Troubleshooting
Ошибка аутентификации
KworkAuthError: Invalid credentials
Решение: Проверь credentials в .env
Rate limit
KworkApiError: Too many requests
Решение: Запусти с задержкой: pytest --slowmo=2
Session expired
KworkAuthError: Session expired
Решение: Перезапусти тесты (session создаётся заново)