在 pytest
中,參數化(parametrization)是一種強大的功能,可以讓你用不同的輸入數據重復執行同一個測試函數。這種功能非常有用,可以幫助你顯著減少重復代碼并提高測試覆蓋率。
參數化的主要作用是:
- 測試多種輸入數據:確保函數對各種輸入表現正確。
- 減少重復代碼:一個測試函數可以用多種不同的輸入進行測試,而不需要多次編寫。
- 提高測試覆蓋率:通過不同的輸入組合,能夠更全面地測試功能。
實現參數化的基本方法
pytest
提供了@pytest.mark.parametrize
裝飾器來實現測試參數化。下面是如何使用它的一個示例:
import pytest# 假設有一個簡單的函數,用于計算兩個數字的和
def add(a, b):return a + b# 使用 @pytest.mark.parametrize 進行參數化測試
@pytest.mark.parametrize("a, b, expected", [(1, 2, 3), # 測試數據1(10, 20, 30), # 測試數據2(-1, 1, 0), # 測試數據3(0, 0, 0) # 測試數據4
])
def test_add(a, b, expected):assert add(a, b) == expected
參數化裝飾器解析
@pytest.mark.parametrize
接受兩個參數:argnames
: 參數名列表(字符串)。可以是逗號分隔的字符串如"a, b, expected"
或列表["a", "b", "expected"]
。argvalues
: 參數值列表(元組)。每個元組對應一次測試調用的數據組合。
在上述示例中,@pytest.mark.parametrize
裝飾器會讓 test_add
運行四次,每次傳入一組不同的 (a, b, expected)
值。
復雜參數化示例
參數化不僅僅適用于基本數據類型,還可以與復雜的數據結構結合使用,如字典、列表等。
@pytest.mark.parametrize("input_data, expected", [({"a": 1, "b": 2}, 3),({"a": 10, "b": 20}, 30),
])
def test_add_dict(input_data, expected):assert add(input_data["a"], input_data["b"]) == expected
參數化的優勢
- 更簡單的測試管理:通過參數化減少測試代碼行數,更易于維護。
- 可讀性:參數化清晰展示輸入和期望結果列表,方便理解測試意圖。
- 高效測試:可以一次性運行多個輸入組合,提高測試效率。
通過使用 pytest 的參數化功能,你可以簡化你的測試代碼并確保你的函數在不同輸入下能夠正確執行。
下篇文章入口:
4、pytest常用插件-CSDN博客