Add a decorator to run a test in an isolated subprocess
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 35.9k
- PR merge metrics
- PR metrics pending
Description
Feature or enhancement
Some tests need to run in a fresh interpreter, isolated from the rest of the test run: they mutate process-global or interpreter state that would leak into (or be polluted by) other tests, depend on a clean interpreter startup, or may crash the interpreter outright. Today this has to be done ad hoc per test (spawning a child via script_helper, hand-rolling the result reporting), which is verbose and inconsistent.
I propose a decorator that runs a test in a dedicated subprocess and reports the result transparently, so the test reads like any other:
class MyTest(unittest.TestCase):
@isolated()
def test_global_state(self):
...
It would start in test.support and could later move to unittest.
Proposed behaviour
@isolated()decorates a test method (only that method runs in a subprocess) or a wholeTestCasesubclass (the whole class runs in a single subprocess, sosetUpClass()/setUpModule()run once there).- Failures, errors and skips — including those of individual
subTest()s — are reported for the corresponding test, and show the original subprocess traceback. - A
setUpClass()/setUpModule()failure or skip in the subprocess is reported for the whole class. - The subprocess inherits the parent's regrtest configuration (enabled resources
-u, memory limit-M, verbosity-v, failfast), sorequires_resource(),requires(),bigmemtest()and similar behave the same in both processes. - A
running_isolatedflag is true while running in the subprocess, sosetUp()/tearDown()and the class- and module-level fixtures can choose what to run there.
Linked PRs
Linked PRs
- gh-152551
- gh-152565
- gh-152570
- gh-152639
- gh-154780
- gh-154783
- gh-154784
- gh-155162
- gh-155163
- gh-155167
- gh-155168
- gh-155169
- gh-155230
- gh-155231
- gh-155238
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the test.support entry point and existing subprocess handling in script_helper. Review the linked pull requests alongside the proposed decorator behavior, including method and TestCase use, result reporting, inherited regrtest configuration, and running_isolated. Done means the specified failures, skips, fixtures, subTests, and subprocess tracebacks are reported transparently.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- testing
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 25/100