[Python] 用 Pytest 來做 Unit Test

更新於 2022/02/18閱讀時間約 7 分鐘

什麼是Pytest?

Pytest是一款強大的Python測試工具,支援平行化測試,使用上簡單方便,適合用在各種不同類型的軟體架構,也適用於RD、QA或獨立測試小組,也適合正要導入TDD的公司。
Python Developer Survey 2018 Results 被選為最受歡迎的Testing Framework。(不多說了自己看吧 XD)

來寫測試吧!

  • 先用pip安裝pytest:
pip install pytest
  • 測試專案 - Folder Structure [Link]
pytest-demo
│ README.md

├─libs
│ module.py
│ __init__.py

└─tests
test_module.py
  • libs\module.py
  • tests\test_module.py
1. 在 module.py 定義一個名為 Module 的 class,再將class import 至 test_module.py
2. 接著,宣告兩個測試function,命名方式為test_開頭
3. 將pytest-demo這個路徑加入PYTHONPATH。 [Windows] [Linux]
我們將驗證 Module.get_true() 的回傳值為True,而 Module.get_false() 回傳值為 False
在pytest-demo路徑下執行測試:
pytest-demo> pytest
==================== test session starts ====================
platform win32 -- Python 3.6.2, pytest-5.0.1, py-1.8.0, pluggy-0.12.0
rootdir: ..\pytest-demo
collected 2 items
tests\test_module.py ..     [100%]
==================== 2 passed in 0.03 seconds ====================
測試成功的執行了! 但...我想看更詳細的訊息怎麼辦?
使用 pytest -v 或是 pytest --verbose 會得到以下結果~~~~
\pytest-demo> pytest -v
==================== test session starts ==================== platform win32 -- Python 3.6.2, pytest-5.0.1, py-1.8.0, pluggy-0.12.0 -- ..\programs\python\python36-32\python.exe
cachedir: .pytest_cache
rootdir: ..\pytest-demo
collected 2 items
tests/test_module.py::test_get_true_func PASSED [ 50%] tests/test_module.py::test_get_false_func PASSED [100%]
==================== 2 passed in 0.03 seconds ====================
太神啦! 簡單快速地完成了! 
但我們更改一下 get_true() 的回傳值為 False 來產生測試失敗的狀況:
\pytest-demo> pytest -v
==================== test session starts ====================
platform win32 -- Python 3.6.2, pytest-5.0.1, py-1.8.0, pluggy-0.12.0 -- ..\programs\python\python36-32\python.exe
cachedir: .pytest_cache
rootdir: ..\pytest-demo
collected 2 items
tests/test_module.py::test_get_true_func FAILED [ 50%] tests/test_module.py::test_get_false_func PASSED [100%]
==================== FAILURES ==================== ____________________________________________________________ test_get_true_func _____________________________________________________________
def test_get_true_func():
> assert Module.get_true() is True
E assert False is True
E + where False = <function Module.get_true at 0x036A0930>()
E + where <function Module.get_true at 0x036A0930> = Module.get_true
tests\test_module.py:5: AssertionError
==================== 1 failed, 1 passed in 0.07 seconds ====================
在 Windows PowerShell Console 下會有顏色可以很簡單的區分 PASS or FAIL

參考資料:

即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
3會員
9內容數
Drunk Wis
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Wis Vocus 的其他內容
Software QA Engineer 成長紀錄與面試經驗分享 個人背景 面試經驗 1. 一動數據 Quadas - Sr. Software Engineer (Automation Test) 結果: 感謝函 結果: 婉拒 3. 紅點子科技 Voice Tube - 自動化軟體測試工程師
Software QA Engineer 成長紀錄與面試經驗分享 個人背景 面試經驗 1. 一動數據 Quadas - Sr. Software Engineer (Automation Test) 結果: 感謝函 結果: 婉拒 3. 紅點子科技 Voice Tube - 自動化軟體測試工程師
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
從Python 3.6開始,可以使用f-Strings這個新的方法來做字串的格式化。f-Strings 也稱為“格式化的字串文字”,是一種字串文字,其開頭是 f,後面是大括號,其中包含將被替換為其值的表示式。這些表示式在執行時被評估,然後使用 "format" 協議進行格式化 例如
示範如何用 python,找出台股星期幾最容易上漲,只要按分享的程式碼就能輕易計算, 另外,也可以把加權指數的收盤資料更換成其他個股的收盤資料, 就能算出該個股星期幾最容易上漲了,有機會再分享。  把漲跌次數換成累計報酬率之後,其實不管是星期幾都沒有明顯容易上漲或下跌, 跟單純只看機率的結果不一樣,
Thumbnail
3分鐘學會用python計算加權指數報酬率,並且用pandas 進行條件篩選 濾掉金融海嘯時期,並篩選出漲跌幅大於1%的日期 https://youtu.be/EMfclSESgBo
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
從Python 3.6開始,可以使用f-Strings這個新的方法來做字串的格式化。f-Strings 也稱為“格式化的字串文字”,是一種字串文字,其開頭是 f,後面是大括號,其中包含將被替換為其值的表示式。這些表示式在執行時被評估,然後使用 "format" 協議進行格式化 例如
示範如何用 python,找出台股星期幾最容易上漲,只要按分享的程式碼就能輕易計算, 另外,也可以把加權指數的收盤資料更換成其他個股的收盤資料, 就能算出該個股星期幾最容易上漲了,有機會再分享。  把漲跌次數換成累計報酬率之後,其實不管是星期幾都沒有明顯容易上漲或下跌, 跟單純只看機率的結果不一樣,
Thumbnail
3分鐘學會用python計算加權指數報酬率,並且用pandas 進行條件篩選 濾掉金融海嘯時期,並篩選出漲跌幅大於1%的日期 https://youtu.be/EMfclSESgBo