軟件測試 | parametrize實(shí)現(xiàn)參數(shù)化
參數(shù)化用例
參數(shù)化用例可以幫我們更好的管理測試用例,將測試數(shù)據(jù)與測試用例分離,好的測試框架是允許對(duì)測試 用例實(shí)現(xiàn)參數(shù)化功能。尤其是接口自動(dòng)化測試,接口里有大量參數(shù),不同參數(shù)又有多種組合方式,參數(shù) 化在接口測試中起到非常重要的作用。
使用 parametrize 實(shí)現(xiàn)參數(shù)化
使用 @pytest.mark.paramtrize(data,param) 裝飾測試方法,其中 data 是自定義的參數(shù)名, param 是引入的參數(shù)列表。
@pytest.mark.parametrize("test_input,expected",[("3+5",8),("2+5",7),("7*5",35)])def test_eval(test_input,expected):
print(test_input, expected)
運(yùn)行結(jié)果:
...
PASSED [ 33%]3+5 8
PASSED [ 66%]2+5 7
PASSED [100%]7*5 35
...
整個(gè)執(zhí)行過程中,pytest 將參數(shù)列表 [("3+5",8),("2+5",7),("7*5",35)] 中的三組數(shù)據(jù)取出來,每 組數(shù)據(jù)生成一條測試用例。
多次使用 parametrize
同一個(gè)測試用例還可以同時(shí)添加多個(gè) @pytest.mark.parametrize 裝飾器, 多個(gè) parametrize 的所有 元素互相組合(類似笛卡兒乘積),生成大量測試用例。
場景:
比如登錄場景,用戶名輸入情況有 n 種,密碼的輸入情況有 m 種,驗(yàn)證所有情況的用戶名和密碼,就 會(huì)涉及到 n*m 種組合的測試用例,如果把這些數(shù)據(jù)一一的列出來,工作量也是非常大的。pytest 提供了 一種參數(shù)化的方式,將多組測試數(shù)據(jù)自動(dòng)組合,生成大量的測試用例。示例代碼如下:
@pytest.mark.parametrize("x",[1,2])@pytest.mark.parametrize("y",[8,10,11])def test_foo(x,y):
print(f"測試數(shù)據(jù)組合x: {x} , y:{y}")
運(yùn)行結(jié)果:
test_mark_paramize.py::test_foo[8-1]
test_mark_paramize.py::test_foo[8-2]
test_mark_paramize.py::test_foo[10-1]
test_mark_paramize.py::test_foo[10-2]
test_mark_paramize.py::test_foo[11-1]
test_mark_paramize.py::test_foo[11-2]
分析如上運(yùn)行結(jié)果,測試方法 test_foo( ) 添加了兩個(gè) @pytest.mark.parametrize() 裝飾器,兩個(gè)裝 飾器分別提供兩個(gè)參數(shù)值的列表, 2 * 3 = 6 種組合,pytest 便會(huì)生成 6 條測試用例。在測試中通常 使用這種方法使參數(shù)自由組合,可以實(shí)現(xiàn)全面的測試。