Note: pytest-asyncio creates new event loop per test, so we cannot reuse KworkClient across tests. Each test logs in independently. This is acceptable because: 1. Login is fast (<1s) 2. Tests are independent (no shared state) 3. Auth tests verify login works correctly 4. Catalog tests verify API endpoints work
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
"""
|
|
E2E тесты для Kwork API.
|
|
|
|
Требуют реальных credentials и запускаются только локально.
|
|
"""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
from dotenv import load_dotenv
|
|
|
|
# Загружаем .env
|
|
load_dotenv(Path(__file__).parent / ".env")
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def kwork_credentials():
|
|
"""Credentials для тестового аккаунта."""
|
|
return {
|
|
"username": os.getenv("KWORK_USERNAME"),
|
|
"password": os.getenv("KWORK_PASSWORD"),
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def require_credentials(kwork_credentials):
|
|
"""Пропускает тест если нет credentials."""
|
|
if not kwork_credentials["username"] or not kwork_credentials["password"]:
|
|
pytest.skip(
|
|
"E2E credentials not set. "
|
|
"Copy tests/e2e/.env.example to tests/e2e/.env and fill in credentials."
|
|
)
|
|
return kwork_credentials
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def slowmo(request):
|
|
"""Задержка между тестами для rate limiting."""
|
|
slowmo = request.config.getoption("--slowmo", default=0)
|
|
if slowmo > 0:
|
|
import time
|
|
|
|
time.sleep(slowmo)
|
|
|
|
|
|
def pytest_configure(config):
|
|
"""Регистрация маркера e2e."""
|
|
config.addinivalue_line("markers", "e2e: mark test as end-to-end (requires credentials)")
|
|
|
|
|
|
def pytest_addoption(parser):
|
|
"""Добавляет опцию --slowmo."""
|
|
parser.addoption(
|
|
"--slowmo", type=float, default=0, help="Delay between tests in seconds (for rate limiting)"
|
|
)
|