test --- Gói kiểm tra hồi quy cho Python

Ghi chú

Gói test chỉ dành cho Python sử dụng nội bộ. Nó được ghi lại vì lợi ích của các nhà phát triển cốt lõi của Python. Bất kỳ việc sử dụng gói này bên ngoài thư viện chuẩn của Python đều không được khuyến khích vì mã được đề cập ở đây có thể thay đổi hoặc bị xóa mà không cần thông báo giữa các bản phát hành Python.


Gói test chứa tất cả các bài kiểm tra hồi quy cho Python cũng như các mô-đun test.supporttest.regrtest. test.support được sử dụng để nâng cao các bài kiểm tra của bạn trong khi test.regrtest điều khiển bộ thử nghiệm.

Mỗi mô-đun trong gói test có tên bắt đầu bằng test_ là bộ thử nghiệm cho một mô-đun hoặc tính năng cụ thể. Tất cả các bài kiểm tra mới phải được viết bằng mô-đun unittest hoặc doctest. Một số thử nghiệm cũ hơn được viết bằng kiểu thử nghiệm "truyền thống" so sánh kết quả được in với sys.stdout; kiểu thử nghiệm này được coi là không được dùng nữa.

Xem thêm

Mô-đun unittest

Viết bài kiểm tra hồi quy PyUnit.

Mô-đun doctest

Các thử nghiệm được nhúng trong chuỗi tài liệu.

Viết bài kiểm tra đơn vị cho gói test

Tốt nhất là các thử nghiệm sử dụng mô-đun unittest phải tuân theo một số nguyên tắc. Một là đặt tên cho mô-đun thử nghiệm bằng cách bắt đầu bằng test_ và kết thúc bằng tên của mô-đun đang được thử nghiệm. Các phương pháp thử nghiệm trong mô-đun thử nghiệm phải bắt đầu bằng test_ và kết thúc bằng phần mô tả về phương pháp đang thử nghiệm. Điều này là cần thiết để người lái thử công nhận các phương thức này là phương pháp thử nghiệm. Ngoài ra, không nên đưa vào chuỗi tài liệu nào cho phương thức này. Nên sử dụng nhận xét (chẳng hạn như # Tests function returns only True or False) để cung cấp tài liệu về các phương pháp thử nghiệm. Điều này được thực hiện vì các chuỗi tài liệu sẽ được in ra nếu chúng tồn tại và do đó thử nghiệm nào đang được chạy không được nêu rõ.

Một bản tóm tắt cơ bản thường được sử dụng:

nhập khẩu đơn vị nhất
từ hỗ trợ nhập thử nghiệm

lớp MyTestCase1(unittest.TestCase):

    # Only sử dụng setUp() và TearsDown() nếu cần thiết

    def setUp(tự):
        ...  để thực thi để chuẩn bị cho các bài kiểm tra ...

    def TearsDown(tự):
        ...  cần thực thi để dọn dẹp sau khi kiểm tra ...

    def test_feature_one(self):
        # Test tính năng một.
        ...  kiểm tra ...

    def test_feature_two(self):
        # Test có hai tính năng.
        ...  kiểm tra ...

    ... thêm phương pháp thử nghiệm ...

lớp MyTestCase2(unittest.TestCase):
    ... cấu trúc tương tự như MyTestCase1 ...

... thêm các lớp kiểm tra ...

nếu __name__ == '__main__':
    unittest.main()

Mẫu mã này cho phép bộ thử nghiệm được chạy bởi test.regrtest, dưới dạng tập lệnh hỗ trợ unittest CLI hoặc thông qua python -m unittest CLI.

Mục tiêu của thử nghiệm hồi quy là cố gắng phá mã. Điều này dẫn đến một số hướng dẫn cần được tuân theo:

  • Bộ thử nghiệm sẽ thực hiện tất cả các lớp, hàm và hằng số. Điều này không chỉ bao gồm API bên ngoài sẽ được đưa ra thế giới bên ngoài mà còn bao gồm cả mã "riêng tư".

  • Ưu tiên kiểm tra hộp trắng (kiểm tra mã đang được kiểm tra khi các bài kiểm tra đang được viết). Kiểm tra hộp đen (chỉ kiểm tra giao diện người dùng đã xuất bản) chưa đủ hoàn chỉnh để đảm bảo tất cả các trường hợp ranh giới và biên đều được kiểm tra.

  • Đảm bảo tất cả các giá trị có thể được kiểm tra bao gồm cả những giá trị không hợp lệ. Điều này đảm bảo rằng không chỉ tất cả các giá trị hợp lệ đều được chấp nhận mà cả các giá trị không phù hợp cũng được xử lý chính xác.

  • Tận dụng càng nhiều đường dẫn mã càng tốt. Kiểm tra xem phân nhánh xảy ra ở đâu và từ đó điều chỉnh đầu vào để đảm bảo có nhiều đường dẫn khác nhau xuyên qua mã được thực hiện.

  • Thêm kiểm tra rõ ràng cho bất kỳ lỗi nào được phát hiện đối với mã đã kiểm tra. Điều này sẽ đảm bảo rằng lỗi sẽ không xuất hiện nữa nếu mã được thay đổi trong tương lai.

  • Đảm bảo dọn dẹp sau khi kiểm tra (chẳng hạn như đóng và xóa tất cả các tệp tạm thời).

  • Nếu việc kiểm tra phụ thuộc vào một điều kiện cụ thể của hệ điều hành thì hãy xác minh điều kiện đó đã tồn tại trước khi thử kiểm tra.

  • Nhập càng ít mô-đun càng tốt và thực hiện càng sớm càng tốt. Điều này giảm thiểu sự phụ thuộc bên ngoài của các thử nghiệm và cũng giảm thiểu hành vi bất thường có thể xảy ra do tác dụng phụ của việc nhập mô-đun.

  • Cố gắng tối đa hóa việc tái sử dụng mã. Đôi khi, các bài kiểm tra sẽ thay đổi tùy theo điều gì đó nhỏ như loại đầu vào được sử dụng. Giảm thiểu trùng lặp mã bằng cách phân lớp lớp kiểm tra cơ bản với lớp chỉ định đầu vào

    lớp TestFuncAcceptsSequencesMixin:
    
        func = mySuperWhammyFunction
    
        def test_func(tự):
            self.func(self.arg)
    
    lớp AcceptLists(TestFuncAcceptsSequencesMixin, unittest.TestCase):
        đối số = [1, 2, 3]
    
    lớp AcceptStrings(TestFuncAcceptsSequencesMixin, unittest.TestCase):
        arg = 'abc'
    
    lớp AcceptTuples(TestFuncAcceptsSequencesMixin, unittest.TestCase):
        đối số = (1, 2, 3)
    

    Khi sử dụng mẫu này, hãy nhớ rằng tất cả các lớp kế thừa từ unittest.TestCase đều được chạy dưới dạng kiểm tra. Lớp TestFuncAcceptsSequencesMixin trong ví dụ trên không có bất kỳ dữ liệu nào và do đó không thể tự chạy, do đó nó không kế thừa từ unittest.TestCase.

Xem thêm

Phát triển dựa trên thử nghiệm

Một cuốn sách của Kent Beck về viết bài kiểm tra trước khi viết mã.

Chạy thử nghiệm bằng giao diện dòng lệnh

Gói test có thể chạy dưới dạng tập lệnh để điều khiển bộ kiểm tra hồi quy của Python, nhờ tùy chọn -m: python -m test. Dưới mui xe, nó sử dụng test.regrtest; lệnh gọi python -m test.regrtest được sử dụng trong các phiên bản Python trước vẫn hoạt động. Việc tự chạy tập lệnh sẽ tự động bắt đầu chạy tất cả các bài kiểm tra hồi quy trong gói test. Nó thực hiện điều này bằng cách tìm tất cả các mô-đun trong gói có tên bắt đầu bằng test_, nhập chúng và thực thi hàm test_main() nếu có hoặc tải các bài kiểm tra qua unittest.TestLoader.loadTestsFromModule nếu test_main không tồn tại. Tên của các bài kiểm tra cần thực hiện cũng có thể được chuyển vào tập lệnh. Việc chỉ định một thử nghiệm hồi quy đơn (python -m test test_spam) sẽ giảm thiểu đầu ra và chỉ in xem thử nghiệm đạt hay thất bại.

Việc chạy trực tiếp test sẽ cho phép thiết lập những tài nguyên có sẵn để sử dụng cho các bài kiểm tra. Bạn thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -u. Việc chỉ định all làm giá trị cho tùy chọn -u sẽ kích hoạt tất cả các tài nguyên có thể có: python -m test -uall. Nếu muốn có tất cả ngoại trừ một tài nguyên (trường hợp phổ biến hơn), một danh sách các tài nguyên không mong muốn được phân tách bằng dấu phẩy có thể được liệt kê sau all. Lệnh python -m test -uall,-audio,-largefile sẽ chạy test với tất cả các tài nguyên ngoại trừ tài nguyên audiolargefile. Để biết danh sách tất cả các tài nguyên và các tùy chọn dòng lệnh khác, hãy chạy python -m test -h.

Một số cách khác để thực hiện kiểm thử hồi quy phụ thuộc vào nền tảng mà kiểm thử đang được thực hiện trên nền tảng nào. Trên Unix, bạn có thể chạy make test ở thư mục cấp cao nhất nơi Python được xây dựng. Trên Windows, việc thực thi rt.bat từ thư mục PCbuild của bạn sẽ chạy tất cả các bài kiểm tra hồi quy.

Added in version 3.14: Đầu ra được tô màu theo mặc định và có thể là controlled using environment variables.

test.support --- Tiện ích cho bộ thử nghiệm Python

Mô-đun test.support cung cấp hỗ trợ cho bộ kiểm tra hồi quy của Python.

Ghi chú

test.support không phải là mô-đun công khai. Nó được ghi lại ở đây để giúp các nhà phát triển Python viết bài kiểm tra. Z001zz của mô-đun này có thể thay đổi mà không cần lo ngại về khả năng tương thích ngược giữa các bản phát hành.

Mô-đun này xác định các ngoại lệ sau:

exception test.support.TestFailed

Ngoại lệ được nêu ra khi thử nghiệm thất bại. Điều này không được chấp nhận vì các thử nghiệm dựa trên unittest- và các phương pháp xác nhận của unittest.TestCase.

exception test.support.ResourceDenied

Lớp con của unittest.SkipTest. Xảy ra khi không có tài nguyên (chẳng hạn như kết nối mạng). Tăng lên bởi chức năng requires().

Mô-đun test.support xác định các hằng số sau:

test.support.verbose

True khi đầu ra chi tiết được bật. Nên kiểm tra khi muốn có thêm thông tin chi tiết về quá trình chạy thử. verbose được thiết lập bởi test.regrtest.

test.support.is_jython

True nếu trình thông dịch đang chạy là Jython.

test.support.is_android

True nếu sys.platformandroid.

test.support.is_emscripten

True nếu sys.platformemscripten.

test.support.is_wasi

True nếu sys.platformwasi.

test.support.is_apple_mobile

True nếu sys.platformios, tvos hoặc watchos.

test.support.is_apple

True nếu sys.platformdarwin hoặc is_apple_mobileTrue.

test.support.unix_shell

Đường dẫn cho shell nếu không có trên Windows; nếu không thì None.

test.support.LOOPBACK_TIMEOUT

Thời gian chờ tính bằng giây đối với các bài kiểm tra sử dụng máy chủ mạng đang lắng nghe trên giao diện vòng lặp cục bộ của mạng như 127.0.0.1.

Thời gian chờ đủ dài để tránh lỗi kiểm tra: cần tính đến việc máy khách và máy chủ có thể chạy trong các luồng khác nhau hoặc thậm chí các quy trình khác nhau.

Thời gian chờ phải đủ dài cho các phương thức connect(), recv()send() của socket.socket.

Giá trị mặc định của nó là 5 giây.

Xem thêm INTERNET_TIMEOUT.

test.support.INTERNET_TIMEOUT

Thời gian chờ tính bằng giây đối với các yêu cầu mạng truy cập internet.

Thời gian chờ đủ ngắn để ngăn quá trình kiểm tra chờ quá lâu nếu yêu cầu internet bị chặn vì bất kỳ lý do gì.

Thông thường, thời gian chờ sử dụng INTERNET_TIMEOUT không nên đánh dấu bài kiểm tra là thất bại mà thay vào đó hãy bỏ qua bài kiểm tra: xem transient_internet().

Giá trị mặc định của nó là 1 phút.

Xem thêm LOOPBACK_TIMEOUT.

test.support.SHORT_TIMEOUT

Thời gian chờ tính bằng giây để đánh dấu bài kiểm tra là không thành công nếu quá trình kiểm tra diễn ra "quá lâu".

Giá trị thời gian chờ phụ thuộc vào tùy chọn dòng lệnh --timeout regrtest.

Nếu thử nghiệm sử dụng SHORT_TIMEOUT bắt đầu thất bại ngẫu nhiên trên các bot xây dựng chậm, hãy sử dụng LONG_TIMEOUT để thay thế.

Giá trị mặc định của nó là 30 giây.

test.support.LONG_TIMEOUT

Thời gian chờ tính bằng giây để phát hiện khi bài kiểm tra bị treo.

Nó đủ dài để giảm nguy cơ thử nghiệm thất bại trên các buildbot Python chậm nhất. Không nên sử dụng nó để đánh dấu một bài kiểm tra là thất bại nếu bài kiểm tra diễn ra "quá lâu". Giá trị thời gian chờ phụ thuộc vào tùy chọn dòng lệnh --timeout regrtest.

Giá trị mặc định của nó là 5 phút.

Xem thêm LOOPBACK_TIMEOUT, INTERNET_TIMEOUTSHORT_TIMEOUT.

test.support.PGO

Đặt thời điểm có thể bỏ qua các bài kiểm tra khi chúng không hữu ích cho PGO.

test.support.PIPE_MAX_SIZE

Một hằng số có khả năng lớn hơn kích thước bộ đệm đường dẫn hệ điều hành cơ bản để thực hiện việc chặn ghi.

test.support.Py_DEBUG

True nếu Python được xây dựng với macro Py_DEBUG được xác định, nghĩa là nếu Python là built in debug mode.

Added in version 3.12.

test.support.SOCK_MAX_SIZE

Một hằng số có khả năng lớn hơn kích thước bộ đệm ổ cắm hệ điều hành cơ bản để thực hiện việc chặn ghi.

test.support.TEST_SUPPORT_DIR

Đặt vào thư mục cấp cao nhất chứa test.support.

test.support.TEST_HOME_DIR

Đặt vào thư mục cấp cao nhất cho gói thử nghiệm.

test.support.TEST_DATA_DIR

Đặt vào thư mục data trong gói thử nghiệm.

test.support.MAX_Py_ssize_t

Đặt thành sys.maxsize để kiểm tra bộ nhớ lớn.

test.support.max_memuse

Được đặt bởi set_memlimit() làm giới hạn bộ nhớ cho các bài kiểm tra bộ nhớ lớn. Bị giới hạn bởi MAX_Py_ssize_t.

test.support.real_max_memuse

Được đặt bởi set_memlimit() làm giới hạn bộ nhớ cho các bài kiểm tra bộ nhớ lớn. Không bị giới hạn bởi MAX_Py_ssize_t.

test.support.MISSING_C_DOCSTRINGS

Đặt thành True nếu Python được xây dựng mà không có chuỗi tài liệu (macro WITH_DOC_STRINGS không được xác định). Xem tùy chọn configure --without-doc-strings.

Xem thêm biến HAVE_DOCSTRINGS.

test.support.HAVE_DOCSTRINGS

Đặt thành True nếu có sẵn chuỗi tài liệu hàm. Xem tùy chọn python -OO, loại bỏ các chuỗi tài liệu của các hàm được triển khai trong Python.

Xem thêm biến MISSING_C_DOCSTRINGS.

test.support.TEST_HTTP_URL

Xác định URL của máy chủ HTTP chuyên dụng để kiểm tra mạng.

test.support.ALWAYS_EQ

Đối tượng tương đương với bất cứ điều gì. Được sử dụng để kiểm tra so sánh loại hỗn hợp.

test.support.NEVER_EQ

Đối tượng không bằng bất cứ thứ gì (kể cả ALWAYS_EQ). Được sử dụng để kiểm tra so sánh loại hỗn hợp.

test.support.LARGEST

Đối tượng lớn hơn bất cứ thứ gì (trừ chính nó). Được sử dụng để kiểm tra so sánh loại hỗn hợp.

test.support.SMALLEST

Đối tượng nhỏ hơn bất cứ thứ gì (trừ chính nó). Được sử dụng để kiểm tra so sánh loại hỗn hợp.

Mô-đun test.support xác định các chức năng sau:

test.support.busy_retry(timeout, err_msg=None, /, *, error=True)

Chạy phần thân vòng lặp cho đến khi break dừng vòng lặp.

Sau timeout giây, tăng AssertionError nếu error đúng hoặc chỉ dừng vòng lặp nếu error sai.

Ví dụ:

cho _ trong support.busy_retry(support.SHORT_TIMEOUT):
    nếu kiểm tra():
        phá vỡ

Ví dụ về lỗi=Sử dụng sai:

cho _ trong support.busy_retry(support.SHORT_TIMEOUT, error=False):
    nếu kiểm tra():
        phá vỡ
khác:
    nâng cao RuntimeError('lỗi tùy chỉnh của tôi')
test.support.sleeping_retry(timeout, err_msg=None, /, *, init_delay=0.010, max_delay=1.0, error=True)

Chiến lược chờ áp dụng thời gian chờ theo cấp số nhân.

Chạy phần thân vòng lặp cho đến khi break dừng vòng lặp. Ngủ ở mỗi lần lặp vòng lặp, nhưng không ngủ ở lần lặp đầu tiên. Độ trễ khi ngủ tăng gấp đôi sau mỗi lần lặp (tối đa max_delay giây).

Xem tài liệu busy_retry() để biết cách sử dụng các thông số.

Ví dụ đưa ra một ngoại lệ sau SHORT_TIMEOUT giây:

cho _ trong support.sleeping_retry(support.SHORT_TIMEOUT):
    nếu kiểm tra():
        phá vỡ

Ví dụ về lỗi=Sử dụng sai:

cho _ trong support.sleeping_retry(support.SHORT_TIMEOUT, error=False):
    nếu kiểm tra():
        phá vỡ
khác:
    nâng cao RuntimeError('lỗi tùy chỉnh của tôi')
test.support.is_resource_enabled(resource)

Trả về True nếu resource được bật và khả dụng. Danh sách các tài nguyên khả dụng chỉ được đặt khi test.regrtest đang thực hiện kiểm tra.

test.support.get_resource_value(resource)

Trả về giá trị được chỉ định cho resource (dưới dạng -u resource=value). Trả về None nếu resource bị tắt hoặc không có giá trị nào được chỉ định.

test.support.python_is_optimized()

Trả về True nếu Python không được xây dựng bằng -O0 hoặc -Og.

test.support.with_pymalloc()

Trả về _testcapi.WITH_PYMALLOC.

test.support.requires(resource, msg=None)

Tăng ResourceDenied nếu resource không có sẵn. msg là đối số của ResourceDenied nếu nó được nâng lên. Luôn trả về True nếu được gọi bởi một hàm có __name__'__main__'. Được sử dụng khi các bài kiểm tra được thực hiện bởi test.regrtest.

test.support.sortdict(dict)

Trả về giá trị đại diện của dict với các khóa được sắp xếp.

test.support.findfile(filename, subdir=None)

Trả lại đường dẫn tới file có tên filename. Nếu không tìm thấy kết quả phù hợp, filename sẽ được trả về. Điều này không có nghĩa là lỗi vì nó có thể là đường dẫn đến tệp.

Đặt subdir cho biết đường dẫn tương đối sẽ sử dụng để tìm tệp thay vì tìm trực tiếp trong thư mục đường dẫn.

test.support.get_pagesize()

Nhận kích thước của một trang theo byte.

Added in version 3.12.

test.support.setswitchinterval(interval)

Đặt sys.setswitchinterval() thành interval đã cho. Xác định khoảng thời gian tối thiểu cho hệ thống Android để ngăn hệ thống bị treo.

test.support.check_impl_detail(**guards)

Sử dụng kiểm tra này để bảo vệ các thử nghiệm triển khai cụ thể của CPython hoặc chỉ chạy chúng trên các triển khai được bảo vệ bởi các đối số. Hàm này trả về True hoặc False tùy thuộc vào nền tảng máy chủ. Ví dụ sử dụng:

check_impl_detail() # Only trên CPython (mặc định).
check_impl_detail(jython=True) # Only trên Jython.
check_impl_detail(cpython=False) # Everywhere ngoại trừ CPython.
test.support.set_memlimit(limit)

Đặt giá trị cho max_memusereal_max_memuse để kiểm tra bộ nhớ lớn.

test.support.record_original_stdout(stdout)

Lưu trữ giá trị từ stdout. Nó có nghĩa là giữ thiết bị xuất chuẩn tại thời điểm bắt đầu hối tiếc.

test.support.get_original_stdout()

Trả về thiết bị xuất chuẩn ban đầu được đặt bởi record_original_stdout() hoặc sys.stdout nếu nó không được đặt.

test.support.args_from_interpreter_flags()

Trả về danh sách các đối số dòng lệnh tái tạo các cài đặt hiện tại trong sys.flagssys.warnoptions.

test.support.optim_args_from_interpreter_flags()

Trả về danh sách các đối số dòng lệnh tái tạo cài đặt tối ưu hóa hiện tại trong sys.flags.

test.support.captured_stdin()
test.support.captured_stdout()
test.support.captured_stderr()

Trình quản lý bối cảnh tạm thời thay thế luồng được đặt tên bằng đối tượng io.StringIO.

Ví dụ sử dụng với luồng đầu ra

với capture_stdout()  thiết bị xuất chuẩn, capture_stderr()  thiết bị xuất chuẩn:
    in ("xin chào")
    print("lỗi", file=sys.stderr)
khẳng định stdout.getvalue() == "xin chào\n"
khẳng định stderr.getvalue() == "error\n"

Ví dụ sử dụng với luồng đầu vào

với capture_stdin()  stdin:
    stdin.write('xin chào\n')
    stdin.seek(0)
     kiểm tra # call tiêu thụ từ sys.stdin
    bị bắt = đầu vào()
self.assertEqual(đã bắt, "xin chào")
test.support.disable_faulthandler()

Trình quản lý bối cảnh vô hiệu hóa tạm thời faulthandler.

test.support.gc_collect()

Buộc thu thập càng nhiều đồ vật càng tốt. Điều này là cần thiết vì người thu gom rác không đảm bảo việc phân bổ kịp thời. Điều này có nghĩa là các phương thức __del__ có thể được gọi muộn hơn dự kiến ​​và các điểm yếu có thể tồn tại lâu hơn dự kiến.

test.support.disable_gc()

Trình quản lý bối cảnh vô hiệu hóa trình thu gom rác khi nhập cảnh. Khi thoát, trình thu gom rác được khôi phục về trạng thái trước đó.

test.support.swap_attr(obj, attr, new_val)

Trình quản lý bối cảnh để hoán đổi một thuộc tính với một đối tượng mới.

Cách sử dụng:

với swap_attr(obj, "attr", 5):
    ...

Điều này sẽ đặt obj.attr thành 5 trong suốt thời gian của khối with, khôi phục giá trị cũ ở cuối khối. Nếu attr không tồn tại trên obj, nó sẽ được tạo và xóa ở cuối khối.

Giá trị cũ (hoặc None nếu nó không tồn tại) sẽ được gán cho mục tiêu của mệnh đề "as", nếu có.

test.support.swap_item(obj, attr, new_val)

Trình quản lý bối cảnh để trao đổi một mục với một đối tượng mới.

Cách sử dụng:

với swap_item(obj, "item", 5):
    ...

Điều này sẽ đặt obj["item"] thành 5 trong suốt thời gian của khối with, khôi phục giá trị cũ ở cuối khối. Nếu item không tồn tại trên obj, nó sẽ được tạo và xóa ở cuối khối.

Giá trị cũ (hoặc None nếu nó không tồn tại) sẽ được gán cho mục tiêu của mệnh đề "as", nếu có.

test.support.flush_std_streams()

Gọi phương thức flush() trên sys.stdout và sau đó trên sys.stderr. Nó có thể được sử dụng để đảm bảo rằng thứ tự nhật ký nhất quán trước khi ghi vào stderr.

Added in version 3.11.

test.support.print_warning(msg)

In cảnh báo vào sys.__stderr__. Định dạng tin nhắn là: f"Warning -- {msg}". Nếu msg được tạo thành từ nhiều dòng, hãy thêm tiền tố "Warning -- " vào mỗi dòng.

Added in version 3.9.

test.support.wait_process(pid, *, exitcode, timeout=None)

Đợi cho đến khi quá trình pid hoàn tất và kiểm tra xem mã thoát quy trình có phải là exitcode hay không.

Tăng AssertionError nếu mã thoát quy trình không bằng exitcode.

Nếu quá trình chạy lâu hơn timeout giây (SHORT_TIMEOUT theo mặc định), hãy hủy quá trình đó và tăng AssertionError. Tính năng hết thời gian chờ không có sẵn trên Windows.

Added in version 3.9.

test.support.calcobjsize(fmt)

Trả về kích thước của PyObject có thành viên cấu trúc được xác định bởi fmt. Giá trị trả về bao gồm kích thước của tiêu đề và căn chỉnh đối tượng Python.

test.support.calcvobjsize(fmt)

Trả về kích thước của PyVarObject có thành viên cấu trúc được xác định bởi fmt. Giá trị trả về bao gồm kích thước của tiêu đề và căn chỉnh đối tượng Python.

test.support.checksizeof(test, o, size)

Đối với testcase test, xác nhận rằng sys.getsizeof cho o cộng với kích thước tiêu đề GC bằng size.

@test.support.anticipate_failure(condition)

Một công cụ trang trí để đánh dấu các bài kiểm tra có điều kiện bằng unittest.expectedFailure(). Bất kỳ việc sử dụng công cụ trang trí này đều phải có nhận xét liên quan xác định vấn đề về trình theo dõi có liên quan.

test.support.system_must_validate_cert(f)

Trình trang trí bỏ qua bài kiểm tra trang trí về lỗi xác thực chứng nhận TLS.

@test.support.run_with_locale(catstr, *locales)

Một công cụ trang trí để chạy một hàm ở một ngôn ngữ khác, đặt lại chính xác hàm đó sau khi hoàn thành. catstr là danh mục ngôn ngữ dưới dạng chuỗi (ví dụ: "LC_ALL"). locales đã vượt qua sẽ được thử tuần tự và ngôn ngữ hợp lệ đầu tiên sẽ được sử dụng.

@test.support.run_with_tz(tz)

Công cụ trang trí để chạy một chức năng trong một múi giờ cụ thể, đặt lại chính xác chức năng đó sau khi hoàn thành.

@test.support.requires_freebsd_version(*min_version)

Trang trí cho phiên bản tối thiểu khi chạy thử nghiệm trên FreeBSD. Nếu phiên bản FreeBSD nhỏ hơn mức tối thiểu thì quá trình kiểm tra sẽ bị bỏ qua.

@test.support.requires_linux_version(*min_version)

Trang trí cho phiên bản tối thiểu khi chạy thử nghiệm trên Linux. Nếu phiên bản Linux thấp hơn mức tối thiểu, bài kiểm tra sẽ bị bỏ qua.

@test.support.requires_mac_version(*min_version)

Trang trí cho phiên bản tối thiểu khi chạy thử nghiệm trên macOS. Nếu phiên bản macOS nhỏ hơn mức tối thiểu, bài kiểm tra sẽ bị bỏ qua.

@test.support.requires_gil_enabled

Công cụ trang trí để bỏ qua các bài kiểm tra trên bản dựng có luồng miễn phí. Nếu GIL bị tắt, bài kiểm tra sẽ bị bỏ qua.

@test.support.requires_IEEE_754

Công cụ trang trí để bỏ qua các bài kiểm tra trên nền tảng 754 không phải IEEE.

@test.support.requires_zlib

Trang trí để bỏ qua các bài kiểm tra nếu zlib không tồn tại.

@test.support.requires_gzip

Trang trí để bỏ qua các bài kiểm tra nếu gzip không tồn tại.

@test.support.requires_bz2

Trang trí để bỏ qua các bài kiểm tra nếu bz2 không tồn tại.

@test.support.requires_lzma

Trang trí để bỏ qua các bài kiểm tra nếu lzma không tồn tại.

@test.support.requires_resource(resource)

Trang trí để bỏ qua các bài kiểm tra nếu resource không có sẵn.

@test.support.requires_docstrings

Công cụ trang trí chỉ chạy thử nghiệm nếu HAVE_DOCSTRINGS.

@test.support.requires_limited_api

Công cụ trang trí chỉ chạy thử nghiệm nếu có sẵn Limited C API.

@test.support.cpython_only

Trang trí cho các bài kiểm tra chỉ áp dụng cho CPython.

@test.support.impl_detail(msg=None, **guards)

Công cụ trang trí để gọi check_impl_detail() trên guards. Nếu điều đó trả về False thì hãy sử dụng msg làm lý do để bỏ qua bài kiểm tra.

@test.support.thread_unsafe(reason=None)

Công cụ trang trí để đánh dấu các bài kiểm tra là không an toàn theo chuỗi. Thử nghiệm này luôn chạy trong một luồng ngay cả khi được gọi bằng --parallel-threads.

@test.support.no_tracing

Trang trí để tạm thời tắt tính năng theo dõi trong suốt thời gian thử nghiệm.

@test.support.refcount_test

Trang trí cho các bài kiểm tra liên quan đến việc đếm tham chiếu. Trình trang trí không chạy thử nghiệm nếu nó không được CPython chạy. Bất kỳ chức năng theo dõi nào đều không được đặt trong suốt thời gian thử nghiệm để ngăn chặn việc đếm lại không mong muốn do chức năng theo dõi gây ra.

@test.support.bigmemtest(size, memuse, dry_run=True)

Trang trí cho các bài kiểm tra bigmem.

size là kích thước được yêu cầu cho thử nghiệm (theo đơn vị tùy ý, được giải thích bằng thử nghiệm.) memuse là số byte trên mỗi đơn vị cho thử nghiệm hoặc ước tính chính xác về nó. Ví dụ: một bài kiểm tra cần bộ đệm hai byte, mỗi bộ 4 GiB, có thể được trang trí bằng @bigmemtest(size=_4G, memuse=2).

Đối số size thường được chuyển cho phương thức kiểm tra được trang trí dưới dạng đối số bổ sung. Nếu dry_runTrue thì giá trị được truyền cho phương pháp thử nghiệm có thể nhỏ hơn giá trị được yêu cầu. Nếu dry_runFalse, điều đó có nghĩa là thử nghiệm không hỗ trợ chạy giả khi -M không được chỉ định.

@test.support.bigaddrspacetest

Trang trí cho các bài kiểm tra lấp đầy không gian địa chỉ.

test.support.linked_to_musl()

Trả về False nếu không có bằng chứng nào cho thấy trình thông dịch được biên dịch bằng musl, nếu không thì trả về bộ ba phiên bản, (0, 0, 0) nếu phiên bản đó không xác định hoặc phiên bản thực tế nếu biết phiên bản đó. Dự định sử dụng trong trang trí skip. emscriptenwasi được cho là được biên dịch bằng musl; nếu không thì platform.libc_ver sẽ được chọn.

test.support.check_syntax_error(testcase, statement, errtext='', *, lineno=None, offset=None)

Kiểm tra lỗi cú pháp trong statement bằng cách thử biên dịch statement. testcase là phiên bản unittest cho bài kiểm tra. errtext là biểu thức chính quy phải khớp với biểu diễn chuỗi của SyntaxError được nâng lên. Nếu lineno không phải là None, hãy so sánh với dòng ngoại lệ. Nếu offset không phải là None, hãy so sánh với phần bù của ngoại lệ.

test.support.open_urlresource(url, *args, **kw)

Mở url. Nếu mở không thành công, tăng TestFailed.

test.support.reap_children()

Sử dụng phần này ở cuối test_main bất cứ khi nào các quy trình phụ được bắt đầu. Điều này sẽ giúp đảm bảo rằng không có thêm trẻ em (thây ma) nào bám vào tài nguyên và gây ra vấn đề khi tìm kiếm phản ánh.

test.support.get_attribute(obj, name)

Nhận một thuộc tính, tăng unittest.SkipTest nếu AttributeError được nâng lên.

test.support.catch_unraisable_exception()

Trình quản lý bối cảnh phát hiện ngoại lệ không thể xử lý được bằng sys.unraisablehook().

Việc lưu trữ giá trị ngoại lệ (cm.unraisable.exc_value) sẽ tạo ra một chu trình tham chiếu. Chu trình tham chiếu bị phá vỡ rõ ràng khi trình quản lý bối cảnh thoát.

Việc lưu trữ đối tượng (cm.unraisable.object) có thể phục hồi nó nếu nó được đặt thành một đối tượng đang được hoàn thiện. Thoát khỏi trình quản lý bối cảnh sẽ xóa đối tượng được lưu trữ.

Cách sử dụng:

với support.catch_unraisable_Exception()  cm:
    # code tạo ra một "ngoại lệ không thể xử lý được"
    ...

    # check ngoại lệ không thể nâng được: sử dụng cm.unraisable
    ...

Thuộc tính # cm.unraisable không còn tồn tại tại thời điểm này
# (để phá vỡ chu trình tham chiếu)

Added in version 3.8.

test.support.load_package_tests(pkg_dir, loader, standard_tests, pattern)

Triển khai chung giao thức unittest load_tests để sử dụng trong các gói thử nghiệm. pkg_dir là thư mục gốc của gói; loader, standard_testspattern là những đối số được load_tests mong đợi. Trong các trường hợp đơn giản, __init__.py của gói thử nghiệm có thể như sau:

hệ điều hành nhập khẩu
từ test.support nhập tải_package_tests

def Load_tests(*args):
    trả về Load_package_tests(os.path.dirname(__file__), *args)
test.support.detect_api_mismatch(ref_api, other_api, *, ignore=())

Trả về tập hợp các thuộc tính, hàm hoặc phương thức của ref_api không tìm thấy trên other_api, ngoại trừ danh sách các mục đã xác định sẽ bị bỏ qua trong lần kiểm tra này được chỉ định trong ignore.

Theo mặc định, điều này bỏ qua các thuộc tính riêng tư bắt đầu bằng '_' nhưng bao gồm tất cả các phương thức ma thuật, tức là các thuộc tính bắt đầu và kết thúc bằng '__'.

Added in version 3.5.

test.support.patch(test_instance, object_to_patch, attr_name, new_value)

Ghi đè object_to_patch.attr_name bằng new_value. Đồng thời thêm quy trình dọn dẹp vào test_instance để khôi phục object_to_patch cho attr_name. attr_name phải là thuộc tính hợp lệ cho object_to_patch.

test.support.run_in_subinterp(code)

Chạy code trong trình thông dịch phụ. Tăng unittest.SkipTest nếu tracemalloc được bật.

test.support.check_free_after_iterating(test, iter, cls, args=())

Các phiên bản khẳng định của cls sẽ bị hủy phân bổ sau khi lặp lại.

test.support.missing_compiler_executable(cmd_names=[])

Kiểm tra sự tồn tại của các tệp thực thi trình biên dịch có tên được liệt kê trong cmd_names hoặc tất cả các tệp thực thi trình biên dịch khi cmd_names trống và trả về tệp thực thi bị thiếu đầu tiên hoặc None khi không tìm thấy tệp nào bị thiếu.

test.support.check__all__(test_case, module, name_of_module=None, extra=(), not_exported=())

Khẳng định rằng biến __all__ của module chứa tất cả các tên công khai.

Tên công khai của mô-đun (API của nó) được phát hiện tự động dựa trên việc chúng có khớp với quy ước tên công khai hay không và được xác định trong module.

Đối số name_of_module có thể chỉ định (dưới dạng một chuỗi hoặc bộ dữ liệu) mô-đun nào mà API có thể được xác định để được phát hiện dưới dạng API công khai. Một trường hợp cho điều này là khi module nhập một phần API công khai của nó từ các mô-đun khác, có thể là chương trình phụ trợ C (như csv_csv của nó).

Đối số extra có thể là một tập hợp các tên mà nếu không sẽ không được tự động phát hiện là "công khai", giống như các đối tượng không có thuộc tính __module__ thích hợp. Nếu được cung cấp, nó sẽ được thêm vào những cái được phát hiện tự động.

Đối số not_exported có thể là một tập hợp các tên không được coi là một phần của API công khai mặc dù tên của chúng có ý nghĩa khác.

Ví dụ sử dụng:

thanh nhập khẩu
nhập khẩu foo
nhập khẩu đơn vị nhất
từ hỗ trợ nhập thử nghiệm

lớp MiscTestCase(unittest.TestCase):
    chắc chắn test__all__(tự):
        support.check__all__(self, foo)

lớp OtherTestCase(unittest.TestCase):
    chắc chắn test__all__(tự):
        thêm = {'BAR_CONST', 'FOO_CONST'}
        not_exported = tên {'baz'} # Undocumented.
        # bar nhập một phần API của nó từ _bar.
        support.check__all__(self, bar, ('bar', '_bar'),
                             thêm=bổ sung, not_exported=not_exported)

Added in version 3.6.

test.support.skip_if_broken_multiprocessing_synchronize()

Bỏ qua các kiểm tra nếu thiếu mô-đun multiprocessing.synchronize, nếu không có triển khai semaphore sẵn có hoặc nếu việc tạo khóa sẽ làm tăng OSError.

Added in version 3.10.

test.support.check_disallow_instantiation(test_case, tp, *args, **kwds)

Khẳng định rằng loại tp không thể được khởi tạo bằng argskwds.

Added in version 3.10.

test.support.adjust_int_max_str_digits(max_digits)

Hàm này trả về một trình quản lý bối cảnh sẽ thay đổi cài đặt sys.set_int_max_str_digits() chung trong suốt thời gian của ngữ cảnh để cho phép thực thi mã kiểm tra cần giới hạn khác về số chữ số khi chuyển đổi giữa số nguyên và chuỗi.

Added in version 3.11.

Mô-đun test.support xác định các lớp sau:

class test.support.SuppressCrashReport

Trình quản lý bối cảnh được sử dụng để cố gắng ngăn chặn hộp thoại bật lên gặp sự cố trong các thử nghiệm dự kiến sẽ làm hỏng một quy trình con.

Trên Windows, nó vô hiệu hóa hộp thoại Báo cáo Lỗi Windows bằng SetErrorMode.

Trên UNIX, resource.setrlimit() được sử dụng để đặt giới hạn mềm của resource.RLIMIT_CORE thành 0 nhằm ngăn chặn việc tạo tệp coredump.

Trên cả hai nền tảng, giá trị cũ được __exit__() khôi phục.

class test.support.SaveSignals

Lớp để lưu và khôi phục các trình xử lý tín hiệu đã được trình xử lý tín hiệu Python đăng ký.

save(self)

Lưu bộ xử lý tín hiệu vào từ điển ánh xạ các số tín hiệu vào bộ xử lý tín hiệu hiện tại.

restore(self)

Đặt số tín hiệu từ từ điển save() vào trình xử lý đã lưu.

class test.support.Matcher
matches(self, d, **kwargs)

Cố gắng khớp một lệnh với các đối số được cung cấp.

match_value(self, k, dv, v)

Cố gắng khớp một giá trị được lưu trữ (dv) với một giá trị được cung cấp (v).

test.support.socket_helper --- Tiện ích test socket

Mô-đun test.support.socket_helper cung cấp hỗ trợ cho việc kiểm tra ổ cắm.

Added in version 3.9.

test.support.socket_helper.IPV6_ENABLED

Đặt thành True nếu IPv6 được bật trên máy chủ này, nếu không thì False.

test.support.socket_helper.find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM)

Trả về một cổng không được sử dụng phù hợp để liên kết. Điều này đạt được bằng cách tạo một ổ cắm tạm thời có cùng họ và loại với tham số sock (mặc định là AF_INET, SOCK_STREAM) và liên kết nó với địa chỉ máy chủ được chỉ định (mặc định là 0.0.0.0) với cổng được đặt thành 0, tạo ra một cổng tạm thời không được sử dụng từ HĐH. Ổ cắm tạm thời sau đó được đóng và xóa, đồng thời cổng tạm thời được trả lại.

Nên sử dụng phương pháp này hoặc bind_port() cho bất kỳ thử nghiệm nào mà ổ cắm máy chủ cần được liên kết với một cổng cụ thể trong suốt thời gian thử nghiệm. Việc sử dụng cái nào tùy thuộc vào việc mã gọi có đang tạo ổ cắm Python hay không hoặc nếu một cổng không sử dụng cần được cung cấp trong hàm tạo hoặc được chuyển đến chương trình bên ngoài (tức là đối số -accept cho chế độ s_server của openssl). Luôn ưu tiên bind_port() hơn find_unused_port() nếu có thể. Không nên sử dụng cổng mã hóa cứng vì nó có thể khiến nhiều phiên bản thử nghiệm không thể chạy đồng thời, đây là một vấn đề đối với buildbots.

test.support.socket_helper.bind_port(sock, host=HOST)

Liên kết ổ cắm với một cổng miễn phí và trả về số cổng. Dựa vào các cổng tạm thời để đảm bảo chúng tôi đang sử dụng một cổng không bị ràng buộc. Điều này rất quan trọng vì nhiều thử nghiệm có thể chạy đồng thời, đặc biệt là trong môi trường buildbot. Phương pháp này đưa ra một ngoại lệ nếu sock.familyAF_INETsock.typeSOCK_STREAM và ổ cắm có SO_REUSEADDR hoặc SO_REUSEPORT được đặt trên đó. Các thử nghiệm không bao giờ nên đặt các tùy chọn ổ cắm này cho ổ cắm TCP/IP. Trường hợp duy nhất để thiết lập các tùy chọn này là thử nghiệm tính năng phát đa hướng qua nhiều ổ cắm UDP.

Ngoài ra, nếu tùy chọn ổ cắm SO_EXCLUSIVEADDRUSE có sẵn (tức là trên Windows), nó sẽ được đặt trên ổ cắm. Điều này sẽ ngăn không cho bất kỳ ai khác liên kết với máy chủ/cổng của chúng tôi trong suốt thời gian thử nghiệm.

test.support.socket_helper.bind_unix_socket(sock, addr)

Liên kết một ổ cắm Unix, tăng unittest.SkipTest nếu PermissionError được nâng lên.

@test.support.socket_helper.skip_unless_bind_unix_socket

Công cụ trang trí để chạy thử nghiệm yêu cầu bind() chức năng cho ổ cắm Unix.

test.support.socket_helper.transient_internet(resource_name, *, timeout=30.0, errnos=())

Trình quản lý bối cảnh sẽ tăng ResourceDenied khi các vấn đề khác nhau với kết nối internet được coi là trường hợp ngoại lệ.

test.support.script_helper --- Tiện ích cho bài kiểm tra thực thi Python

Mô-đun test.support.script_helper cung cấp hỗ trợ cho các bài kiểm tra thực thi tập lệnh của Python.

test.support.script_helper.interpreter_requires_environment()

Trả về True nếu sys.executable interpreter yêu cầu các biến môi trường để có thể chạy được.

Tính năng này được thiết kế để sử dụng với @unittest.skipIf() nhằm chú thích các thử nghiệm cần sử dụng chức năng assert_python*() để khởi chạy quy trình thông dịch phụ ở chế độ biệt lập (-I) hoặc không có chế độ môi trường (-E).

Quá trình xây dựng & kiểm tra thông thường không gặp phải tình huống này nhưng nó có thể xảy ra khi cố gắng chạy bộ kiểm tra thư viện tiêu chuẩn từ một trình thông dịch không có nơi chứa rõ ràng với logic tìm nhà hiện tại của Python.

Đặt PYTHONHOME là một cách để khiến hầu hết bộ thử nghiệm chạy trong tình huống đó. PYTHONPATH hoặc PYTHONUSERSITE là các biến môi trường phổ biến khác có thể ảnh hưởng đến việc trình thông dịch có thể khởi động hay không.

test.support.script_helper.run_python_until_end(*args, **env_vars)

Thiết lập môi trường dựa trên env_vars để chạy trình thông dịch trong quy trình con. Các giá trị có thể bao gồm __isolated, __cleanenv, __cwdTERM.

Thay đổi trong phiên bản 3.9: Chức năng này không còn loại bỏ khoảng trắng khỏi stderr nữa.

test.support.script_helper.assert_python_ok(*args, **env_vars)

Xác nhận rằng việc chạy trình thông dịch với args và các biến môi trường tùy chọn env_vars thành công (rc == 0) và trả về một bộ dữ liệu (return code, stdout, stderr).

Nếu tham số chỉ từ khóa __cleanenv được đặt, env_vars sẽ được sử dụng làm môi trường mới.

Python được khởi động ở chế độ biệt lập (tùy chọn dòng lệnh -I), ngoại trừ nếu tham số chỉ từ khóa __isolated được đặt thành False.

Thay đổi trong phiên bản 3.9: Chức năng này không còn loại bỏ khoảng trắng khỏi stderr nữa.

test.support.script_helper.assert_python_failure(*args, **env_vars)

Xác nhận rằng việc chạy trình thông dịch với args và các biến môi trường tùy chọn env_vars không thành công (rc != 0) và trả về một bộ dữ liệu (return code, stdout, stderr).

Xem assert_python_ok() để có thêm lựa chọn.

Thay đổi trong phiên bản 3.9: Chức năng này không còn loại bỏ khoảng trắng khỏi stderr nữa.

test.support.script_helper.spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw)

Chạy một quy trình con Python với các đối số đã cho.

kw là từ khóa bổ sung được chuyển tới subprocess.Popen(). Trả về một đối tượng subprocess.Popen.

test.support.script_helper.kill_python(p)

Chạy quy trình subprocess.Popen đã cho cho đến khi hoàn thành và trả về thiết bị xuất chuẩn.

test.support.script_helper.make_script(script_dir, script_basename, source, omit_suffix=False)

Tạo tập lệnh chứa source trong đường dẫn script_dirscript_basename. Nếu omit_suffixFalse, hãy thêm .py vào tên. Trả lại đường dẫn tập lệnh đầy đủ.

test.support.script_helper.make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None)

Tạo tệp zip tại zip_dirzip_basename với phần mở rộng zip chứa các tệp trong script_name. name_in_zip là tên lưu trữ. Trả về một bộ chứa (full path, full path of archive name).

test.support.script_helper.make_pkg(pkg_dir, init_source='')

Tạo một thư mục có tên pkg_dir chứa tệp __init__ với nội dung là init_source.

test.support.script_helper.make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, source, depth=1, compiled=False)

Tạo một thư mục gói zip có đường dẫn zip_dirzip_basename chứa tệp __init__ trống và tệp script_basename chứa source. Nếu compiledTrue, cả hai tệp nguồn sẽ được biên dịch và thêm vào gói zip. Trả về một bộ đường dẫn zip đầy đủ và tên lưu trữ cho tệp zip.

test.support.bytecode_helper --- Công cụ hỗ trợ kiểm tra việc tạo bytecode chính xác

Mô-đun test.support.bytecode_helper cung cấp hỗ trợ để kiểm tra và kiểm tra việc tạo mã byte.

Added in version 3.9.

Mô-đun định nghĩa lớp sau:

class test.support.bytecode_helper.BytecodeTestCase(unittest.TestCase)

Lớp này có các phương thức xác nhận tùy chỉnh để kiểm tra mã byte.

BytecodeTestCase.get_disassembly_as_string(co)

Trả về quá trình tháo gỡ co dưới dạng chuỗi.

BytecodeTestCase.assertInBytecode(x, opname, argval=_UNSPECIFIED)

Trả về instr nếu tìm thấy opname, nếu không thì trả về AssertionError.

BytecodeTestCase.assertNotInBytecode(x, opname, argval=_UNSPECIFIED)

Ném AssertionError nếu tìm thấy opname.

test.support.threading_helper --- Tiện ích test thread

Mô-đun test.support.threading_helper cung cấp hỗ trợ cho việc kiểm tra luồng.

Added in version 3.10.

test.support.threading_helper.join_thread(thread, timeout=None)

Tham gia thread trong timeout. Tăng AssertionError nếu luồng vẫn tồn tại sau timeout giây.

@test.support.threading_helper.reap_threads

Công cụ trang trí để đảm bảo các luồng được làm sạch ngay cả khi thử nghiệm thất bại.

test.support.threading_helper.start_threads(threads, unlock=None)

Trình quản lý bối cảnh để khởi động threads, là một chuỗi các luồng. unlock là một hàm được gọi sau khi các luồng được bắt đầu, ngay cả khi có ngoại lệ được đưa ra; một ví dụ sẽ là threading.Event.set(). start_threads sẽ cố gắng tham gia các chủ đề đã bắt đầu khi thoát.

test.support.threading_helper.threading_cleanup(*original_values)

Dọn dẹp các chủ đề không được chỉ định trong original_values. Được thiết kế để đưa ra cảnh báo nếu quá trình kiểm tra để lại các luồng đang chạy ở chế độ nền.

test.support.threading_helper.threading_setup()

Trả về số lượng luồng hiện tại và bản sao của các luồng đang treo.

test.support.threading_helper.wait_threads_exit(timeout=None)

Trình quản lý bối cảnh để đợi cho đến khi tất cả các luồng được tạo trong câu lệnh with thoát ra.

test.support.threading_helper.catch_threading_exception()

Trình quản lý bối cảnh bắt ngoại lệ threading.Thread bằng threading.excepthook().

Các thuộc tính được đặt khi bắt gặp ngoại lệ:

  • exc_type

  • exc_value

  • exc_traceback

  • thread

Xem tài liệu threading.excepthook().

Các thuộc tính này sẽ bị xóa khi thoát khỏi trình quản lý bối cảnh.

Cách sử dụng:

với threading_helper.catch_threading_Exception()  cm:
    # code sinh ra một chủ đề gây ra ngoại lệ
    ...

    # check ngoại lệ của luồng, sử dụng thuộc tính cm:
    # exc_type, ex_value, ex_traceback, chủ đề
    ...

# exc_type, ex_value, ex_traceback, thuộc tính thread của cm không còn nữa
# exists vào thời điểm này
# (để tránh chu kỳ tham chiếu)

Added in version 3.8.

test.support.threading_helper.run_concurrently(worker_func, nthreads, args=(), kwargs={})

Chạy đồng thời hàm worker trong nhiều luồng. Tái tạo một ngoại lệ nếu bất kỳ luồng nào đưa ra một ngoại lệ, sau khi tất cả các luồng đã kết thúc.

test.support.os_helper --- Tiện ích test os

Mô-đun test.support.os_helper cung cấp hỗ trợ cho các bài kiểm tra hệ điều hành.

Added in version 3.10.

test.support.os_helper.FS_NONASCII

Ký tự không phải là ASCII có thể được mã hóa bởi os.fsencode().

test.support.os_helper.SAVEDCWD

Đặt thành os.getcwd().

test.support.os_helper.TESTFN

Đặt thành tên an toàn để sử dụng làm tên của tệp tạm thời. Bất kỳ tệp tạm thời nào được tạo phải được đóng và hủy liên kết (xóa).

test.support.os_helper.TESTFN_NONASCII

Đặt thành tên tệp chứa ký tự FS_NONASCII, nếu nó tồn tại. Điều này đảm bảo rằng nếu tên tệp tồn tại, nó có thể được mã hóa và giải mã bằng mã hóa hệ thống tệp mặc định. Điều này cho phép dễ dàng bỏ qua các thử nghiệm yêu cầu tên tệp không phải ASCII trên các nền tảng mà chúng không thể hoạt động.

test.support.os_helper.TESTFN_UNENCODABLE

Đặt thành tên tệp (loại str) không thể được mã hóa bằng mã hóa hệ thống tệp ở chế độ nghiêm ngặt. Có thể là None nếu không thể tạo tên tệp như vậy.

test.support.os_helper.TESTFN_UNDECODABLE

Đặt thành tên tệp (loại byte) không thể giải mã được bằng mã hóa hệ thống tệp ở chế độ nghiêm ngặt. Có thể là None nếu không thể tạo tên tệp như vậy.

test.support.os_helper.TESTFN_UNICODE

Đặt tên không phải là ASCII cho tệp tạm thời.

class test.support.os_helper.EnvironmentVarGuard

Lớp được sử dụng để đặt hoặc hủy đặt tạm thời các biến môi trường. Các phiên bản có thể được sử dụng làm trình quản lý ngữ cảnh và có giao diện từ điển hoàn chỉnh để truy vấn/sửa đổi os.environ cơ bản. Sau khi thoát khỏi trình quản lý bối cảnh, tất cả các thay đổi đối với biến môi trường được thực hiện thông qua phiên bản này sẽ được khôi phục.

Thay đổi trong phiên bản 3.1: Đã thêm giao diện từ điển.

class test.support.os_helper.FakePath(path)

path-like object đơn giản. Nó thực hiện phương thức __fspath__() chỉ trả về đối số path. Nếu path là một ngoại lệ, nó sẽ được nâng lên trong __fspath__().

EnvironmentVarGuard.set(envvar, value)

Tạm thời đặt biến môi trường envvar thành giá trị value.

EnvironmentVarGuard.unset(envvar, *others)

Tạm thời bỏ đặt một hoặc nhiều biến môi trường.

Thay đổi trong phiên bản 3.14: Có thể hủy đặt nhiều biến môi trường.

Trả về True nếu hệ điều hành hỗ trợ các liên kết tượng trưng, nếu không thì trả về False.

test.support.os_helper.can_xattr()

Trả về True nếu hệ điều hành hỗ trợ xattr, False nếu không.

test.support.os_helper.change_cwd(path, quiet=False)

Trình quản lý bối cảnh tạm thời thay đổi thư mục làm việc hiện tại thành path và mang lại thư mục.

Nếu quietFalse, trình quản lý bối cảnh sẽ đưa ra một ngoại lệ do lỗi. Nếu không, nó chỉ đưa ra cảnh báo và giữ nguyên thư mục làm việc hiện tại.

test.support.os_helper.create_empty_file(filename)

Tạo một tập tin trống với filename. Nếu nó đã tồn tại, hãy cắt bớt nó.

test.support.os_helper.fd_count()

Đếm số lượng mô tả tập tin đang mở.

test.support.os_helper.fs_is_case_insensitive(directory)

Trả về True nếu hệ thống tệp cho directory không phân biệt chữ hoa chữ thường.

test.support.os_helper.make_bad_fd()

Tạo bộ mô tả tệp không hợp lệ bằng cách mở và đóng tệp tạm thời và trả về bộ mô tả của nó.

test.support.os_helper.rmdir(filename)

Gọi os.rmdir() trên filename. Trên nền tảng Windows, điều này được bao bọc bằng một vòng chờ để kiểm tra sự tồn tại của tệp, điều này cần thiết do các chương trình chống vi-rút có thể giữ tệp mở và ngăn chặn việc xóa.

test.support.os_helper.rmtree(path)

Gọi shutil.rmtree() trên path hoặc gọi os.lstat()os.rmdir() để xóa đường dẫn và nội dung của nó. Giống như rmdir(), trên nền tảng Windows, điều này được bao bọc bằng một vòng chờ để kiểm tra sự tồn tại của các tệp.

Một công cụ trang trí để chạy thử nghiệm yêu cầu hỗ trợ các liên kết tượng trưng.

@test.support.os_helper.skip_unless_xattr

Công cụ trang trí để chạy thử nghiệm yêu cầu hỗ trợ xattr.

test.support.os_helper.temp_cwd(name='tempcwd', quiet=False)

Trình quản lý bối cảnh tạm thời tạo một thư mục mới và thay đổi thư mục làm việc hiện tại (CWD).

Trình quản lý bối cảnh tạo một thư mục tạm thời trong thư mục hiện tại với tên name trước khi tạm thời thay đổi thư mục làm việc hiện tại. Nếu nameNone, thư mục tạm thời được tạo bằng tempfile.mkdtemp().

Nếu quietFalse và không thể tạo hoặc thay đổi CWD thì sẽ xảy ra lỗi. Nếu không, chỉ có cảnh báo được đưa ra và CWD ban đầu được sử dụng.

test.support.os_helper.temp_dir(path=None, quiet=False)

Trình quản lý bối cảnh tạo thư mục tạm thời tại path và mang lại thư mục đó.

Nếu pathNone, thư mục tạm thời được tạo bằng tempfile.mkdtemp(). Nếu quietFalse, trình quản lý bối cảnh sẽ đưa ra một ngoại lệ do lỗi. Mặt khác, nếu path được chỉ định và không thể tạo được thì chỉ có cảnh báo được đưa ra.

test.support.os_helper.temp_umask(umask)

Trình quản lý bối cảnh tạm thời đặt ô quy trình.

Gọi os.unlink() trên filename. Giống như rmdir(), trên nền tảng Windows, điều này được bao bọc bằng một vòng chờ để kiểm tra sự tồn tại của tệp.

test.support.import_helper --- Tiện ích cho việc test import

Mô-đun test.support.import_helper cung cấp hỗ trợ cho các bài kiểm tra nhập.

Added in version 3.10.

test.support.import_helper.forget(module_name)

Xóa mô-đun có tên module_name khỏi sys.modules và xóa mọi tệp được biên dịch byte của mô-đun.

test.support.import_helper.import_fresh_module(name, fresh=(), blocked=(), deprecated=False)

Hàm này nhập và trả về một bản sao mới của mô-đun Python có tên bằng cách xóa mô-đun được đặt tên khỏi sys.modules trước khi thực hiện nhập. Lưu ý rằng không giống như reload(), mô-đun gốc không bị ảnh hưởng bởi thao tác này.

fresh là tên mô-đun bổ sung có thể lặp lại cũng bị xóa khỏi bộ đệm sys.modules trước khi thực hiện nhập.

blocked là một tên mô-đun lặp lại được thay thế bằng None trong bộ đệm mô-đun trong quá trình nhập để đảm bảo rằng những nỗ lực nhập chúng sẽ tăng ImportError.

Mô-đun được đặt tên và bất kỳ mô-đun nào có tên trong tham số freshblocked đều được lưu trước khi bắt đầu quá trình nhập và sau đó được chèn lại vào sys.modules khi quá trình nhập mới hoàn tất.

Thông báo ngừng sử dụng mô-đun và gói sẽ bị chặn trong quá trình nhập này nếu deprecatedTrue.

Hàm này sẽ tăng ImportError nếu không thể nhập mô-đun được đặt tên.

Ví dụ sử dụng:

# Get sao chép mô-đun cảnh báo để kiểm tra mà không ảnh hưởng đến
# version đang được phần còn lại của bộ thử nghiệm sử dụng. Một bản sao sử dụng
# C, cái còn lại buộc phải sử dụng dự phòng Python thuần túy
# implementation
py_warnings = import_fresh_module('warnings', bị chặn=['_warnings'])
c_warnings = import_fresh_module('warnings', Fresh=['_warnings'])

Added in version 3.1.

test.support.import_helper.import_module(name, deprecated=False, *, required_on=())

Hàm này nhập và trả về mô-đun được đặt tên. Không giống như thao tác nhập thông thường, chức năng này sẽ tăng unittest.SkipTest nếu không thể nhập mô-đun.

Thông báo ngừng sử dụng mô-đun và gói sẽ bị chặn trong quá trình nhập này nếu deprecatedTrue. Nếu một mô-đun được yêu cầu trên một nền tảng nhưng tùy chọn cho các nền tảng khác, hãy đặt required_on thành một tiền tố nền tảng có thể lặp lại sẽ được so sánh với sys.platform.

Added in version 3.1.

test.support.import_helper.modules_setup()

Trả lại một bản sao của sys.modules.

test.support.import_helper.modules_cleanup(oldmodules)

Xóa các mô-đun ngoại trừ oldmodulesencodings để bảo toàn bộ đệm trong.

test.support.import_helper.unload(name)

Xóa name khỏi sys.modules.

test.support.import_helper.make_legacy_pyc(source)

Di chuyển tệp pyc PEP 3147/PEP 488 đến vị trí pyc cũ của nó và trả lại đường dẫn hệ thống tệp về tệp pyc cũ. Giá trị source là đường dẫn hệ thống tệp tới tệp nguồn. Nó không cần phải tồn tại, tuy nhiên tệp pyc PEP 3147/488 phải tồn tại.

class test.support.import_helper.CleanImport(*module_names)

Trình quản lý bối cảnh buộc nhập để trả về tham chiếu mô-đun mới. Điều này rất hữu ích để kiểm tra các hành vi ở cấp mô-đun, chẳng hạn như phát ra DeprecationWarning khi nhập. Ví dụ sử dụng:

với CleanImport('foo'):
    tham chiếu importlib.import_module('foo') # New.
class test.support.import_helper.DirsOnSysPath(*paths)

Trình quản lý bối cảnh để tạm thời thêm thư mục vào sys.path.

Thao tác này tạo một bản sao của sys.path, nối thêm bất kỳ thư mục nào được cung cấp dưới dạng đối số vị trí, sau đó hoàn nguyên sys.path về cài đặt đã sao chép khi ngữ cảnh kết thúc.

Lưu ý rằng các sửa đổi all sys.path trong phần nội dung của trình quản lý bối cảnh, bao gồm cả việc thay thế đối tượng, sẽ được hoàn nguyên ở cuối khối.

test.support.warnings_helper --- Tiện ích kiểm tra cảnh báo

Mô-đun test.support.warnings_helper cung cấp hỗ trợ cho việc kiểm tra cảnh báo.

Added in version 3.10.

test.support.warnings_helper.ignore_warnings(*, category)

Loại bỏ các cảnh báo là phiên bản của category, phải là Warning hoặc một lớp con. Gần tương đương với warnings.catch_warnings() với warnings.simplefilter('ignore', category=category). Ví dụ:

@warning_helper.ignore_warnings(category=DeprecationWarning)
chắc chắn test_suppress_warning():
    # do gì đó

Added in version 3.8.

test.support.warnings_helper.check_no_resource_warning(testcase)

Trình quản lý bối cảnh để kiểm tra xem không có ResourceWarning nào được nêu ra hay không. Bạn phải xóa đối tượng có thể phát ra ResourceWarning trước khi kết thúc trình quản lý bối cảnh.

test.support.warnings_helper.check_syntax_warning(testcase, statement, errtext='', *, lineno=1, offset=None)

Kiểm tra cảnh báo cú pháp trong statement bằng cách thử biên dịch statement. Ngoài ra, hãy kiểm tra xem SyntaxWarning chỉ được phát ra một lần và nó sẽ được chuyển đổi thành SyntaxError khi bị lỗi. testcase là phiên bản unittest để thử nghiệm. errtext là biểu thức chính quy phải khớp với biểu diễn chuỗi của SyntaxWarning được phát ra và SyntaxError được nâng lên. Nếu lineno không phải là None thì so sánh với dòng cảnh báo và ngoại lệ. Nếu offset không phải là None, hãy so sánh với phần bù của ngoại lệ.

Added in version 3.8.

test.support.warnings_helper.check_warnings(*filters, quiet=True)

Một trình bao bọc tiện lợi dành cho warnings.catch_warnings() giúp kiểm tra xem cảnh báo đã được đưa ra chính xác hay chưa dễ dàng hơn. Nó gần tương đương với việc gọi warnings.catch_warnings(record=True) với warnings.simplefilter() được đặt thành always và có tùy chọn tự động xác thực các kết quả được ghi lại.

check_warnings chấp nhận 2 bộ dữ liệu có dạng ("message regexp", WarningCategory) làm đối số vị trí. Nếu một hoặc nhiều filters được cung cấp hoặc nếu đối số từ khóa tùy chọn quietFalse, thì nó sẽ kiểm tra để đảm bảo các cảnh báo như mong đợi: mỗi bộ lọc được chỉ định phải khớp với ít nhất một trong các cảnh báo do mã kèm theo đưa ra, nếu không quá trình kiểm tra sẽ thất bại và nếu có bất kỳ cảnh báo nào được đưa ra không khớp với bất kỳ bộ lọc nào được chỉ định thì quá trình kiểm tra sẽ thất bại. Để tắt bước kiểm tra đầu tiên trong số này, hãy đặt quiet thành True.

Nếu không có đối số nào được chỉ định, nó sẽ mặc định là:

check_warnings(("", Cảnh báo), Quiet=True)

Trong trường hợp này, tất cả các cảnh báo đều được ghi lại và không có lỗi nào được đưa ra.

Khi truy cập trình quản lý bối cảnh, một phiên bản WarningRecorder sẽ được trả về. Danh sách cảnh báo cơ bản từ catch_warnings() có sẵn thông qua thuộc tính warnings của đối tượng ghi. Để thuận tiện, các thuộc tính của đối tượng đại diện cho cảnh báo gần đây nhất cũng có thể được truy cập trực tiếp thông qua đối tượng ghi (xem ví dụ bên dưới). Nếu không có cảnh báo nào được đưa ra thì bất kỳ thuộc tính nào lẽ ra phải có trên một đối tượng đại diện cho cảnh báo sẽ trả về None.

Đối tượng ghi âm cũng có phương thức reset() để xóa danh sách cảnh báo.

Trình quản lý bối cảnh được thiết kế để sử dụng như thế này

với check_warnings(("xác nhận luôn đúng", SyntaxWarning),
                    ("", Cảnh báo người dùng)):
    exec('assert(Sai, "Này!")')
    Warning.warn(UserWarning("Giấu tôi đi!"))

Trong trường hợp này nếu một trong hai cảnh báo không được đưa ra hoặc một số cảnh báo khác được đưa ra, check_warnings() sẽ báo lỗi.

Khi kiểm thử cần xem xét kỹ hơn các cảnh báo, thay vì chỉ kiểm tra xem chúng có xảy ra hay không, bạn có thể sử dụng mã như thế này:

với check_warnings(quiet=True)  w:
    cảnh báo.warn("foo")
    khẳng định str(w.args[0]) == "foo"
    cảnh báo.warn ("thanh")
    khẳng định str(w.args[0]) == "bar"
    khẳng định str(w.warnings[0].args[0]) == "foo"
    khẳng định str(w.warnings[1].args[0]) == "bar"
    w.reset()
    khẳng định len(w.warnings) == 0

Ở đây tất cả các cảnh báo sẽ được ghi lại và mã kiểm tra sẽ kiểm tra trực tiếp các cảnh báo đã ghi lại.

Thay đổi trong phiên bản 3.2: Đối số tùy chọn mới filtersquiet.

class test.support.warnings_helper.WarningsRecorder

Lớp dùng để ghi lại cảnh báo cho các bài kiểm tra đơn vị. Xem tài liệu của check_warnings() ở trên để biết thêm chi tiết.