python / python/cpython

Add a decorator to run a test in an isolated subprocess

Đang mở
#152,548 0 bình luận 1 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

tests type-feature
Ngôn ngữ chính
Python
Star
77.2k
Fork
35.9k
Chỉ số merge pull request
Chỉ số pull request đang chờ

Mô tả

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 whole TestCase subclass (the whole class runs in a single subprocess, so setUpClass()/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), so requires_resource(), requires(), bigmemtest() and similar behave the same in both processes.
  • A running_isolated flag is true while running in the subprocess, so setUp()/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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với entry point test.support và phần xử lý subprocess hiện có trong script_helper. Xem xét các pull request được liên kết cùng với hành vi decorator được đề xuất, bao gồm việc sử dụng với method và TestCase, báo cáo kết quả, cấu hình regrtest được kế thừa và running_isolated. Hoàn tất khi các failure, skip, fixture, subTests và traceback của subprocess được chỉ định được báo cáo một cách minh bạch.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
testing
Loại issue
Tính năng
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
25/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.