一、pytest是什麼
pytest是一個基於Python的測試框架,它可以輕鬆的創建單元測試、功能測試和集成測試。與其他Python測試框架相比,pytest具有簡潔易懂的測試設計風格、跨平台支持、插件機制支持和豐富的API和鉤子函數等優點。
在開始使用pytest之前,需要安裝pytest模塊。可以在終端中使用pip安裝:
pip install pytest
安裝成功後,就可以在項目目錄下創建測試文件開始測試了。
二、pytest的基礎用法
pytest最常用的兩個參數是-m和-k。其中-m參數用於選擇標記(mark)測試用例,-k參數用於根據表達式來選擇測試用例。
-m參數
在pytest中,可以為測試用例添加標記,以便於測試時選擇特定的測試用例。例如,可以為一組測試用例添加一個「slow」標記,表示測試用例運行較慢,需要更長的時間。可以使用-m參數來選擇標記(mark)的測試用例:
pytest -m <mark>
其中<mark>是標記的名稱,可以是一個字元串或多個字元串,多個字元串之間用「and」、「or」、「not」進行邏輯連接。例如,如果需要運行所有帶有「slow」標記的測試用例,可以執行如下命令:
pytest -m slow
如果需要運行所有帶有「slow」標記或帶有「gui」標記的測試用例,可以執行如下命令:
pytest -m "slow or gui"
-k參數
在pytest中,可以通過表達式來選擇特定的測試用例。例如,可以使用「test_login」來選擇所有名稱中包含「test_login」的測試用例。可以使用-k參數來根據表達式選取測試用例:
pytest -k <expression>
其中<expression>是一個表達式,用於選取測試用例。表達式可以包含測試用例名稱、測試用例文件名或標記等信息。例如,如果需要運行所有測試用例名稱中包含「login」的測試用例,可以執行如下命令:
pytest -k login
如果需要運行所有在tests文件夾下,名稱中包含「login」字元的測試用例,可以執行如下命令:
pytest -k "login and tests"
三、pytest的進階用法
pytest具有很多高級特性,如參數化、測試夾具、插件機制等。
參數化
參數化是pytest中非常強大和常用的特性之一,可以通過參數化來簡化測試用例和測試數據的編寫。在測試用例中使用pytest.mark.parametrize裝飾器來標記參數化的參數,然後在測試函數的參數列表中使用這些參數。例如:
import pytest
@pytest.mark.parametrize("arg1, arg2, expected", [
(1, 2, 3),
(2, 3, 5),
(10, 20, 30)
])
def test_addition(arg1, arg2, expected):
result = arg1 + arg2
assert result == expected
以上代碼可以傳入不同的參數,執行三次函數運算,檢測運算是否正確。
測試夾具
pytest支持各種類型的測試夾具,例如函數級別的夾具、模塊級別的夾具、會話級別的夾具、自定義夾具等。使用夾具可以優化測試結構、減少代碼冗餘、提升測試效率和可讀性。定義的夾具可以使用@pytest.fixture裝飾器標記,表示當前函數是一個夾具函數,使用夾具時在測試函數的參數列表中使用夾具名即可。例如:
import pytest
@pytest.fixture()
def text_data():
return 'pytest'
def test_demo(text_data):
assert text_data == 'pytest'
以上代碼利用fixture返回的數據,測試text_data是否等於’pytest’,從而達到測試夾具的目的。
插件機制
pytest具有豐富的插件機制,支持各種類型的插件,如測試夾具、收集器、HTML測試報告、Junit測試報告、測試覆蓋率等。可以在pytest.ini配置文件中指定插件,也可以在命令行中通過–install-plugin選項安裝插件。例如,如果需要安裝pytest-html插件,可以執行如下命令:
pip install pytest-html
安裝成功後,在命令行中執行如下命令,可以生成HTML格式的測試報告:
pytest --html=report.html
四、pytest的實戰案例
以下是一個簡單的pytest測試代碼,用於測試一個計算器程序:
import pytest
import calculator
def test_addition():
c = calculator.Calculator()
result = c.add(1, 2)
assert result == 3
def test_subtraction():
c = calculator.Calculator()
result = c.subtract(2, 1)
assert result == 1
@pytest.mark.parametrize("arg1, arg2, expected", [
(1, 2, 3),
(2, 3, 5),
(10, 20, 30)
])
def test_addition_with_parameters(arg1, arg2, expected):
c = calculator.Calculator()
result = c.add(arg1, arg2)
assert result == expected
@pytest.fixture()
def test_data():
data = {
'arg1': 1,
'arg2': 2,
'expected': 3
}
return data
def test_addition_with_fixture(test_data):
c = calculator.Calculator()
result = c.add(test_data['arg1'], test_data['arg2'])
assert result == test_data['expected']
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/306288.html