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.support và test.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
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ự):
... mã để thực thi để chuẩn bị cho các bài kiểm tra ...
def TearsDown(tự):
... mã 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.
... mã kiểm tra ...
def test_feature_two(self):
# Test có hai tính năng.
... mã 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ớpTestFuncAcceptsSequencesMixintrong 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 audio và largefile. Để 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ủaunittest.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ăngrequires().
Mô-đun test.support xác định các hằng số sau:
- test.support.verbose¶
Truekhi đầ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ởitest.regrtest.
- test.support.is_jython¶
Truenếu trình thông dịch đang chạy là Jython.
- test.support.is_android¶
Truenếusys.platformlàandroid.
- test.support.is_emscripten¶
Truenếusys.platformlàemscripten.
- test.support.is_wasi¶
Truenếusys.platformlàwasi.
- test.support.is_apple_mobile¶
Truenếusys.platformlàios,tvoshoặcwatchos.
- test.support.is_apple¶
Truenếusys.platformlàdarwinhoặcis_apple_mobilelàTrue.
- 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()vàsend()củasocket.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_TIMEOUTkhô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: xemtransient_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
--timeoutregrtest.Nếu thử nghiệm sử dụng
SHORT_TIMEOUTbắ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ụngLONG_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
--timeoutregrtest.Giá trị mặc định của nó là 5 phút.
Xem thêm
LOOPBACK_TIMEOUT,INTERNET_TIMEOUTvàSHORT_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¶
Truenếu Python được xây dựng với macroPy_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
datatrong 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ởiMAX_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ởiMAX_Py_ssize_t.
- test.support.MISSING_C_DOCSTRINGS¶
Đặt thành
Truenếu Python được xây dựng mà không có chuỗi tài liệu (macroWITH_DOC_STRINGSkhông được xác định). Xem tùy chọnconfigure --without-doc-strings.Xem thêm biến
HAVE_DOCSTRINGS.
- test.support.HAVE_DOCSTRINGS¶
Đặt thành
Truenếu có sẵn chuỗi tài liệu hàm. Xem tùy chọnpython -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
breakdừng vòng lặp.Sau timeout giây, tăng
AssertionErrornế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
breakdừ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ề
Truenếu resource được bật và khả dụng. Danh sách các tài nguyên khả dụng chỉ được đặt khitest.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ềNonenếu resource bị tắt hoặc không có giá trị nào được chỉ định.
- test.support.python_is_optimized()¶
Trả về
Truenếu Python không được xây dựng bằng-O0hoặc-Og.
- test.support.with_pymalloc()¶
Trả về
_testcapi.WITH_PYMALLOC.
- test.support.requires(resource, msg=None)¶
Tăng
ResourceDeniednếu resource không có sẵn. msg là đối số củaResourceDeniednếu nó được nâng lên. Luôn trả vềTruenếu được gọi bởi một hàm có__name__là'__main__'. Được sử dụng khi các bài kiểm tra được thực hiện bởitest.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ề
TruehoặcFalsetù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_memusevàreal_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ặcsys.stdoutnế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.flagsvàsys.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() là thiết bị xuất chuẩn, capture_stderr() là 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() là stdin: stdin.write('xin chào\n') stdin.seek(0) Mã 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.attrthành 5 trong suốt thời gian của khốiwith, khôi phục giá trị cũ ở cuối khối. Nếuattrkhông tồn tại trênobj, nó sẽ được tạo và xóa ở cuối khối.Giá trị cũ (hoặc
Nonenế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ốiwith, khôi phục giá trị cũ ở cuối khối. Nếuitemkhông tồn tại trênobj, nó sẽ được tạo và xóa ở cuối khối.Giá trị cũ (hoặc
Nonenế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ênsys.stdoutvà sau đó trênsys.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
AssertionErrornế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_TIMEOUTtheo mặc định), hãy hủy quá trình đó và tăngAssertionError. 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
PyObjectcó 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
PyVarObjectcó 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.getsizeofcho 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_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ềFalsethì 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_run là
Truethì 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_run làFalse, điều đó có nghĩa là thử nghiệm không hỗ trợ chạy giả khi-Mkhô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ề
Falsenế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ằngmusl, 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.emscriptenvàwasiđược cho là được biên dịch bằngmusl; nếu không thìplatform.libc_versẽ đượ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
unittestcho 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ủaSyntaxErrorđượ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_mainbấ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.SkipTestnếuAttributeErrorđượ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() là 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
unittestload_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_tests và pattern là những đối số đượcload_testsmong đợi. Trong các trường hợp đơn giản,__init__.pycủ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.SkipTestnếutracemallocđượ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
Nonekhi 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ư
csvvà_csvcủ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ăngOSError.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 args và kwds.
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ủaresource.RLIMIT_COREthà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.
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
Truenế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ố-acceptcho chế độ s_server của openssl). Luôn ưu tiênbind_port()hơnfind_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.familylàAF_INETvàsock.typelàSOCK_STREAMvà ổ cắm cóSO_REUSEADDRhoặcSO_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_EXCLUSIVEADDRUSEcó 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.SkipTestnếuPermissionErrorđượ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
ResourceDeniedkhi 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ề
Truenếusys.executable interpreteryê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ăngassert_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
PYTHONHOMElà một cách để khiến hầu hết bộ thử nghiệm chạy trong tình huống đó.PYTHONPATHhoặcPYTHONUSERSITElà 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,__cwdvàTERM.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ànhFalse.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ượngsubprocess.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_dir và script_basename. Nếu omit_suffix là
False, hãy thêm.pyvà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_dir và zip_basename với phần mở rộng
zipchứ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_dir và zip_basename chứa tệp
__init__trống và tệp script_basename chứa source. Nếu compiled làTrue, 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
AssertionErrornế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
AssertionErrornế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_threadssẽ 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
withthoát ra.
- test.support.threading_helper.catch_threading_exception()¶
Trình quản lý bối cảnh bắt ngoại lệ
threading.Threadbằngthreading.excepthook().Các thuộc tính được đặt khi bắt gặp ngoại lệ:
exc_typeexc_valueexc_tracebackthread
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() là 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à
Nonenế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à
Nonenế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.environcơ 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
envvarthà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.
- test.support.os_helper.can_symlink()¶
Trả về
Truenế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ề
Truenếu hệ điều hành hỗ trợ xattr,Falsenế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 quiet là
False, 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ề
Truenế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ọios.lstat()và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.
- @test.support.os_helper.skip_unless_symlink¶
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 name là
None, thư mục tạm thời được tạo bằngtempfile.mkdtemp().Nếu quiet là
Falsevà 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 path là
None, thư mục tạm thời được tạo bằngtempfile.mkdtemp(). Nếu quiet làFalse, 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.
- test.support.os_helper.unlink(filename)¶
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.modulesvà 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.modulestrướ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.modulestrướ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
Nonetrong 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ăngImportError.Mô-đun được đặt tên và bất kỳ mô-đun nào có tên trong tham số fresh và blocked đề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.moduleskhi 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 deprecated là
True.Hàm này sẽ tăng
ImportErrornế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.SkipTestnế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 deprecated là
True. 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ớisys.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ừ oldmodules và
encodingsđể 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
DeprecationWarningkhi 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ênsys.pathvề 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.pathtrong 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à
Warninghoặc một lớp con. Gần tương đương vớiwarnings.catch_warnings()vớiwarnings.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ó
ResourceWarningnào được nêu ra hay không. Bạn phải xóa đối tượng có thể phát raResourceWarningtrướ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
SyntaxWarningchỉ được phát ra một lần và nó sẽ được chuyển đổi thànhSyntaxErrorkhi bị lỗi. testcase là phiên bảnunittestđể 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ủaSyntaxWarningđược phát ra vàSyntaxErrorđược nâng lên. Nếu lineno không phải làNonethì 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ọiwarnings.catch_warnings(record=True)vớiwarnings.simplefilter()được đặt thànhalwaysvà có tùy chọn tự động xác thực các kết quả được ghi lại.check_warningschấ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 quiet làFalse, 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ànhTrue.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
WarningRecordersẽ đượ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ínhwarningscủ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) là 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 filters và quiet.
- 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.