diff --git a/requirements.txt b/requirements.txt index 621780cce71a4295884c512ee208c1e5fe9c4323..52ed7721d05e94ead5e862d1b05a56afb9a316d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,3 +23,4 @@ sphinx-rtd-theme==2.0.0 urllib3_mock==0.3.3 pytest-asyncio==0.23.6 pre-commit~=3.7.0 +pytest-xdist==3.6.1 \ No newline at end of file diff --git a/test/conftest.py b/test/conftest.py index 2eb7e6a28089c621b620fa56d9a55b293c75b099..d226097a0e28e51d263f20037ef1f9a86c56c271 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -142,8 +142,9 @@ def data_config_filename() -> str: @pytest.fixture(scope="session") def db_uri(): - """Provide the database uri configuration to run the migration on.""" - return os.environ.get("DATABASE_URI_TEST", "postgresql://nwa:nwa@localhost/gso-test-db") + """Provide a unique database URI for each pytest-xdist worker, or a default URI if running without xdist.""" + worker_id = os.getenv("PYTEST_XDIST_WORKER") + return os.environ.get("DATABASE_URI_TEST", f"postgresql://nwa:nwa@localhost/gso-test-db_{worker_id}") def run_migrations(db_uri: str) -> None: @@ -281,7 +282,7 @@ def partner_factory(): return _create_partner -@pytest.fixture(scope="session") +@pytest.fixture() def geant_partner(partner_factory): return partner_factory(name="GEANT-TEST", email="goat-test@geant.org") diff --git a/tox.ini b/tox.ini index a8eab7b2fc84925ef5a1d2f859e9e5c3bce1eec4..cf178b176d5b0a95139341586261f41087212ad0 100644 --- a/tox.ini +++ b/tox.ini @@ -21,7 +21,7 @@ commands = ruff format --respect-gitignore --preview --check . mypy . coverage erase - coverage run --source gso --omit="gso/migrations/*" -m pytest {posargs} + coverage run --source gso --omit="gso/migrations/*" -m pytest -n auto {posargs} coverage xml coverage html sh -c "if [ $SKIP_ALL_TESTS -eq 1 ]; then echo 'Skipping coverage report'; else coverage report --fail-under 80; fi"