Add session-scoped topology fixture in tests/conftest.py

Provides a shared `topology` fixture that caches the parsed
topology.yaml result per pytest-xdist worker session. Tests that
build a GraphEngine can accept `topology` instead of calling
resolve_topology("topology.yaml") repeatedly.

Topology parsing costs ~32ms, so the practical saving per worker is
modest (<1s across all tests). The fixture is mainly for architectural
cleanliness — keeping the "parse once, build engine many" pattern
explicit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-12 21:13:25 -07:00
parent 372c987995
commit 74f5f5cf08
+36
View File
@@ -0,0 +1,36 @@
"""Shared pytest fixtures for the kernbench test suite.
Session-scoped topology caching: ``resolve_topology("topology.yaml")`` is
pure (no side effects), so we cache the result across all tests in a
worker process. Each test still builds its own ``GraphEngine`` (which is
stateful/SimPy-event-consuming and MUST NOT be shared).
"""
from __future__ import annotations
import pytest
from kernbench.topology.builder import resolve_topology
@pytest.fixture(scope="session")
def topology():
"""Session-scoped parsed topology (immutable graph + spec).
Usage in tests::
def test_foo(topology):
engine = GraphEngine(topology.topology_obj, enable_data=True)
"""
return resolve_topology("topology.yaml")
@pytest.fixture(scope="session")
def topology_obj(topology):
"""The TopologyGraph inside the handle (convenience shortcut)."""
return topology.topology_obj
@pytest.fixture(scope="session")
def spec(topology):
"""Topology spec dict (convenience shortcut)."""
return topology.topology_obj.spec