Add a decorator to run a test in an isolated subprocess
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie mit dem test.support-Einstiegspunkt und der bestehenden subprocess-Behandlung in script_helper. Prüfen Sie die verknüpften Pull Requests zusammen mit dem vorgeschlagenen Decorator-Verhalten, einschließlich der Verwendung mit Methoden und TestCase, der Ergebnisberichterstattung, der geerbten regrtest-Konfiguration und running_isolated. Erledigt ist die Aufgabe, wenn die angegebenen Fehler, Übersprünge, Fixtures, subTests und subprocess-Tracebacks transparent gemeldet werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- testing
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 25/100