這篇是記錄我在看鐵人賽 Python 與自動化測試的敲門磚 的過程
透過設定 pytest.ini 即可讓我們進行一些簡單的客製化,讓 pytest 更符合我們的需求
預設指令
透過設定 pytest.ini 我們可以達到每次執行 pytest 時,會自動帶入指定的參數,例如:-s、-v …
於整個專案最外層建立 pytest.ini 檔案
編輯 pytest.ini
1 2 3 4
| [pytest]
addopts = --maxfail=1 -s -v
|
範例當中,我們設定了在使用 pytest 時會自動帶入 -s、-v 參數,並且設定當發生一次錯誤時就會停止測試
建立測試程式
1 2 3 4 5 6 7 8
| import pytest
argvalues = [[1, 1, 2], [2, 2, 5], [3, 3, 7], [4, 4, 8]]
@pytest.mark.parametrize(argnames='num1, num2, result', argvalues=argvalues) def test_add(num1: int, num2: int, result: int): assert num1 + num2 == result
|
範例當中,我們利用參數化的方式建立了四次測試
結果展示
正常來說應該會有四次的測試結果,下圖為沒有設定 pytest.ini 時的情況,pytest 就成功執行了四次測試並且其中兩次為錯誤
蒐集條件
pytest 預設會自動蒐集開頭為 test 的 function,當然這個部份我們也可以透過 pytest.ini 來進行設定
編輯 pytest.ini
1 2 3
| [pytest] python_functions = test_* example_*
|
建立測試程式
下方利用參數化的方式建立兩個測試函式,總共數量會是八個測試,並分別用 test_ 開頭以及 example_ 開頭
1 2 3 4 5 6 7 8 9 10 11 12 13
| import pytest
argvalues = [[1, 1, 2], [2, 2, 5], [3, 3, 7], [4, 4, 8]]
@pytest.mark.parametrize(argnames='num1, num2, result', argvalues=argvalues) def test_add(num1: int, num2: int, result: int): assert num1 + num2 == result
@pytest.mark.parametrize(argnames='num1, num2, result', argvalues=argvalues) def example_add(num1: int, num2: int, result: int): assert num1 + num2 == result
|
利用 pytest –co 觀察蒐集到的測試函式數量,可以看到成功蒐集到八個測試