[跟著官方文檔學pytest][一][學習筆記]
pytest框架使編寫小型、可讀的測試變得容易,并且可以拓展以支持應用程序和庫的復雜功能測試。
pytest要求Python版本3.7+。
PyPI包名:pytest。
安裝pytest
在命令提示符中輸入pip指令安裝pytest
pip install -U pytest
檢查版本
>pytest --version pytest 7.1.2
寫第一個pytest
本例中采用的Python IDE為PyCharm 2022.1 (Community Edition)
創建一個名為test_sample.py的文件輸入以下代碼
# content of test_sample.py def inc(x): return x + 1 def test_answer(): assert inc(3) == 5
輸出結果為:
[100%]是指運行所有測試用例的總體進度。完成后,pytest會顯示一個失敗報告,因為 func(3)不返回 5。
運行多個pytest
pytest將在當前目錄及其子目錄中運行test_.py或_test.py格式的所有文件。更一般地說,它遵循標準的測試發現規則。
斷言引發某個異常
使用raises幫助程序斷言某些代碼會引發異常:
# content of test_sysexit.py import pytest def f(): raise SystemExit(1) def test_mytest(): with pytest.raises(SystemExit): f()
輸出結果:
對一個類中的多個測試進行分組
開發多個測試后,可能希望將它們分組到一個類中。pytest使創建包含多個測試的類變得容易:
# content of test_class.py class TestClass: def test_one(self): x = "this" assert "h" in x def test_two(self): x = "hello" assert hasattr(x, "h")
pytest按照其Python測試發現約定發現所有測試,因此它同時找到test_前綴函數。無需對任何內容進行子類化,但請確保在類前面加上Test前綴,否則將跳過該類。我們可以通過傳遞模塊的文件名來運行該模塊:
第一個測試通過,第二個測試失敗。可以輕松查看斷言中的中間值,以幫助您了解失敗的原因。
由于以下原因,將類中的測試分組可能有以下好處:
組織測試
在特定類中為測試共享工具
在類級別應用標記并讓它們隱式應用于所有測試
在類內對測試進行分組時需要注意的是,每個測試都有一個唯一的類實例。讓每個測試共享同一個類實例將非常不利于測試隔離,并且會促進不良的測試實踐。概述如下:
# content of test_class_demo.py class TestClassDemoInstance: value = 0 def test_one(self): self.value = 1 assert self.value == 1 def test_two(self): assert self.value == 1
pytest -k TestClassDemoInstance -q
請求用于功能測試的唯一臨時目錄
pytest提供了內置的固定設置/函數參數來請求任意資源,例如唯一的臨時目錄:
# content of test_tmp_path.py def test_needsfiles(tmp_path): print(tmp_path) assert 0
在測試函數簽名中列出名稱tmp_path,pytest將在執行測試函數調用之前查找并調用fixture工廠以創建資源。在測試運行之前,pytest會創建一個唯一的每個測試調用的臨時目錄:
Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。