前言:
隨著專案越寫越大, 我們不可能時常有美國時間做人體debug, 所以Unit Test 的必要性也日益增加, 以下是簡單的介紹, 如何使用python 做單元測試
假設我有一隻 db_helper.py 負責與資料庫溝通,
為了方便說明, 程式碼簡化如下
def get_user_data():
return 'andy lai'
Step 1.下載 pytest 模組
$ pip install pytest
Step 2. 建立測試腳本 test_mypython.py
此時的工作目錄下有以下這些檔案
db_helper.py
test_mypython.py
注意: pytest 會去掃資料夾下 test_ 開頭的所有 python 腳本執行測試, 所以任何測試腳本務必前置 test
Step 3. 撰寫測試程式
我們預期呼叫db_helper.get_user_data()之後會得到 'andy lai'
import db_helper
def test_verify_get_user_data():
expect = 'andy lai'
result = db_helper.get_user_data()
assert expect == result
Step 4. 開始測試
在你的工作目錄下執行pytest
$ python -m pytest
這個指令的作用等於是, 將目前的工作目錄下所有檔案都掃一遍, 名稱含有test的檔案就會被執行測試
結果:
加入中斷點除錯
單元測試的過程中有辦法加入中斷點除錯嗎?
答案是"可以"
程式需修改如下
import db_helper
def test_verify_get_user_data():
expect = 'andy lai'
result = db_helper.get_user_data()
assert expect == result
if __name__ == '__main__':
import pytest
pytest.main()
指定測試函式
如果有很多個測項不想全部都測,
比如有
def test_verify_get_user_data()
def test_verify_update_data()
但只想測試 test_verify_update_data
這時可以使用pytest 提供的裝飾器去修飾你的測試函式
@pytest.mark.名子
import db_helper
import pytest
@pytest.mark.get
@pytest.mark.get
def test_verify_get_user_data():
expect = 'andy lai'
result = db_helper.get_user_data()
assert expect == result
@pytest.mark.update
def test_verify_update_data():
expect = 'successed'
result = db_helper.update_data()
assert expect == result
if __name__ == '__main__':
import pytest
pytest.main()
最後啟動pytest時, 加上 -m 的參數
python -m pytest -m update
而pytest 就會知道此次的測試, 只要跑修飾字有@pytest.mark.update的測項
指定測試檔案
若工作目錄裡有多個測試檔案, 但是只想執行其中一個時候, 就可以使用以下指令
python -m pytest -v .\test.py
當然這個也可以跟之前介紹的指令混著用
python -m pytest -m update -v .\test.py
等於是執行test.py裡面標註 update的函式
留言
張貼留言