unittest是python自帶的單元測試框架,它封裝好了一些校驗返回的結果方法和一些用例執行前的初始化操做,使得單元測試易於開展,由於它的易用性,不少同窗也拿它來作功能測試和接口測試,只需簡單開發一些功能(報告,初始化webdriver,或者http請求方法)即可實現。python
但自動化測試中咱們經常須要根據不一樣需求挑選部分測試用例運行,而且咱們但願用例克服環境不穩定的侷限,即運行失敗後自動從新運行一次,若是成功就認爲是環境問題致使第一次失敗,還有咱們常常但願測試用例能夠併發執行等等,這些unittest都作不到或者須要大量二次開發才能作到,那麼有沒有更增強大的框架能夠替代unittests呢?web
pytest是python裏的一個強大框架,它能夠用來作單元測試,你也能夠用來作功能,接口自動化測試。並且它比unittest支持的功能更多更全面。可是pytest在Getstarted裏給出的實例卻很簡單,不少同窗錯覺得它只是跟unittest同樣是個單元測試框架罷了,若是你查詢中文互聯網,你也只能找到寥寥數篇大體同樣的用法,能夠說pytest的精髓使用,沒有被你們挖掘出來,如此強大的框架不該該被埋沒,今天我就帶領你們深刻pytest使用,共同領略pytest的強大。session
1.安裝pytest單元測試框架併發
2.檢查Pytest安裝版本 使用的命令是:pip show pytest框架
也可使用 pytest -version 來查看函數
先來看一下第一個例子.新建一個python文件,collect.py 代碼以下:單元測試
def func(x): return x+1 def test_answer(): assert func(3) == 5 test_answer()
運行結果以下:測試
Traceback (most recent call last): File "E:/untitled1/collect.py", line 90, in <module> test_answer() File "E:/untitled1/collect.py", line 89, in test_answer assert func(3) == 5 AssertionError
固然,也能夠進入到collect.py所在文件中,使用pytest命令來執行:spa
E:\untitled1>pytest collect.py ============================= test session starts ============================= platform win32 -- Python 3.5.1, pytest-5.0.1, py-1.8.0, pluggy-0.12.0 rootdir: E:\untitled1 collected 0 items / 1 errors =================================== ERRORS ==================================== _________________________ ERROR collecting collect.py _________________________ collect.py:90: in <module> test_answer() collect.py:89: in test_answer assert func(3) == 5 E assert 4 == 5 E + where 4 = func(3) !!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!! =========================== 1 error in 0.13 seconds =========================== E:\untitled1>
須要說明的是:pytest運行規則是自動查找python文件中以 test 開頭的函數並執行。繼續定義一個類。把多個函數封裝到類中。以下:code
class TestClass(): def test_one(self): x = 'hello' assert 'h' in x def test_two(self): x = 'hello' assert hasattr(x, 'check')
使用cmd命令來運行testclass測試類,繼續執行collect.py文件:
E:\untitled1>pytest -q collect.py .F [100%] ================================== FAILURES =================================== _____________________________ TestClass.test_two ______________________________ self = <collect.TestClass object at 0x0000000003679DD8> def test_two(self): x = 'hello' > assert hasattr(x, 'check') E AssertionError: assert False E + where False = hasattr('hello', 'check') collect.py:102: AssertionError 1 failed, 1 passed in 0.07 seconds
(-q表示的是顯示簡單的測試結果)由測試結果可知,第一個用例是經過的,第二個是失敗啊的。測試結果能夠很清楚的查看報錯緣由!
Pytest運行規則:
1. 測試文件必須以test開頭或者_test結尾。
2. 測試類必須是以test開頭,且不能有init初始化方法
3. 測試函數必須是以test開頭
4. 測試斷言必須是assert方法