新聞中心
test —- python 回歸測試包
備注

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、太和網(wǎng)絡(luò)推廣、成都小程序開發(fā)、太和網(wǎng)絡(luò)營銷、太和企業(yè)策劃、太和品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供太和建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
test 包只供 Python 內(nèi)部使用。它的記錄是為了讓 Python 的核心開發(fā)者受益。我們不鼓勵(lì)在 Python 標(biāo)準(zhǔn)庫之外使用這個(gè)包,因?yàn)檫@里提到的代碼在 Python 的不同版本之間可能會(huì)改變或被刪除而不另行通知。
test 包包含了 Python 的所有回歸測試,以及 test.support 和 test.regrtest 模塊。 test.support 用于增強(qiáng)你的測試,而 test.regrtest 驅(qū)動(dòng)測試套件。
test`包中每個(gè)名字以 ``test_` 開頭的模塊都是一個(gè)特定模塊或功能的測試套件。所有新的測試應(yīng)該使用 unittest 或 doctest 模塊編寫。一些舊的測試是使用“傳統(tǒng)”的測試風(fēng)格編寫的,即比較打印出來的輸出到``sys.stdout``;這種測試風(fēng)格被認(rèn)為是過時(shí)的。
參見
模塊 unittest
編寫 PyUnit 回歸測試.
doctest —- 文檔測試模塊
嵌入到文檔字符串的測試。
為 test 包編寫單元測試
使用 unittest 模塊的測試最好是遵循一些準(zhǔn)則。 其中一條是測試模塊的名稱要以 test_ 打頭并以被測試模塊的名稱結(jié)尾。 測試模塊中的測試方法應(yīng)當(dāng)以 test_ 打頭并以該方法所測試的內(nèi)容的說明結(jié)尾。 這很有必要因?yàn)檫@樣測試驅(qū)動(dòng)程序就會(huì)將這些方法識(shí)別為測試方法。 此外,該方法不應(yīng)當(dāng)包括任何文檔字符串。 應(yīng)當(dāng)使用注釋 (例如 # Tests function returns only True or False) 來為測試方法提供文檔說明。 這樣做是因?yàn)槲臋n字符串如果存在則會(huì)被打印出來因此無法指明正在運(yùn)行哪個(gè)測試。
有一個(gè)基本模板經(jīng)常會(huì)被使用:
import unittestfrom test import supportclass MyTestCase1(unittest.TestCase):# Only use setUp() and tearDown() if necessarydef setUp(self):... code to execute in preparation for tests ...def tearDown(self):... code to execute to clean up after tests ...def test_feature_one(self):# Test feature one.... testing code ...def test_feature_two(self):# Test feature two.... testing code ...... more test methods ...class MyTestCase2(unittest.TestCase):... same structure as MyTestCase1 ...... more test classes ...if __name__ == '__main__':unittest.main()
這種代碼模式允許測試套件由 test.regrtest 運(yùn)行,作為支持 unittest CLI 的腳本單獨(dú)運(yùn)行,或者通過 python -m unittest CLI 來運(yùn)行。
回歸測試的目標(biāo)是嘗試破壞代碼。 這引出了一些需要遵循的準(zhǔn)則:
-
測試套件應(yīng)當(dāng)測試所有的類、函數(shù)和常量。 這不僅包括要向外界展示的外部 API 也包括“私有”的代碼。
-
白盒測試(在編寫測試時(shí)檢查被測試的代碼)是最推薦的。 黑盒測試(只測試已發(fā)布的用戶接口)因不夠完整而不能確保所有邊界和邊緣情況都被測試到。
-
確保所有可能的值包括無效的值都被測試到。 這能確保不僅全部的有效值都可被接受而且不適當(dāng)?shù)闹狄材鼙徽_地處理。
-
消耗盡可能多的代碼路徑。 測試發(fā)生分支的地方從而調(diào)整輸入以確保通過代碼采取盡可能多的不同路徑。
-
為受測試的代碼所發(fā)現(xiàn)的任何代碼缺陷添加明確的測試。 這將確保如果代碼在將來被改變錯(cuò)誤也不會(huì)再次出現(xiàn)。
-
確保在你的測試完成后執(zhí)行清理(例如關(guān)閉并刪除所有臨時(shí)文件)。
-
如果某個(gè)測試依賴于操作系統(tǒng)上的特定條件那么要在嘗試測試之前先驗(yàn)證該條件是否已存在。
-
盡可能少地導(dǎo)入模塊并盡可能快地完成操作。 這可以最大限度地減少測試的外部依賴性并且還可以最大限度地減少導(dǎo)入模塊帶來的附帶影響所導(dǎo)致的異常行為。
-
嘗試最大限度地重用代碼。 在某些情況下,測試結(jié)果會(huì)因使用不同類型的輸入這樣的小細(xì)節(jié)而變化。 可通過一個(gè)指定輸入的類來子類化一個(gè)基本測試類來最大限度地減少重復(fù)代碼:
class TestFuncAcceptsSequencesMixin:func = mySuperWhammyFunctiondef test_func(self):self.func(self.arg)class AcceptLists(TestFuncAcceptsSequencesMixin, unittest.TestCase):arg = [1, 2, 3]class AcceptStrings(TestFuncAcceptsSequencesMixin, unittest.TestCase):arg = 'abc'class AcceptTuples(TestFuncAcceptsSequencesMixin, unittest.TestCase):arg = (1, 2, 3)
當(dāng)使用這種模式時(shí),請記住所有繼承自 unittest.TestCase 的類都會(huì)作為測試來運(yùn)行。 上面例子中的
Mixin類沒有任何數(shù)據(jù)所以其本身是無法運(yùn)行的,因此它不是繼承自 unittest.TestCase。
參見
測試驅(qū)動(dòng)的開發(fā)
Kent Beck 所著的闡述在實(shí)現(xiàn)代碼之前編寫驅(qū)動(dòng)的書。
使用命令行界面運(yùn)行測試
通過使用 -m 選項(xiàng) test 包可以作為腳本運(yùn)行以驅(qū)動(dòng) Python 的回歸測試套件: python -m test。 在內(nèi)部,它使用 test.regrtest;之前 Python 版本所使用的 python -m test.regrtest 調(diào)用仍然有效。 運(yùn)行該腳本自身會(huì)自動(dòng)開始運(yùn)行 test 包中的所有回歸測試。 它通過在包中查找所有名稱以 test_ 打頭的模塊,導(dǎo)入它們,并在有 test_main() 函數(shù)時(shí)執(zhí)行它或是在沒有 test_main 時(shí)通過 unittest.TestLoader.loadTestsFromModule 載入測試。 要執(zhí)行的測試的名稱也可以被傳遞給腳本。 指定一個(gè)單獨(dú)的回歸測試 (python -m test test_spam) 將使輸出最小化并且只打印測試通過或失敗的消息。
直接運(yùn)行 test 將允許設(shè)置哪些資源可供測試使用。 你可以通過使用 -u 命令行選項(xiàng)來做到這一點(diǎn)。 指定 all 作為 -u 選項(xiàng)的值將啟用所有可能的資源: python -m test -uall。 如果只需要一項(xiàng)資源(這是更為常見的情況),可以在 all 之后加一個(gè)以逗號(hào)分隔的列表來指明不需要的資源。 命令 python -m test -uall,-audio,-largefile 將運(yùn)行 test 并使用除 audio 和 largefile 資源之外的所有資源。 要查看所有資源的列表和更多的命令行選項(xiàng),請運(yùn)行 python -m test -h。
另外一些執(zhí)行回歸測試的方式依賴于執(zhí)行測試所在的系統(tǒng)平臺(tái)。 在 Unix 上,你可以在構(gòu)建 Python 的最高層級(jí)目錄中運(yùn)行 make test。 在 Windows 上,在你的 PCbuild 目錄中執(zhí)行 rt.bat 將運(yùn)行所有的回歸測試。
test.support —- 針對(duì) Python 測試套件的工具
test.support 模塊提供了對(duì) Python 的回歸測試套件的支持。
備注
test.support 不是一個(gè)公用模塊。 這篇文檔是為了幫助 Python 開發(fā)者編寫測試。 此模塊的 API 可能被改變而不顧及發(fā)行版本之間的向下兼容性問題。
此模塊定義了以下異常:
exception test.support.TestFailed
當(dāng)一個(gè)測試失敗時(shí)將被引發(fā)的異常。 此異常已被棄用而應(yīng)改用基于 unittest 的測試以及 unittest.TestCase 的斷言方法。
exception test.support.ResourceDenied
unittest.SkipTest 的子類。 當(dāng)一個(gè)資源(例如網(wǎng)絡(luò)連接)不可用時(shí)將被引發(fā)。 由 requires() 函數(shù)所引發(fā)。
test.support 模塊定義了以下常量:
test.support.verbose
當(dāng)啟用詳細(xì)輸出時(shí)為 True。 當(dāng)需要有關(guān)運(yùn)行中的測試的更詳細(xì)信息時(shí)應(yīng)當(dāng)被選擇。 verbose 是由 test.regrtest 來設(shè)置的。
test.support.is_jython
如果所運(yùn)行的解釋器是 Jython 時(shí)為 True。
test.support.is_android
如果系統(tǒng)是 Android 時(shí)為 True。
test.support.unix_shell
如果系統(tǒng)不是 Windows 時(shí)則為 shell 的路徑;否則為 None。
test.support.LOOPBACK_TIMEOUT
使用網(wǎng)絡(luò)服務(wù)器監(jiān)聽網(wǎng)絡(luò)本地環(huán)回接口如 127.0.0.1 的測試的以秒為單位的超時(shí)值。
該超時(shí)長到足以防止測試失?。核紤]客戶端和服務(wù)器可能會(huì)在不同線程甚至不同進(jìn)程中運(yùn)行。
該超時(shí)應(yīng)當(dāng)對(duì)于 socket.socket 的 connect(), recv() 和 send() 方法都足夠長。
其默認(rèn)值為5秒。
參見 INTERNET_TIMEOUT。
test.support.INTERNET_TIMEOUT
發(fā)往互聯(lián)網(wǎng)的網(wǎng)絡(luò)請求的以秒為單位的超時(shí)值。
該超時(shí)短到足以避免測試在互聯(lián)網(wǎng)請求因任何原因被阻止時(shí)等待太久。
通常使用 INTERNET_TIMEOUT 的超時(shí)不應(yīng)該將測試標(biāo)記為失敗,而是跳過測試:參見 transient_internet()。
其默認(rèn)值是1分鐘。
參見 LOOPBACK_TIMEOUT。
test.support.SHORT_TIMEOUT
如果測試耗時(shí)“太長”而要將測試標(biāo)記為失敗的以秒為單位的超時(shí)值。
該超時(shí)值取決于 regrtest --timeout 命令行選項(xiàng)。
如果一個(gè)使用 SHORT_TIMEOUT 的測試在慢速 buildbots 上開始隨機(jī)失敗,請使用 LONG_TIMEOUT 來代替。
其默認(rèn)值為30秒。
test.support.LONG_TIMEOUT
用于檢測測試何時(shí)掛起的以秒為單位的超時(shí)值。
它的長度足夠在最慢的 Python buildbot 上降低測試失敗的風(fēng)險(xiǎn)。 如果測試耗時(shí)“過長”也不應(yīng)當(dāng)用它將該測試標(biāo)記為失敗。 此超時(shí)值依賴于 regrtest --timeout 命令行選項(xiàng)。
其默認(rèn)值為5分鐘。
另請參見 LOOPBACK_TIMEOUT, INTERNET_TIMEOUT 和 SHORT_TIMEOUT。
test.support.PGO
當(dāng)測試對(duì) PGO 沒有用處時(shí)設(shè)置是否要跳過測試。
test.support.PIPE_MAX_SIZE
一個(gè)通常大于下層 OS 管道緩沖區(qū)大小的常量,以產(chǎn)生寫入阻塞。
test.support.SOCK_MAX_SIZE
一個(gè)通常大于下層 OS 套接字緩沖區(qū)大小的常量,以產(chǎn)生寫入阻塞。
test.support.TEST_SUPPORT_DIR
設(shè)為包含 test.support 的最高層級(jí)目錄。
test.support.TEST_HOME_DIR
設(shè)為 test 包的最高層級(jí)目錄。
test.support.TEST_DATA_DIR
設(shè)為 test 包中的 data 目錄。
test.support.MAX_Py_ssize_t
設(shè)為大內(nèi)存測試的 sys.maxsize。
test.support.max_memuse
通過 set_memlimit() 設(shè)為針對(duì)大內(nèi)存測試的內(nèi)存限制。 受 MAX_Py_ssize_t 的限制。
test.support.real_max_memuse
通過 set_memlimit() 設(shè)為針對(duì)大內(nèi)存測試的內(nèi)存限制。 不受 MAX_Py_ssize_t 的限制。
test.support.MISSING_C_DOCSTRINGS
如果 Python 編譯時(shí)不帶文檔字符串(即未定義 WITH_DOC_STRINGS 宏)則設(shè)為 True。 參見 configure —without-doc-strings 選項(xiàng)。
另請參閱 HAVE_DOCSTRINGS 變量。
test.support.HAVE_DOCSTRINGS
如果函數(shù)帶有文檔字符串則設(shè)為 True。 參見 python -OO 選項(xiàng),該選項(xiàng)會(huì)去除在 Python 中實(shí)現(xiàn)的函數(shù)的文檔字符串。
另請參閱 MISSING_C_DOCSTRINGS 變量。
test.support.TEST_HTTP_URL
定義用于網(wǎng)絡(luò)測試的韌性 HTTP 服務(wù)器的 URL。
test.support.ALWAYS_EQ
等于任何對(duì)象的對(duì)象。 用于測試混合類型比較。
test.support.NEVER_EQ
不等于任何對(duì)象的對(duì)象 (即使是 ALWAYS_EQ)。 用于測試混合類型比較。
test.support.LARGEST
大于任何對(duì)象的對(duì)象(除了其自身)。 用于測試混合類型比較。
test.support.SMALLEST
小于任何對(duì)象的對(duì)象(除了其自身)。 用于測試混合類型比較。Used to test mixed type comparison.
test.support 模塊定義了以下函數(shù):
test.support.is_resource_enabled(resource)
如果 resource 已啟用并可用則返回 True。 可用資源列表只有當(dāng) test.regrtest 正在執(zhí)行測試時(shí)才會(huì)被設(shè)置。
test.support.python_is_optimized()
如果 Python 編譯未使用 -O0 或 -Og 則返回 True。
test.support.with_pymalloc()
返回 _testcapi.WITH_PYMALLOC。
test.support.requires(resource, msg=None)
如果 resource 不可用則引發(fā) ResourceDenied。 如果該異常被引發(fā)則 msg 為傳給 ResourceDenied 的參數(shù)。 如果被 __name__ 為 '__main__' 的函數(shù)調(diào)用則總是返回 True。 在測試由 test.regrtest 執(zhí)行時(shí)使用。
test.support.sortdict(dict)
返回 dict 按鍵排序的 repr。
test.support.findfile(filename, subdir=None)
返回名為 filename 的文件的路徑。 如果未找到匹配結(jié)果則返回 filename。 這并不等于失敗因?yàn)樗菜闶窃撐募穆窂健?/p>
設(shè)置 subdir 指明要用來查找文件的相對(duì)路徑而不是直接在路徑目錄中查找。
test.support.match_test(test)
確定 test 是否匹配在 set_match_tests() 中設(shè)置的模式。
test.support.set_match_tests(accept_patterns=None, ignore_patterns=None)
定義測試文件名和測試方法名的匹配模式用于篩選測試。
test.support.run_unittest(\classes*)
執(zhí)行傳給函數(shù)的 unittest.TestCase 子類。 此函數(shù)會(huì)掃描類中帶有 test_ 前綴的方法并單獨(dú)執(zhí)行這些測試。
將字符串作為形參傳遞也是合法的;這些形參應(yīng)為 sys.modules 中的鍵。 每個(gè)被關(guān)聯(lián)的模塊將由 unittest.TestLoader.loadTestsFromModule() 執(zhí)行掃描。 這通常出現(xiàn)在以下 test_main() 函數(shù)中:
def test_main():support.run_unittest(__name__)
這將運(yùn)行在指定模塊中定義的所有測試。
test.support.run_doctest(module, verbosity=None, optionflags=0)
在給定的 module 上運(yùn)行 doctest.testmod()。 返回 (failure_count, test_count)。
如果 verbosity 為 None,doctest.testmod() 運(yùn)行時(shí)的消息詳細(xì)程度將設(shè)為 verbose。 否則,運(yùn)行時(shí)的消息詳細(xì)程度將設(shè)為 None。 optionflags 將作為 optionflags 傳給 doctest.testmod()。
test.support.setswitchinterval(interval)
將 sys.setswitchinterval() 設(shè)為給定的 interval。 請為 Android 系統(tǒng)定義一個(gè)最小間隔以防止系統(tǒng)掛起。
test.support.check_impl_detail(\*guards*)
使用此檢測來保護(hù) CPython 實(shí)現(xiàn)專屬的測試或者僅在有這些參數(shù)保護(hù)的實(shí)現(xiàn)上運(yùn)行它們。 此函數(shù)將根據(jù)主機(jī)系統(tǒng)平臺(tái)的不同返回 True 或 False。 用法示例:
check_impl_detail() # Only on CPython (default).check_impl_detail(jython=True) # Only on Jython.check_impl_detail(cpython=False) # Everywhere except CPython.
test.support.set_memlimit(limit)
針對(duì)大內(nèi)存測試設(shè)置 max_memuse 和 real_max_memuse 的值。
test.support.record_original_stdout(stdout)
存放來自 stdout 的值。 它會(huì)在回歸測試開始時(shí)處理 stdout。
test.support.get_original_stdout()
返回 record_original_stdout() 所設(shè)置的原始 stdout 或者如果未設(shè)置則為 sys.stdout。
test.support.args_from_interpreter_flags()
返回在 sys.flags 和 sys.warnoptions 中重新產(chǎn)生當(dāng)前設(shè)置的命令行參數(shù)列表。
test.support.optim_args_from_interpreter_flags()
返回在 sys.flags 中重新產(chǎn)生當(dāng)前優(yōu)化設(shè)置的命令行參數(shù)列表。
test.support.captured_stdin()
test.support.captured_stdout()
test.support.captured_stderr()
使用 io.StringIO 對(duì)象臨時(shí)替換指定流的上下文管理器。
使用輸出流的示例:
with captured_stdout() as stdout, captured_stderr() as stderr:print("hello")print("error", file=sys.stderr)assert stdout.getvalue() == "hello\n"assert stderr.getvalue() == "error\n"
使用輸入流的示例:
with captured_stdin() as stdin:stdin.write('hello\n')stdin.seek(0)# call test code that consumes from sys.stdincaptured = input()self.assertEqual(captured, "hello")
test.support.disable_faulthandler()
臨時(shí)禁用 faulthandler 的上下文管理器。
test.support.gc_collect()
強(qiáng)制收集盡可能多的對(duì)象。 這是有必要的因?yàn)槔厥掌鞑⒉荒鼙WC及時(shí)回收資源。 這意味著 __del__ 方法的調(diào)用可能會(huì)晚于預(yù)期而弱引用的存活長于預(yù)期。
test.support.disable_gc()
在進(jìn)入時(shí)禁用垃圾回收器的上下文管理器。 在退出時(shí),垃圾回收器將恢復(fù)到先前狀態(tài)。
test.support.swap_attr(obj, attr, new_val)
上下文管理器用一個(gè)新對(duì)象來交換一個(gè)屬性。
用法:
with swap_attr(obj, "attr", 5):...
這將把 obj.attr 設(shè)為 5 并在 with 語句塊內(nèi)保持,在語句塊結(jié)束時(shí)恢復(fù)舊值。 如果 attr 不存在于 obj 中,它將被創(chuàng)建并在語句塊結(jié)束時(shí)被刪除。
舊值 (或者如果不存在舊值則為 None) 將被賦給 “as” 子句的目標(biāo),如果存在子句的話。
test.support.swap_item(obj, attr, new_val)
上下文件管理器用一個(gè)新對(duì)象來交換一個(gè)條目。
用法:
with swap_item(obj, "item", 5):...
這將把 obj["item"] 設(shè)為 5 并在 with 語句塊內(nèi)保持,在語句塊結(jié)束時(shí)恢復(fù)舊值。 如果 item 不存在于 obj 中,它將被創(chuàng)建并在語句塊結(jié)束時(shí)被刪除。
舊值 (或者如果不存在舊值則為 None) 將被賦給 “as” 子句的目標(biāo),如果存在子句的話。
test.support.flush_std_streams()
Call the flush() method on sys.stdout and then on sys.stderr. It can be used to make sure that the logs order is consistent before writing into stderr.
3.11 新版功能.
test.support.print_warning(msg)
打印一個(gè)警告到 sys.__stderr__。 將消息格式化為: f"Warning -- {msg}"。 如果 msg 包含多行,則為每行添加 "Warning -- " 前綴。
3.9 新版功能.
test.support.wait_process(pid, **, exitcode, timeout=None*)
等待直到進(jìn)程 pid 結(jié)束并檢查進(jìn)程退出代碼是否為 exitcode。
如果進(jìn)程退出代碼不等于 exitcode 則引發(fā) AssertionError。
如果進(jìn)程運(yùn)行時(shí)長超過 timeout 秒 (默認(rèn)為 SHORT_TIMEOUT),則殺死進(jìn)程并引發(fā) AssertionError。 超時(shí)特性在 Windows 上不可用。
3.9 新版功能.
test.support.calcobjsize(fmt)
返回 PyObject 的大小,其結(jié)構(gòu)成員由 fmt 定義。 返回的值包括 Python 對(duì)象頭的大小和對(duì)齊方式。
test.support.calcvobjsize(fmt)
返回 PyVarObject 的大小,其結(jié)構(gòu)成員由 fmt 定義。 返回的值包括 Python 對(duì)象頭的大小和對(duì)齊方式。
test.support.checksizeof(test, o, size)
對(duì)于測試用例 test,斷言 o 的 sys.getsizeof 加 GC 頭的大小等于 size。
@test.support.anticipate_failure(condition)
一個(gè)有條件地用 unittest.expectedFailure() 來標(biāo)記測試的裝飾器。 任何對(duì)此裝飾器的使用都應(yīng)當(dāng)具有標(biāo)識(shí)相應(yīng)追蹤事項(xiàng)的有關(guān)聯(lián)注釋。
test.support.system_must_validate_cert(f)
一個(gè)在 TLS 證書驗(yàn)證失敗時(shí)跳過被裝飾測試的裝飾器。
@test.support.run_with_locale(catstr, \locales*)
一個(gè)在不同語言區(qū)域下運(yùn)行函數(shù)的裝飾器,并在其結(jié)束后正確地重置語言區(qū)域。 catstr 是字符串形式的語言區(qū)域類別 (例如 "LC_ALL")。 傳入的 locales 將依次被嘗試,并將使用第一個(gè)有效的語言區(qū)域。
@test.support.run_with_tz(tz)
一個(gè)在指定時(shí)區(qū)下運(yùn)行函數(shù)的裝飾器,并在其結(jié)束后正確地重置時(shí)區(qū)。
@test.support.requires_freebsd_version(\min_version*)
當(dāng)在 FreeBSD 上運(yùn)行測試時(shí)指定最低版本的裝飾器。 如果 FreeBSD 版本號(hào)低于指定值,測試將被跳過。
@test.support.requires_linux_version(\min_version*)
當(dāng)在 Linux 上運(yùn)行測試時(shí)指定最低版本的裝飾器。 如果 Linux 版本號(hào)低于指定值,測試將被跳過。
@test.support.requires_mac_version(\min_version*)
當(dāng)在 macOS 上運(yùn)行測試時(shí)指定最低版本的裝飾器。 如果 macOS 版本號(hào)低于指定值,測試將被跳過。
@test.support.requires_IEEE_754
用于在非 non-IEEE 754 平臺(tái)上跳過測試的裝飾器。
@test.support.requires_zlib
用于當(dāng) zlib 不存在時(shí)跳過測試的裝飾器。
@test.support.requires_gzip
用于當(dāng) gzip 不存在時(shí)跳過測試的裝飾器。
@test.support.requires_bz2
用于當(dāng) bz2 不存在時(shí)跳過測試的裝飾器。
@test.support.requires_lzma
用于當(dāng) lzma 不存在時(shí)跳過測試的裝飾器。
@test.support.requires_resource(resource)
用于當(dāng) resource 不可用時(shí)跳過測試的裝飾器。
@test.support.requires_docstrings
用于僅當(dāng) HAVE_DOCSTRINGS 時(shí)才運(yùn)行測試的裝飾器。
@test.support.cpython_only
表示僅適用于 CPython 的測試的裝飾器。
@test.support.impl_detail(msg=None, \*guards*)
用于在 guards 上發(fā)起調(diào)用 check_impl_detail() 的裝飾器。 如果調(diào)用返回 False,則使用 msg 作為跳過測試的原因。
@test.support.no_tracing
用于在測試期間臨時(shí)關(guān)閉追蹤的裝飾器。
@test.support.refcount_test
用于涉及引用計(jì)數(shù)的測試的裝飾器。 如果測試不是由 CPython 運(yùn)行則該裝飾器不會(huì)運(yùn)行測試。 在測試期間會(huì)取消設(shè)置任何追蹤函數(shù)以由追蹤函數(shù)導(dǎo)致的意外引用計(jì)數(shù)。
@test.support.bigmemtest(size, memuse, dry_run=True)
用于大內(nèi)存測試的裝飾器。
size 是測試所請求的大小(以任意的,由測試解讀的單位。) memuse 是測試的每單元字節(jié)數(shù),或是對(duì)它的良好估計(jì)。 例如,一個(gè)需要兩個(gè)字節(jié)緩沖區(qū),每個(gè)緩沖區(qū) 4 GiB,則可以用 @bigmemtest(size=_4G, memuse=2) 來裝飾。
size 參數(shù)通常作為額外參數(shù)傳遞給被測試的方法。 如果 dry_run 為 True,則傳給測試方法的值可能少于所請求的值。 如果 dry_run 為 False,則意味著當(dāng)當(dāng)未指定 -M 時(shí)測試將不支持虛擬運(yùn)行。
@test.support.bigaddrspacetest
用于填充地址空間的測試的裝飾器。
test.support.check_syntax_error(testcase, statement, errtext=’’, **, lineno=None, offset=None*)
用于通過嘗試編譯 statement 來測試 statement 中的語法錯(cuò)誤。 testcase 是測試的 unittest 實(shí)例。 errtext 是應(yīng)當(dāng)匹配所引發(fā)的 SyntaxError 的字符串表示形式的正則表達(dá)式。 如果 lineno 不為 None,則與異常所在的行進(jìn)行比較。 如果 offset 不為 None,則與異常的偏移量進(jìn)行比較。
test.support.open_urlresource(url, \args, **kw*)
打開 url。 如果打開失敗,則引發(fā) TestFailed。
test.support.reap_children()
只要有子進(jìn)程啟動(dòng)就在 test_main 的末尾使用此函數(shù)。 這將有助于確保沒有多余的子進(jìn)程(僵尸)存在占用資源并在查找引用泄漏時(shí)造成問題。
test.support.get_attribute(obj, name)
獲取一個(gè)屬性,如果引發(fā)了 AttributeError 則會(huì)引發(fā) unittest.SkipTest。
test.support.catch_unraisable_exception()
使用 sys.unraisablehook() 來捕獲不可引發(fā)的異常的上下文管理器。
存儲(chǔ)異常值 (cm.unraisable.exc_value) 會(huì)創(chuàng)建一個(gè)引用循環(huán)。 引用循環(huán)將在上下文管理器退出時(shí)被顯式地打破。
存儲(chǔ)對(duì)象 (cm.unraisable.object) 如果被設(shè)置為一個(gè)正在最終化的對(duì)象則可以恢復(fù)它。 退出上下文管理器將清除已存在對(duì)象。
用法:
with support.catch_unraisable_exception() as cm:# code creating an "unraisable exception"...# check the unraisable exception: use cm.unraisable...# cm.unraisable attribute no longer exists at this point# (to break a reference cycle)
3.8 新版功能.
test.support.load_package_tests(pkg_dir, loader, standard_tests, pattern)
在測試包中使用的 unittest load_tests 協(xié)議的通用實(shí)現(xiàn)。 pkg_dir 是包的根目錄;loader, standard_tests 和 pattern 是 load_tests 所期望的參數(shù)。 在簡單的情況下,測試包的 __init__.py 可以是下面這樣的:
import osfrom test.support import load_package_testsdef load_tests(*args):return load_package_tests(os.path.dirname(__file__), *args)
test.support.detect_api_mismatch(ref_api, other_api, **, ignore=()*)
返回未在 other_api 中找到的 ref_api 的屬性、函數(shù)或方法的集合,除去在 ignore 中指明的要在這個(gè)檢查中忽略的已定義條目列表。
在默認(rèn)情況下這將跳過以 ‘_‘ 打頭的私有屬性但包括所有魔術(shù)方法,即以 ‘__‘ 打頭和結(jié)尾的方法。
3.5 新版功能.
test.support.patch(test_instance, object_to_patch, attr_name, new_value)
用 new_value 重載 object_to_patch.attr_name。并向 test_instance 添加清理過程以便為 attr_name 恢復(fù) object_to_patch。 attr_name 應(yīng)當(dāng)是 object_to_patch 的一個(gè)有效屬性。
test.support.run_in_subinterp(code)
在子解釋器中運(yùn)行 code。 如果啟用了 tracemalloc 則會(huì)引發(fā) unittest.SkipTest。
test.support.check_free_after_iterating(test, iter, cls, args=())
斷言 cls 的實(shí)例在迭代后被釋放。
test.support.missing_compiler_executable(cmd_names=[])
檢查在 cmd_names 中列出名稱的或者當(dāng) cmd_names 為空時(shí)所有的編譯器可執(zhí)行文件是否存在并返回第一個(gè)丟失的可執(zhí)行文件或者如果未發(fā)現(xiàn)任何丟失則返回 None。
test.support.check__all__(test_case, module, name_of_module=None, extra=(), not_exported=())
斷言 module 的 __all__ 變量包含全部公共名稱。
模塊的公共名稱(它的 API)是根據(jù)它們是否符合公共名稱慣例并在 module 中被定義來自動(dòng)檢測的。
name_of_module 參數(shù)可以(用字符串或元組的形式)指定一個(gè) API 可以被定義為什么模塊以便被檢測為一個(gè)公共 API。 一種這樣的情況會(huì)在 module 從其他模塊,可能是一個(gè) C 后端 (如 csv 和它的 _csv) 導(dǎo)入其公共 API 的某一組成部分時(shí)發(fā)生。
extra 參數(shù)可以是一個(gè)在其他情況下不會(huì)被自動(dòng)檢測為 “public” 的名稱集合,例如沒有適當(dāng) __module__ 屬性的對(duì)象。 如果提供該參數(shù),它將被添加到自動(dòng)檢測到的對(duì)象中。
not_exported 參數(shù)可以是一個(gè)不可被當(dāng)作公共 API 的一部分的名稱集合,即使其名稱沒有顯式指明這一點(diǎn)。
用法示例:
import barimport fooimport unittestfrom test import supportclass MiscTestCase(unittest.TestCase):def test__all__(self):support.check__all__(self, foo)class OtherTestCase(unittest.TestCase):def test__all__(self):extra = {'BAR_CONST', 'FOO_CONST'}not_exported = {'baz'} # Undocumented name.# bar imports part of its API from _bar.support.check__all__(self, bar, ('bar', '_bar'),extra=extra, not_exported=not_exported)
3.6 新版功能.
test.support.skip_if_broken_multiprocessing_synchronize()
如果沒有 multiprocessing.synchronize 模塊,沒有可用的 semaphore 實(shí)現(xiàn),或者如果創(chuàng)建一個(gè)鎖會(huì)引發(fā) OSError 則跳過測試。
3.10 新版功能.
test.support.check_disallow_instantiation(test_case, tp, \args, **kwds*)
斷言類型 tp 不能使用 args 和 kwds 來實(shí)例化。
3.10 新版功能.
test.support.adjust_int_max_str_digits(max_digits)
This function returns a context manager that will change the global sys.set_int_max_str_digits() setting for the duration of the context to allow execution of test code that needs a different limit on the number of digits when converting between an integer and string.
3.11 新版功能.
test.support 模塊定義了以下的類:
class test.support.SuppressCrashReport
一個(gè)用于在預(yù)期會(huì)使子進(jìn)程崩潰的測試時(shí)盡量防止彈出崩潰對(duì)話框的上下文管理器。
在 Windows 上,它會(huì)使用 SetErrorMode 來禁用 Windows 錯(cuò)誤報(bào)告對(duì)話框。
在 UNIX 上,會(huì)使用 resource.setrlimit() 來將 resource.RLIMIT_CORE 的軟限制設(shè)為 0 以防止創(chuàng)建核心轉(zhuǎn)儲(chǔ)文件。
在這兩個(gè)平臺(tái)上,舊值都將被 __exit__() 恢復(fù)。
class test.support.SaveSignals
用于保存和恢復(fù)由 Python 句柄的所注冊的信號(hào)處理句柄。
-
save(self)
將信號(hào)處理句柄保存到一個(gè)將信號(hào)編號(hào)映射到當(dāng)前信號(hào)處理句柄的字典。
-
restore(self)
將來自 save() 字典的信號(hào)編號(hào)設(shè)置到已保存的處理句柄上。
class test.support.Matcher
-
matches(self, d, \*kwargs*)
嘗試對(duì)單個(gè)字典與所提供的參數(shù)進(jìn)行匹配。
-
match_value(self, k, dv, v)
嘗試對(duì)單個(gè)已存儲(chǔ)值 (dv) 與所提供的值 (v) 進(jìn)行匹配。
class test.support.BasicTestRunner
-
run(test)
運(yùn)行 test 并返回結(jié)果。
test.support.socket_helper —- 用于套接字測試的工具
test.support.socket_helper 模塊提供了對(duì)套接字測試的支持。
3.9 新版功能.
test.support.socket_helper.IPV6_ENABLED
設(shè)置為 True 如果主機(jī)打開IPv6, 否則 False .
test.support.socket_helper.find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM)
返回一個(gè)應(yīng)當(dāng)適合綁定的未使用端口。 這是通過創(chuàng)建一個(gè)與 sock 形參相同協(xié)議族和類型的臨時(shí)套接字來達(dá)成的 (默認(rèn)為 AF_INET, SOCK_STREAM),并將其綁定到指定的主機(jī)地址 (默認(rèn)為 0.0.0.0) 并將端口設(shè)為 0,以從 OS 引出一個(gè)未使用的瞬時(shí)端口。 這個(gè)臨時(shí)套接字隨后將被關(guān)閉并刪除,然后返回該瞬時(shí)端口。
這個(gè)方法或 bind_port() 應(yīng)當(dāng)被用于任何在測試期間需要綁定到特定端口的測試。 具體使用哪個(gè)取決于調(diào)用方代碼是否會(huì)創(chuàng)建 Python 套接字,或者是否需要在構(gòu)造器中提供或向外部程序提供未使用的端口(例如傳給 openssl 的 s_server 模式的 -accept 參數(shù))。 在可能的情況下將總是優(yōu)先使用 bind_port() 而非 find_unused_port()。 不建議使用硬編碼的端口因?yàn)閷⑹箿y試的多個(gè)實(shí)例無法同時(shí)運(yùn)行,這對(duì) buildbot 來說是個(gè)問題。
test.support.socket_helper.bind_port(sock, host=HOST)
將套接字綁定到一個(gè)空閑端口并返回端口號(hào)。 這依賴于瞬時(shí)端口以確保我們能使用一個(gè)未綁定端口。 這很重要因?yàn)榭赡軙?huì)有許多測試同時(shí)運(yùn)行,特別是在 buildbot 環(huán)境中。 如果 sock.family 為 AF_INET 而 sock.type 為 SOCK_STREAM,并且套接字上設(shè)置了 SO_REUSEADDR 或 SO_REUSEPORT 則此方法將引發(fā)異常。 測試絕不應(yīng)該為 TCP/IP 套接字設(shè)置這些套接字選項(xiàng)。 唯一需要設(shè)置這些選項(xiàng)的情況是通過多個(gè) UDP 套接字來測試組播。
此外,如果 SO_EXCLUSIVEADDRUSE 套接字選項(xiàng)是可用的(例如在 Windows 上),它將在套接字上被設(shè)置。 這將阻止其他任何人在測試期間綁定到我們的主機(jī)/端口。
test.support.socket_helper.bind_unix_socket(sock, addr)
Bind a Unix socket, raising unittest.SkipTest if PermissionError is raised.
@test.support.socket_helper.skip_unless_bind_unix_socket
一個(gè)用于運(yùn)行需要 Unix 套接字 bind() 功能的測試的裝飾器。
test.support.socket_helper.transient_internet(resource_name, **, timeout=30.0, errnos=()*)
一個(gè)在互聯(lián)網(wǎng)連接的各種問題以異常的形式表現(xiàn)出來時(shí)會(huì)引發(fā) ResourceDenied 的上下文管理器。
test.support.script_helper —- 用于 Python 執(zhí)行測試工具
test.support.script_helper 模塊提供了對(duì) Python 的腳本執(zhí)行測試的支持。
test.support.script_helper.interpreter_requires_environment()
如果 sys.executable interpreter 需要環(huán)境變量才能運(yùn)行則返回 True。
這被設(shè)計(jì)用來配合 @unittest.skipIf() 以便標(biāo)注需要使用to annotate tests that need to use an assert_python*() 函數(shù)來啟動(dòng)隔離模式 (-I) 或無環(huán)境模式 (-E) 子解釋器的測試。
正常的編譯和測試運(yùn)行不會(huì)進(jìn)入這種狀況但它在嘗試從一個(gè)使用 Python 的當(dāng)前家目錄查找邏輯找不到明確的家目錄的解釋器運(yùn)行標(biāo)準(zhǔn)庫測試套件時(shí)有可能發(fā)生。
設(shè)置 PYTHONHOME 是一種能讓大多數(shù)測試套件在這種情況下運(yùn)行的辦法。 PYTHONPATH 或 PYTHONUSERSITE 是另外兩個(gè)可影響解釋器是否能啟動(dòng)的常見環(huán)境變量。
test.support.script_helper.run_python_until_end(\args, **env_vars*)
基于 env_vars 設(shè)置環(huán)境以便在子進(jìn)程中運(yùn)行解釋器。 它的值可以包括 __isolated, __cleanenv, __cwd, and TERM。
在 3.9 版更改: 此函數(shù)不會(huì)再從 stderr 去除空格符。
test.support.script_helper.assert_python_ok(\args, **env_vars*)
斷言附帶 args 和可選的環(huán)境變量 env_vars 運(yùn)行解釋器會(huì)成功 (rc == 0) 并返回一個(gè) (return code, stdout, stderr) 元組。
如果設(shè)置了 __cleanenv 僅限關(guān)鍵字形參,env_vars 會(huì)被用作一個(gè)全新的環(huán)境。
Python 是以隔離模式 (命令行選項(xiàng) -I) 啟動(dòng)的,除非 __isolated 僅限關(guān)鍵字形參被設(shè)為 False。
在 3.9 版更改: 此函數(shù)不會(huì)再從 stderr 去除空格符。
test.support.script_helper.assert_python_failure(\args, **env_vars*)
斷言附帶 args 和可選的環(huán)境變量 env_vars 運(yùn)行解釋器會(huì)失敗 (rc != 0) 并返回一個(gè) (return code, stdout, stderr) 元組。
更多選項(xiàng)請參閱 assert_python_ok()。
在 3.9 版更改: 此函數(shù)不會(huì)再從 stderr 去除空格符。
test.support.script_helper.spawn_python(\args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw*)
使用給定的參數(shù)運(yùn)行一個(gè) Python 子進(jìn)程。
kw 是要傳給 subprocess.Popen() 的額外關(guān)鍵字參數(shù)。 返回一個(gè) subprocess.Popen 對(duì)象。
test.support.script_helper.kill_python(p)
運(yùn)行給定的 subprocess.Popen 進(jìn)程直至完成并返回 stdout。
test.support.script_helper.make_script(script_dir, script_basename, source, omit_suffix=False)
在路徑 script_dir 和 script_basename 中創(chuàng)建包含 source 的腳本。 如果 omit_suffix 為 False,則為名稱添加 .py。 返回完整的腳本路徑。
test.support.script_helper.make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None)
使用 zip_dir 和 zip_basename 創(chuàng)建擴(kuò)展名為 zip 的 zip 文件,其中包含 script_name 中的文件。 name_in_zip 為歸檔名。 返回一個(gè)包含 (full path, full path of archive name) 的元組。
test.support.script_helper.make_pkg(pkg_dir, init_source=’’)
創(chuàng)建一個(gè)名為 pkg_dir 的目錄,其中包含一個(gè) __init__ 文件并以 init_source 作為其內(nèi)容。
test.support.script_helper.make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, source, depth=1, compiled=False)
使用 zip_dir 和 zip_basename 創(chuàng)建一個(gè) zip 包目錄,其中包含一個(gè)空的 __init__ 文件和一個(gè)包含 source 的文件 script_basename。 如果 compiled 為 True,則兩個(gè)源文件將被編譯并添加到 zip 包中。 返回一個(gè)以完整 zip 路徑和 zip 文件歸檔名為元素的元組。
test.support.bytecode_helper —- 用于測試正確字節(jié)碼生成的支持工具
test.support.bytecode_helper 模塊提供了對(duì)測試和檢查字節(jié)碼生成的支持。
3.9 新版功能.
The module defines the following class:
class test.support.bytecode_helper.BytecodeTestCase(unittest.TestCase)
這個(gè)類具有用于檢查字節(jié)碼的自定義斷言。
BytecodeTestCase.get_disassembly_as_string(co)
以字符串形式返回 co 的匯編碼。
BytecodeTestCase.assertInBytecode(x, opname, argval=_UNSPECIFIED)
如果找到 opname 則返回 instr,否則拋出 AssertionError。
BytecodeTestCase.assertNotInBytecode(x, opname, argval=_UNSPECIFIED)
如果找到 opname 則拋出 AssertionError。
test.support.threading_helper —- 用于線程測試的工具
test.support.threading_helper 模塊提供了對(duì)線程測試的支持。
3.10 新版功能.
test.support.threading_helper.join_thread(thread, timeout=None)
在 timeout 秒之內(nèi)合并一個(gè) thread。 如果線程在 timeout 秒后仍然存活則引發(fā) AssertionError。
@test.support.threading_helper.reap_threads
用于確保即使測試失敗線程仍然會(huì)被清理的裝飾器。
test.support.threading_helper.start_threads(threads, unlock=None)
啟動(dòng) threads 的上下文管理器,該參數(shù)為一個(gè)線程序列。 unlock 是一個(gè)在所有線程啟動(dòng)之后被調(diào)用的函數(shù),即使引發(fā)了異常也會(huì)執(zhí)行;一個(gè)例子是 threading.Event.set()。 start_threads 將在退出時(shí)嘗試合并已啟動(dòng)的線程。
test.support.threading_helper.threading_cleanup(\original_values*)
清理未在 original_values 中指定的線程。 被設(shè)計(jì)為如果有一個(gè)測試在后臺(tái)離開正在運(yùn)行的線程時(shí)會(huì)發(fā)出警告。
test.support.threading_helper.threading_setup()
返回當(dāng)前線程計(jì)數(shù)和懸空線程的副本。
test.support.threading_helper.wait_threads_exit(timeout=None)
等待直到 with 語句中所有已創(chuàng)建線程退出的上下文管理器。
test.support.threading_helper.catch_threading_exception()
使用 threading.excepthook() 來捕獲 threading.Thread 異常的上下文管理器。
當(dāng)異常被捕獲時(shí)要設(shè)置的屬性:
-
exc_type -
exc_value -
exc_traceback -
thread
參見 threading.excepthook() 文檔。
這些屬性在上下文管理器退出時(shí)將被刪除。
用法:
with threading_helper.catch_threading_exception() as cm:# code spawning a thread which raises an exception...# check the thread exception, use cm attributes:# exc_type, exc_value, exc_traceback, thread...# exc_type, exc_value, exc_traceback, thread attributes of cm no longer# exists at this point# (to avoid reference cycles)
3.8 新版功能.
test.support.os_helper —- 用于操作系統(tǒng)測試的工具
test.support.os_helper 模塊提供了對(duì)操作系統(tǒng)測試的支持。
3.10 新版功能.
test.support.os_helper.FS_NONASCII
一個(gè)可通過 os.fsencode() 編碼的非 ASCII 字符。
test.support.os_helper.SAVEDCWD
設(shè)置為 os.getcwd()。
test.support.os_helper.TESTFN
設(shè)置為一個(gè)可以安全地用作臨時(shí)文件名的名稱。 任何被創(chuàng)建的臨時(shí)文件都應(yīng)當(dāng)被關(guān)閉和撤銷鏈接(移除)。
test.support.os_helper.TESTFN_NONASCII
如果存在的話,設(shè)置為一個(gè)包含 FS_NONASCII 字符的文件名。 這會(huì)確保當(dāng)文件名存在時(shí),它可使用默認(rèn)文件系統(tǒng)編碼格式來編碼和解碼。 這允許需要非 ASCII 文件名的測試在其不可用的平臺(tái)上被方便地跳過。
test.support.os_helper.TESTFN_UNENCODABLE
設(shè)置為一個(gè)應(yīng)當(dāng)在嚴(yán)格模式下不可使用文件系統(tǒng)編碼格式來編碼的文件名(str 類型)。 如果無法生成這樣的文件名則可以為 None。
test.support.os_helper.TESTFN_UNDECODABLE
設(shè)置為一個(gè)應(yīng)當(dāng)在嚴(yán)格模式下不可使用文件系統(tǒng)編碼格式來編碼的文件名(bytes 類型)。 如果無法生成這樣的文件名則可以為 None。
test.support.os_helper.TESTFN_UNICODE
設(shè)置為用于臨時(shí)文件的非 ASCII 名稱。
class test.support.os_helper.EnvironmentVarGuard
用于臨時(shí)性地設(shè)置或取消設(shè)置環(huán)境變量的類。 其實(shí)例可被用作上下文管理器并具有完整的字典接口用來查詢/修改下層的 os.environ。 在從上下文管理器退出之后所有通過此實(shí)例對(duì)環(huán)境變量進(jìn)行的修改都將被回滾。
在 3.1 版更改: 增加了字典接口。
class test.support.os_helper.FakePath(path)
簡單的 path-like object。 它實(shí)現(xiàn)了 __fspath__() 方法,該方法將返回 path 參數(shù)。 如果 path 為一個(gè)異常,它將在 __fspath__() 中被引發(fā)。
EnvironmentVarGuard.set(envvar, value)
臨時(shí)性地將環(huán)境變量 envvar 的值設(shè)為 value。
EnvironmentVarGuard.unset(envvar)
臨時(shí)性地取消設(shè)置環(huán)境變量 envvar。
test.support.os_helper.can_symlink()
如果操作系統(tǒng)支持符號(hào)鏈接則返回 True,否則返回 False。
test.support.os_helper.can_xattr()
如果操作系統(tǒng)支持 xattr 支返回 True,否則返回 False。
test.support.os_helper.change_cwd(path, quiet=False)
一個(gè)臨時(shí)性地將當(dāng)前工作目錄改為 path 并輸出該目錄的上下文管理器。
如果 quiet 為 False,此上下文管理器將在發(fā)生錯(cuò)誤時(shí)引發(fā)一個(gè)異常。 在其他情況下,它將只發(fā)出一個(gè)警告并將當(dāng)前工作目錄保持原狀。
test.support.os_helper.create_empty_file(filename)
創(chuàng)建一個(gè)名為 filename 的空文件。 如果文件已存在,則清空其內(nèi)容。
test.support.os_helper.fd_count()
統(tǒng)計(jì)打開的文件描述符數(shù)量。
test.support.os_helper.fs_is_case_insensitive(directory)
如果 directory 的文件系統(tǒng)對(duì)大小寫敏感則返回 True。
test.support.os_helper.make_bad_fd()
通過打開并關(guān)閉臨時(shí)文件來創(chuàng)建一個(gè)無效的文件描述符,并返回其描述器。
test.support.os_helper.rmdir(filename)
在 filename 上調(diào)用 os.rmdir()。 在 Windows 平臺(tái)上,這將使用一個(gè)檢測文件是否存在的等待循環(huán)來包裝,需要這樣做是因?yàn)榉床《境绦驎?huì)保持文件打開并阻止其被刪除。
test.support.os_helper.rmtree(path)
在 path 上調(diào)用 shutil.rmtree() 或者調(diào)用 os.lstat() 和 os.rmdir() 來移除一個(gè)路徑及其內(nèi)容。 與 rmdir() 一樣,在 Windows 平臺(tái)上這將使用一個(gè)檢測文件是否存在的等待循環(huán)來包裝。
@test.support.os_helper.skip_unless_symlink
一個(gè)用于運(yùn)行需要符號(hào)鏈接支持的測試的裝飾器。
@test.support.os_helper.skip_unless_xattr
一個(gè)用于運(yùn)行需要 xattr 支持的測試的裝飾器。
test.support.os_helper.temp_cwd(name=’tempcwd’, quiet=False)
一個(gè)臨時(shí)性地創(chuàng)建新目錄并改變當(dāng)前工作目錄(CWD)的上下文管理器。
臨時(shí)性地改變當(dāng)前工作目錄之前此上下文管理器會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)名為 name 的臨時(shí)目錄。 如果 name 為 None,則會(huì)使用 tempfile.mkdtemp() 創(chuàng)建臨時(shí)目錄。
如果 quiet 為 False 并且無法創(chuàng)建或修改 CWD,則會(huì)引發(fā)一個(gè)錯(cuò)誤。 在其他情況下,只會(huì)引發(fā)一個(gè)警告并使用原始 CWD。
test.support.os_helper.temp_dir(path=None, quiet=False)
一個(gè)在 path 上創(chuàng)建臨時(shí)目錄并輸出該目錄的上下文管理器。
如果 path 為 None,則會(huì)使用 tempfile.mkdtemp() 來創(chuàng)建臨時(shí)目錄。 如果 quiet 為 False,則該上下文管理器在發(fā)生錯(cuò)誤時(shí)會(huì)引發(fā)一個(gè)異常。 在其他情況下,如果 path 已被指定并且無法創(chuàng)建,則只會(huì)發(fā)出一個(gè)警告。
test.support.os_helper.temp_umask(umask)
一個(gè)臨時(shí)性地設(shè)置進(jìn)程掩碼的上下文管理器。
test.support.os_helper.unlink(filename)
在 filename 上調(diào)用 os.unlink()。 與 rmdir() 一樣,在 Windows 平臺(tái)上這將使用一個(gè)檢測文本是否存在的等待循環(huán)來包裝。
test.support.import_helper —- 用于導(dǎo)入測試的工具
test.support.import_helper 模塊提供了對(duì)導(dǎo)入測試的支持。
3.10 新版功能.
test.support.import_helper.forget(module_name)
從 sys.modules 移除名為 module_name 的模塊并刪除該模塊的已編譯字節(jié)碼文件。
test.support.import_helper.import_fresh_module(name, fresh=(), blocked=(), deprecated=False)
此函數(shù)會(huì)在執(zhí)行導(dǎo)入之前通過從 sys.modules 移除指定模塊來導(dǎo)入并返回指定 Python 模塊的新副本。 請注意這不同于 reload(),原來的模塊不會(huì)受到此操作的影響。
fresh 是包含在執(zhí)行導(dǎo)入之前還要從 sys.modules 緩存中移除的附加模塊名稱的可迭代對(duì)象。
blocked 是包含模塊名稱的可迭代對(duì)象,導(dǎo)入期間在模塊緩存中它會(huì)被替換為 None 以確保嘗試導(dǎo)入將引發(fā) ImportError。
指定名稱的模塊以及任何在 fresh 和 blocked 形參中指明的模塊會(huì)在開始導(dǎo)入之前被保存并在全新導(dǎo)入完成時(shí)被重新插入到 sys.modules 中。
如果 deprecated 為 True 則在此導(dǎo)入操作期間模塊和包的棄用消息會(huì)被屏蔽。
如果指定名稱的模塊無法被導(dǎo)入則此函數(shù)將引發(fā) ImportError。
用法示例:
# Get copies of the warnings module for testing without affecting the# version being used by the rest of the test suite. One copy uses the# C implementation, the other is forced to use the pure Python fallback# implementationpy_warnings = import_fresh_module('warnings', blocked=['_warnings'])c_warnings = import_fresh_module('warnings', fresh=['_warnings'])
3.1 新版功能.
test.support.import_helper.import_module(name, deprecated=False, **, required_on=()*)
此函數(shù)會(huì)導(dǎo)入并返回指定名稱的模塊。 不同于正常的導(dǎo)入,如果模塊無法被導(dǎo)入則此函數(shù)將引發(fā) unittest.SkipTest。
如果 deprecated 為 True 則在此導(dǎo)入操作期間模塊和包的棄用消息會(huì)被屏蔽。 如果某個(gè)模塊在特定平臺(tái)上是必需的而在其他平臺(tái)上是可選的,請為包含平臺(tái)前綴的可迭代對(duì)象設(shè)置 required_on,此對(duì)象將與 sys.platform 進(jìn)行比對(duì)。
3.1 新版功能.
test.support.import_helper.modules_setup()
返回 sys.modules 的副本。
test.support.import_helper.modules_cleanup(oldmodules)
移除 oldmodules 和 encodings 以外的模塊以保留內(nèi)部緩沖區(qū)。
test.support.import_helper.unload(name)
從 sys.modules 中刪除 name。
test.support.import_helper.make_legacy_pyc(source)
將 PEP 3147/PEP 488 pyc 文件移至舊版 pyc 位置并返回該舊版 pyc 文件的文件系統(tǒng)路徑。 source 的值是源文件的文件系統(tǒng)路徑。 它不必真實(shí)存在,但是 PEP 3147/488 pyc 文件必須存在。
class test.support.import_helper.CleanImport(\module_names*)
強(qiáng)制導(dǎo)入以返回一個(gè)新的模塊引用的上下文管理器。 這適用于測試模塊層級(jí)的行為,例如在導(dǎo)入時(shí)發(fā)出 DeprecationWarning。 示例用法:
with CleanImport('foo'):importlib.import_module('foo') # New reference.
class test.support.import_helper.DirsOnSysPath(\paths*)
一個(gè)臨時(shí)性地向 sys.path 添加目錄的上下文管理器。
這將創(chuàng)建 sys.path 的一個(gè)副本,添加作為位置參數(shù)傳入的任何目錄,然后在上下文結(jié)束時(shí)將 sys.path 還原到副本的設(shè)置。
請注意該上下文管理器代碼塊中 所有 對(duì) sys.path 的修改,包括對(duì)象的替換,都將在代碼塊結(jié)束時(shí)被還原。
test.support.warnings_helper —- 用于警告測試的工具
test.support.warnings_helper 模塊提供了對(duì)警告測試的支持。
3.10 新版功能.
test.support.warnings_helper.check_no_resource_warning(testcase)
檢測是否沒有任何 ResourceWarning 被引發(fā)的上下文管理器。 你必須在該上下文管理器結(jié)束之前移除可能發(fā)出 ResourceWarning 的對(duì)象。
test.support.warnings_helper.check_syntax_warning(testcase, statement, errtext=’’, **, lineno=1, offset=None*)
用于通過嘗試編譯 statement 來測試 statement 中的語法警告。 還會(huì)測試 SyntaxWarning 是否只發(fā)出了一次,以及它在轉(zhuǎn)成錯(cuò)誤時(shí)是否將被轉(zhuǎn)換為 SyntaxError。 testcase 是用于測試的 unittest 實(shí)例。 errtext 是應(yīng)當(dāng)匹配所發(fā)出的 SyntaxWarning 以及所引發(fā)的 SyntaxError 的字符串表示形式的正則表達(dá)式。 如果 lineno 不為 None,則與警告和異常所在的行進(jìn)行比較。 如果 offset 不為 None,則與異常的偏移量進(jìn)行比較。
3.8 新版功能.
test.support.warnings_helper.check_warnings(\filters, quiet=True*)
一個(gè)用于 warnings.catch_warnings() 以更容易地測試特定警告是否被正確引發(fā)的便捷包裝器。 它大致等價(jià)于調(diào)用 warnings.catch_warnings(record=True) 并將 warnings.simplefilter() 設(shè)為 always 并附帶自動(dòng)驗(yàn)證已記錄結(jié)果的選項(xiàng)。
check_warnings 接受 ("message regexp", WarningCat
名稱欄目:創(chuàng)新互聯(lián)Python教程:test—-Python回歸測試包
網(wǎng)頁鏈接:http://www.dlmjj.cn/article/dhjocch.html


咨詢
建站咨詢
