99
1010from pytest_databases ._service import DockerService , ServiceContainer
1111from pytest_databases .helpers import get_xdist_worker_num
12+ from pytest_databases .types import XdistIsolationLevel
1213
1314if TYPE_CHECKING :
1415 from collections .abc import Generator
1516
1617
18+ @pytest .fixture (scope = "session" )
19+ def xdist_mysql_isolate () -> XdistIsolationLevel :
20+ return "database"
21+
22+
1723@dataclass
1824class MySQLService (ServiceContainer ):
1925 db : str
@@ -26,6 +32,7 @@ def _provide_mysql_service(
2632 docker_service : DockerService ,
2733 image : str ,
2834 name : str ,
35+ isolation_level : XdistIsolationLevel ,
2936) -> Generator [MySQLService , None , None ]:
3037 user = "app"
3138 password = "super-secret"
@@ -55,11 +62,14 @@ def check(_service: ServiceContainer) -> bool:
5562
5663 worker_num = get_xdist_worker_num ()
5764 db_name = f"pytest_{ worker_num + 1 } "
65+ if isolation_level == "server" :
66+ name = f"{ name } _{ worker_num } "
67+
5868 with docker_service .run (
5969 image = image ,
6070 check = check ,
6171 container_port = 3306 ,
62- name = f" { name } _ { worker_num } " ,
72+ name = name ,
6373 env = {
6474 "MYSQL_ROOT_PASSWORD" : root_password ,
6575 "MYSQL_PASSWORD" : password ,
@@ -93,35 +103,41 @@ def mysql_service(mysql8_service: MySQLService) -> MySQLService:
93103@pytest .fixture (autouse = False , scope = "session" )
94104def mysql8_service (
95105 docker_service : DockerService ,
106+ xdist_mysql_isolate : XdistIsolationLevel ,
96107) -> Generator [MySQLService , None , None ]:
97108 with _provide_mysql_service (
98109 image = "mysql:8" ,
99110 name = "mysql-8" ,
100111 docker_service = docker_service ,
112+ isolation_level = xdist_mysql_isolate ,
101113 ) as service :
102114 yield service
103115
104116
105117@pytest .fixture (autouse = False , scope = "session" )
106118def mysql57_service (
107119 docker_service : DockerService ,
120+ xdist_mysql_isolate : XdistIsolationLevel ,
108121) -> Generator [MySQLService , None , None ]:
109122 with _provide_mysql_service (
110123 image = "mysql:5.7" ,
111124 name = "mysql-57" ,
112125 docker_service = docker_service ,
126+ isolation_level = xdist_mysql_isolate ,
113127 ) as service :
114128 yield service
115129
116130
117131@pytest .fixture (autouse = False , scope = "session" )
118132def mysql56_service (
119133 docker_service : DockerService ,
134+ xdist_mysql_isolate : XdistIsolationLevel ,
120135) -> Generator [MySQLService , None , None ]:
121136 with _provide_mysql_service (
122137 image = "mysql:5.6" ,
123138 name = "mysql-56" ,
124139 docker_service = docker_service ,
140+ isolation_level = xdist_mysql_isolate ,
125141 ) as service :
126142 yield service
127143
0 commit comments