[pytest] # Test discovery and execution configuration testpaths = tests pythonpath = src:tests asyncio_mode = auto asyncio_default_fixture_loop_scope = function timeout = 30 timeout_method = signal timeout_func_only = false # Test markers for categorization and selective execution markers = unit: Unit tests (fast, no I/O, no external services) integration: Integration tests (may use SQLite, in-process agents) functional: Functional tests (real HTTP requests, no mocking) e2e: End-to-end tests (full system, may be slow) slow: Tests that take >1 second selenium: Requires Selenium and Chrome (browser automation) docker: Requires Docker and docker-compose ollama: Requires Ollama service running external_api: Requires external API access skip_ci: Skip in CI environment (local development only) # Output and reporting addopts = -v --tb=short --strict-markers --disable-warnings # Coverage configuration [coverage:run] source = src omit = */tests/* */site-packages/* [coverage:report] show_missing = true skip_empty = true precision = 1 exclude_lines = pragma: no cover if __name__ == .__main__. if TYPE_CHECKING: raise NotImplementedError @abstractmethod fail_under = 60 [coverage:html] directory = htmlcov [coverage:xml] output = coverage.xml