Skip to content

Commit 5469c1c

Browse files
committed
perf(sqlalchemy-bigquery): enable pytest-xdist parallelization with worker dataset isolation
1 parent 5120450 commit 5469c1c

4 files changed

Lines changed: 15 additions & 13 deletions

File tree

packages/sqlalchemy-bigquery/noxfile.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
SYSTEM_TEST_STANDARD_DEPENDENCIES: List[str] = [
9393
"mock",
9494
"pytest",
95+
"pytest-xdist",
9596
"google-cloud-testutils",
9697
]
9798
SYSTEM_TEST_EXTERNAL_DEPENDENCIES: List[str] = []
@@ -392,6 +393,7 @@ def _run_system_test_logic(session, test_type):
392393
session.install(
393394
"mock",
394395
"pytest",
396+
"pytest-xdist",
395397
"pytest-rerunfailures",
396398
"google-cloud-testutils",
397399
"-c",
@@ -413,6 +415,8 @@ def _run_system_test_logic(session, test_type):
413415
if test_type == "compliance":
414416
session.run(
415417
"py.test",
418+
"-n",
419+
"auto",
416420
"-vv",
417421
f"--junitxml=compliance_{session.python}_sponge_log.xml",
418422
"--reruns=3",
@@ -426,6 +430,8 @@ def _run_system_test_logic(session, test_type):
426430
else:
427431
session.run(
428432
"py.test",
433+
"-n",
434+
"auto",
429435
"--quiet",
430436
f"--junitxml=system_{session.python}_sponge_log.xml",
431437
test_path,

packages/sqlalchemy-bigquery/tests/sqlalchemy_dialect_compliance/conftest.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ def visit_delete(self, delete_stmt, *args, **kw):
7070

7171

7272
def pytest_sessionstart(session):
73-
dataset_id = prefixer.create_prefix()
73+
import os
74+
worker_id = os.environ.get("PYTEST_XDIST_WORKER", "master")
75+
dataset_id = f"{prefixer.create_prefix()}_{worker_id}"
7476
session.config.option.dburi = [f"bigquery:///{dataset_id}"]
7577
with contextlib.closing(google.cloud.bigquery.Client()) as client:
7678
client.create_dataset(dataset_id)

packages/sqlalchemy-bigquery/tests/system/conftest.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ def bigquery_dataset(
7373
bigquery_client: bigquery.Client, bigquery_schema: List[bigquery.SchemaField]
7474
):
7575
project_id = bigquery_client.project
76-
dataset_id = prefixer.create_prefix()
76+
worker_id = os.environ.get("PYTEST_XDIST_WORKER", "master")
77+
dataset_id = f"{prefixer.create_prefix()}_{worker_id}"
7778
dataset = bigquery.Dataset(f"{project_id}.{dataset_id}")
7879
dataset = bigquery_client.create_dataset(dataset)
7980
sample_table_id = f"{project_id}.{dataset_id}.sample"
@@ -93,16 +94,6 @@ def bigquery_dataset(
9394
view.view_query = f"SELECT string FROM `{dataset_id}.sample`"
9495
bigquery_client.create_table(view)
9596

96-
# Pre-create session-scoped lake table for geography tests
97-
lake_table = bigquery.Table(
98-
f"{project_id}.{dataset_id}.lake",
99-
schema=[
100-
bigquery.SchemaField("name", "STRING"),
101-
bigquery.SchemaField("geog", "GEOGRAPHY"),
102-
],
103-
)
104-
bigquery_client.create_table(lake_table)
105-
10697
yield dataset_id
10798
bigquery_client.delete_dataset(dataset_id, delete_contents=True)
10899

@@ -125,7 +116,8 @@ def bigquery_empty_table(
125116
@pytest.fixture(scope="session")
126117
def bigquery_regional_dataset(bigquery_client, bigquery_schema):
127118
project_id = bigquery_client.project
128-
dataset_id = prefixer.create_prefix()
119+
worker_id = os.environ.get("PYTEST_XDIST_WORKER", "master")
120+
dataset_id = f"{prefixer.create_prefix()}_{worker_id}"
129121
dataset = bigquery.Dataset(f"{project_id}.{dataset_id}")
130122
dataset.location = "asia-northeast1"
131123
dataset = bigquery_client.create_dataset(dataset)

packages/sqlalchemy-bigquery/tests/system/test_geography.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ def test_geoalchemy2_core(bigquery_dataset):
4747
"lake", metadata, Column("name", String), Column("geog", GEOGRAPHY)
4848
)
4949

50+
lake_table.create(engine)
51+
5052
# Insertions
5153

5254
conn = engine.connect()

0 commit comments

Comments
 (0)