-
Couldn't load subscription status.
- Fork 344
Description
Describe the bug
Testcontainers behaves incredibly flaky when running tests in parallel with pytest-xdist. Specifically containers and networks are destroyed prematurely resulting in network connections being interrupted, ports being reassigned to different containers resulting in calls to the wrong application or instance.
To Reproduce
Note due to the flakiness you might need to tune to number of runs or repeat the test execution to see the errors.
Install the packages used for the tests.
pip install pytest==8.2 pytest-xdist==3.6.1 testcontainers==4.4 requests==2.31Create a file named example.py
from rand import randrange
from time import sleep
import pytest
import requests
from testcontainers.core.network import Network
from testcontainers.postgres import PostgresContainer
from testcontainers.vault import VaultContainer
@pytest.mark.parametrize("run", range(30))
def test_healthcheck(run: int) -> None:
with Network() as network:
with PostgresContainer().with_network(network) as postgres_container:
with VaultContainer().with_network(network).with_exposed_ports(8200) as vault_container:
sleep(randrange(1, 3)) # Simulate work and give some time to prematurely stop to showcase buggy behavior
response = requests.get(f"{vault_container.get_connection_url()}/v1/sys/health")
assert response.status_code == 200Run pytest with parallel test execution on a multicore CPU (at least 2 cores).
pytest -n auto example.py
Runtime environment
Linux 6.8.0-76060800daily20240311-generic
Python 3.10 3.11 3.12
CPU i7-1165G7
testcontainers 4.4