本文正在參加「Python主題月」,詳情查看 活動連接html
微信公衆號搜索【程序媛小莊】 - 沒有白走的路,每一步都算數node
項目開發中有不少的功能,一般開發人員須要對本身編寫的代碼進行自測,除了藉助postman
等工具進行測試外,還須要編寫單元測試對開發的代碼進行測試,經過單元測試來判斷代碼是否可以實現需求,本文介紹的pytest
模塊是一個很是好用的框架,不只支持簡單的測試也支持應用中複雜的功能測試。python
這裏引用pytest
官方文檔中的內容:pytest is a mature full-featured Python testing tool that helps you write better programs.web
pytest
的運行環境是:python3.6 3.7 3.8 3.9 pypy3
.在命令行中運行下述命令安裝pytest
:微信
pip install pytest
複製代碼
安裝完成以後運行下述命令檢查是否安裝成功:markdown
pytest --version
pytest 6.2.4
複製代碼
能夠經過四行代碼爲一個函數建立簡單的測試。框架
# test.py
def func(x):
return x+1
def test_answer():
assert func(5) == 7
複製代碼
下面就能夠執行pytest
命令來測試功能。函數
100%
是指運行全部測試用例的總體進度,完成以後,pytest
會顯示一個失敗報告,指出具體錯誤緣由。pytest
能夠指定文件進行測試,更多的時候pytest
會運行當前目錄和子目錄中的全部test_*.py
或者*_test.py
形式的文件。工具
若是編寫了多個測試用例,能夠將多個測試用例放在同一個類中,可是須要確保類型的前綴是Test
,不然將會被pytest
跳過。oop
class TestDemo:
def test_one(self):
x = 'this'
assert 'h' in x
def test_two(self):
x = 'hello'
assert hasattr(x, 'check')
複製代碼
下面是使用pytest
執行測試的結果,在類中編寫測試須要注意兩點:第一,類名必須有Test
前綴,第二,在使用類進行測試時不須要實例化對象,pytest
會自動找到test_
前綴的方法執行。
不曉得有沒有細心的小夥伴發現沒有,在使用pycharm運行完成一段程序後,會顯示Process finished with exit code 0
,表示程序正常運行完畢了,在運行pytest
時也會出現exit code
,而且可能會出現大概6種不一樣的exit code
:
exit code 0:全部的測試都已經收集而且成功經過
exit code 1:收集並運行了測試,可是有些測試失敗了
exit code 2:測試執行過程當中被打斷
exit code 3:執行測試時發生內部錯誤
exit code 4:pytest命令使用錯誤
exit code 5:沒有收集測試
在pytest
運行時能夠經過命令控制在出現一個或者N個失敗信息時中止繼續測試。
pytest -x # stop after first failure
pytest --maxfail=2 # stop after two failures
複製代碼
pytest
支持多種多方運行和選擇測試用例。
測試指定py文件:pytest test_mod.py
測試指定目錄:pytest /usr/local/testing/
經過節點id指定測試:每一個被收集的測試都會被分配一個惟一的nodeid,,由模塊名、類名、函數名等,每一個部分使用::
分隔。
運行模塊中的指定的測試用例:pytest test_mod.py::test_func
運行類中的某個測試方法:pytest test_mod.py::TestClass::test_method
複製代碼
-r
選項能夠用於在測試會話結束時顯示更加剪短的測試摘要信息,在大型的測試用例中能夠很是清晰的獲取全部失敗、跳過等信息。-r
參數能夠和下面其餘選項結合使用,輸出不一樣的結果信息。
f:失敗的
E:錯誤的
s:跳過的
x:失敗的
p:經過的
複製代碼
如僅查看失敗和跳過的測試,能夠執行:pytest -rfs
。
文章首發於微信公衆號程序媛小莊,同步於掘金。
碼字不易,轉載請說明出處,走過路過的小夥伴們伸出可愛的小指頭點個贊再走吧(╹▽╹)