天天看點

Python單元測試架構之pytest---如何執行測試用例

介紹                                                                     

  pytest是一個成熟的全功能的python測試工具,可以幫助你寫出更好的程式。

适合從簡單的單元到複雜的功能測試

l 子產品化parametrizeable裝置(在2.3,持續改進)

l 參數化測試函數(用例)

l 标記測試功能與屬性

l skip和xfail:處理不成功的測試用例(在2.4改進)

l 通過xdist插件分發測試到多個cpu

l 不斷地重新運作失敗的測試

l 靈活約定的python測試發現

安裝                                                                    

>pip install -u pytest   # 通過pip安裝

>py.test --version        # 檢視pytest版本

 this is pytest version 2.7.2, imported from c:\python27\lib\site-packages\pytest.pyc

簡單的測試                                                           

  

  讓我們建立第一個檔案,對個簡單的功能進行測試。

Python單元測試架構之pytest---如何執行測試用例
Python單元測試架構之pytest---如何執行測試用例

 切換到測試檔案所在的目錄,通過“py.test”指令運作測試。

>py.test 

執行結果如下圖:

Python單元測試架構之pytest---如何執行測試用例

===================================================================

在一個測試類中建立多個測試用例:

Python單元測試架構之pytest---如何執行測試用例
Python單元測試架構之pytest---如何執行測試用例

運作測試:

>py.test -q test_class.py

Python單元測試架構之pytest---如何執行測試用例

-q  為quiet。表示在安靜的模式輸出報告訴。加不加這個參有什麼差別呢? 讀者可以對比一下兩次輸出的日志。其實,就是少了一些pytest的版本資訊。

從python代碼中調用pytest

pytest中同樣提供了main() 來函數來執行測試用例。

pytest/

├── test_sample.py

├── test_class.py

└── test_main.py

此目錄為我們練習的目錄,打開test_mian.py

Python單元測試架構之pytest---如何執行測試用例
Python單元測試架構之pytest---如何執行測試用例

 直接運作該程式,sublime 中按ctrl+b 運作。結果如下:

Python單元測試架構之pytest---如何執行測試用例
Python單元測試架構之pytest---如何執行測試用例

  從執行結果看到,main() 預設執行了目前檔案所在的目錄下的所有測試檔案。

  那麼,如果我們隻想運作某個測試檔案呢?可以向main()中添加參數,就像在cmd指令提示符下面一樣:

Python單元測試架構之pytest---如何執行測試用例
Python單元測試架構之pytest---如何執行測試用例

 運作結果:

Python單元測試架構之pytest---如何執行測試用例
Python單元測試架構之pytest---如何執行測試用例

那如果我想運作某個目錄下的測試用例呢?指定測試目錄即可。

Python單元測試架構之pytest---如何執行測試用例
Python單元測試架構之pytest---如何執行測試用例

 建立運作測試腳本                                                  

  有時候我們的測試用例檔案分散在不同的層級目錄下,通過指令行的方式運作測試顯示不太友善,如何編寫一個運作所有測試用例的腳本呢? pytest可以自動幫我們生成這樣的腳本。

>py.test --genscript=runtests.py

Python單元測試架構之pytest---如何執行測試用例

打開生成的測runtests.py檔案:

Python單元測試架構之pytest---如何執行測試用例
Python單元測試架構之pytest---如何執行測試用例

 好吧!其實, 我也不了解這段代碼的含義,但是執行它的可運作測試用例了。

├── test_case/

│   ├── test_sample.py

│   ├── test_class.py

│   ├── __init__.py

│   └── test_case2/

│          ├── test_main.py

│          ├── test_time.py

│          └── __init__.py

└── runtests.py

執行runtest.py檔案。

>python runtest.py

Python單元測試架構之pytest---如何執行測試用例

當然,你也可以打開runtests.py 檔案運作它。

* 最後,pytest是如果識别測試用例的呢?它預設使用檢查以test_ *.py 或*_test.py命名的檔案名,在檔案内部查找以test_打頭的方法或函數,并執行它們。

pytest還有許多需要讨論的地方,做為這個系列的第一節,先介紹到這裡。