Promptaid-VIsion / e2e /conftest.py
SCGR's picture
e2e
d0a53cb
import pytest
import requests
import time
import os
# Try to import playwright, but don't fail if not available
try:
from playwright.sync_api import sync_playwright
PLAYWRIGHT_AVAILABLE = True
except ImportError:
PLAYWRIGHT_AVAILABLE = False
# Create test-results directories
os.makedirs("./test-results/videos/", exist_ok=True)
os.makedirs("./test-results/har/", exist_ok=True)
def pytest_configure(config):
"""Configure pytest for E2E tests"""
config.addinivalue_line(
"markers", "e2e: marks tests as end-to-end tests"
)
config.addinivalue_line(
"markers", "upload: marks tests related to upload functionality"
)
config.addinivalue_line(
"markers", "admin: marks tests related to admin functionality"
)
config.addinivalue_line(
"markers", "export: marks tests related to export functionality"
)
@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
"""Configure browser context for E2E tests"""
if not PLAYWRIGHT_AVAILABLE:
pytest.skip("Playwright not available")
return {
**browser_context_args,
"viewport": {
"width": 1920,
"height": 1080,
},
"ignore_https_errors": True,
"record_video_dir": "./test-results/videos/",
"record_har_path": "./test-results/har/test.har",
}
@pytest.fixture(scope="session")
def browser_type_launch_args(browser_type_launch_args):
"""Configure browser launch arguments"""
if not PLAYWRIGHT_AVAILABLE:
pytest.skip("Playwright not available")
return {
**browser_type_launch_args,
"args": [
"--disable-web-security",
"--disable-features=VizDisplayCompositor",
"--no-sandbox",
"--disable-setuid-sandbox",
]
}
@pytest.fixture(scope="session")
def wait_for_services():
"""Wait for all services to be ready before running tests"""
print("Waiting for services to be ready...")
# Wait for backend
backend_ready = False
for i in range(30): # Wait up to 30 seconds
try:
response = requests.get("http://localhost:7860/health", timeout=5)
if response.status_code == 200:
backend_ready = True
print("Backend is ready")
break
except requests.exceptions.RequestException:
pass
time.sleep(1)
if not backend_ready:
pytest.fail("Backend service is not ready")
# Wait for application (frontend served by backend)
app_ready = False
for i in range(30): # Wait up to 30 seconds
try:
response = requests.get("http://localhost:7860", timeout=5)
if response.status_code == 200:
app_ready = True
print("Application is ready")
break
except requests.exceptions.RequestException:
pass
time.sleep(1)
if not app_ready:
pytest.fail("Application service is not ready")
print("All services are ready!")
@pytest.fixture(scope="function")
def reset_test_data():
"""Reset test data between tests"""
try:
# Call the test reset endpoint if available
response = requests.post("http://localhost:7860/test/reset", timeout=10)
if response.status_code == 200:
print("Test data reset successful")
else:
print("Test data reset failed, continuing anyway")
except requests.exceptions.RequestException:
print("Test reset endpoint not available, continuing anyway")
yield
@pytest.fixture(scope="function")
def page(page, wait_for_services, reset_test_data):
"""Configure page for E2E tests"""
if not PLAYWRIGHT_AVAILABLE:
pytest.skip("Playwright not available")
# Set up page with proper viewport and other settings
page.set_viewport_size({"width": 1920, "height": 1080})
yield page
# Video recording is handled automatically by Playwright
# No manual start/stop needed
def pytest_runtest_setup(item):
"""Setup before each test"""
# Ensure we're in the e2e directory
os.chdir(os.path.dirname(__file__))
def pytest_runtest_teardown(item, nextitem):
"""Teardown after each test"""
# Any cleanup needed after tests
pass