59 lines
1.5 KiB
INI
59 lines
1.5 KiB
INI
[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
|
|
# -n auto: run tests in parallel across all CPU cores (pytest-xdist)
|
|
# Override with -n0 to disable parallelism for debugging
|
|
addopts =
|
|
-v
|
|
--tb=short
|
|
--strict-markers
|
|
--disable-warnings
|
|
-n auto
|
|
--dist worksteal
|
|
|
|
# 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
|