Add a decorator to run a test in an isolated subprocess
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 36k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece pelo ponto de entrada test.support e pelo tratamento existente de subprocess em script_helper. Revise os pull requests vinculados juntamente com o comportamento proposto do decorador, incluindo o uso com métodos e TestCase, o relatório de resultados, a configuração herdada de regrtest e running_isolated. Está concluído quando as falhas, os skips, as fixtures, os subTests e os tracebacks de subprocess especificados são reportados de forma transparente.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- testing
- Tipo de issue
- Funcionalidade
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Status de atividade
- Estagnada
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 25/100