W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
pytest -x # stop after first failure
pytest --maxfail=2 # stop after two failures
Python 帶有一個(gè)名為 ?pdb
的內(nèi)置 Python 調(diào)試器。 pytest 允許通過命令行選項(xiàng)進(jìn)入 ?pdb
提示符:
pytest --pdb
這將在每次失敗(或?KeyboardInterrupt
?)時(shí)調(diào)用Python調(diào)試器。通常,你可能只希望在第一個(gè)失敗的測試中這樣做,以了解特定的失敗情況:
pytest -x --pdb # drop to PDB on first failure, then end test session
pytest --pdb --maxfail=3 # drop to PDB for first three failures
請(qǐng)注意,在任何失敗時(shí),異常信息都存儲(chǔ)在 ?sys.last_value
?、?sys.last_type
? 和 ?sys.last_traceback
? 中。 在交互式使用中,這允許人們使用任何調(diào)試工具進(jìn)行事后調(diào)試。 也可以手動(dòng)訪問異常信息,例如:
>>> import sys
>>> sys.last_traceback.tb_lineno
42
>>> sys.last_value
AssertionError('assert result == "ok"',)
pytest 允許在每個(gè)測試開始時(shí)通過命令行選項(xiàng)立即進(jìn)入pdb
提示符:
pytest --trace
這將在每次測試開始時(shí)調(diào)用Python調(diào)試器。
要在代碼中設(shè)置斷點(diǎn),請(qǐng)?jiān)诖a中使用原生 ?Python import pdb;pdb.set_trace()
? 調(diào)用,pytest 會(huì)自動(dòng)禁用該測試的輸出捕獲:
Python 3.7 引入了一個(gè)內(nèi)置的 ?breakpoint()
? 函數(shù)。 Pytest 支持使用具有以下行為的 ?breakpoint()
?:
breakpoint()
? 并將 ?PYTHONBREAKPOINT
設(shè)置為默認(rèn)值時(shí),pytest 將使用自定義內(nèi)部PDB
跟蹤 UI 而不是系統(tǒng)默認(rèn)Pdb
?。Pdb
跟蹤 UI。--pdb
? 傳遞給 pytest 后,自定義內(nèi)部 ?Pdb
跟蹤 UI 將與 ?breakpoint()
? 和失敗的測試/未處理的異常一起使用。--pdbcls
? 可用于指定自定義調(diào)試器類。?faulthandler
標(biāo)準(zhǔn)模塊可用于在錯(cuò)誤或超時(shí)后轉(zhuǎn)儲(chǔ) Python 回溯。
該模塊會(huì)自動(dòng)啟用 pytest 運(yùn)行,除非在命令行上給出 ?-p no:faulthandler
?。
如果測試完成時(shí)間超過 X 秒(在 Windows 上不可用),?faulthandler_timeout=X
? 配置選項(xiàng)也可用于轉(zhuǎn)儲(chǔ)所有線程的回溯。
注意:
此功能已從外部 ?pytest-faulthandler
? 插件集成,有兩個(gè)小區(qū)別:
-p no:faulthandler
? 而不是 ?--no-faulthandler
?:前者可以與任何插件一起使用,因此它節(jié)省了一個(gè)選項(xiàng)。--faulthandler-timeout
? 命令行選項(xiàng)已成為 ?faulthandler_timeout
? 配置選項(xiàng)。 它仍然可以使用 ?-o faulthandler_timeout=X
? 從命令行進(jìn)行配置。這些功能僅適用于 Python>=3.8。
未處理的異常是在無法傳播給調(diào)用者的情況下引發(fā)的異常。 最常見的情況是 ?__del__
? 實(shí)現(xiàn)中引發(fā)的異常。
未處理的線程異常是在 ?Thread
中引發(fā)但未處理的異常,導(dǎo)致線程不干凈地終止。
這兩種類型的異常通常都被認(rèn)為是錯(cuò)誤,但可能會(huì)被忽視,因?yàn)樗鼈儾粫?huì)導(dǎo)致程序本身崩潰。 Pytest 檢測到這些情況并發(fā)出在測試運(yùn)行摘要中可見的警告。
插件會(huì)自動(dòng)啟用 pytest 運(yùn)行,除非在命令行上給出了 ?-p no:unraisableexception
? (用于不可引發(fā)的異常)和 ?-p no:threadexception
? (用于線程異常)選項(xiàng)。
可以使用 ?pytest.mark.filterwarnings
? 標(biāo)記選擇性地使警告靜音。 警告類別為 ?pytest.PytestUnraisableExceptionWarning
? 和 ?pytest.PytestUnhandledThreadExceptionWarning
?。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: