You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Windows is tested in CI (Python 3.11-3.14): commands are split without
POSIX escapes, the recorder plugin is copied where a symlink is not
allowed, the recorder reads Windows command lines and existence checks and
matches short (8.3) path names, and the actions find Python and the
venv's Scripts directory.
CI
record takes check: true for a default branch whose every push runs
the full suite: it plans the push's own change from the previous
recording, records, and fails the job on a new failure the plan did not
select that fails again when re-run (a flaky one is only reported). fail-on-test-failure: true fails the job on failing tests, as a plain
test run would. Pull requests then run only the selection.
Planning
A dynamic import through a literal table of tuples is bounded by the
table: a PEP 562 lazy-export __getattr__ (target = _LAZY.get(name), then import_module(target[0])) no longer reaches every
module. D.get(key) reads a literal dict like D[key].
A lookup by a run-time name on a third-party or standard-library module
(getattr(logging, level), dir(builtins)) no longer selects every test
that reaches it whenever anything in its import closure changes, unless
project code stores something on that module.
Execution evidence
A test that runs a python -c snippet that can't run project code (an
interpreter version check importing only built-in modules, with nothing
after the code and no PYTHONPATH-like environment) or uv python list
is no longer always selected.
Editing a module that looks at its own file at import
(Path(__file__).resolve()) no longer replans all its importers from
the code: that stat records only that the file exists. Any other stat of
a source file during a test counts as reading it.
A test that leaves a thread running is no longer always selected;
instead every test is credited with the code background threads are in
the middle of while it runs, which also covers a later test running
beside a thread that loops in one function.
Discovery
Test files and directories named after -- replace testpaths, as in
pytest; a node id, or a path after an option that may take it as its
value, is reported instead of guessed.
--ignore and --ignore-glob (in addopts or after --) are honoured,
below the paths pytest starts from, as pytest applies them:
ignored tests are no longer targets, which run reported as selected
but not collected.
Importing a library's test helper whose name looks like a test class
(from fastapi.testclient import TestClient, aiohttp's TestServer) no
longer reports an incomplete target list.
A conftest pytest does not load (a sibling package's tests, outside testpaths) is no longer read or reported.