在 Pytest測試框架(三):pytest fixture 用法 中介紹了pytest.fixture()可以參數化fixture函數,@pytest.mark.parametrize 可以為測試方法或者測試類定義多組變量。本文將分享使用@pytest.mark.parametrize 實現參數化用例。
使用方法
@pytest.mark.parametrize(argnames, argvalues)
-
argnames:參數化變量名,可以是string(逗號分割) 、list 和 tuple類型
- @pytest.mark.parametrize("a, b", [(1,2),(3,4)])
- @pytest.mark.parametrize(["a","b"], [(1,2),(3, 4)])
- @pytest.mark.parametrize(("a", "b"), [(1,2),(3,4)])
-
argvalues:參數化的值
參數化實例1
import pytest
class Test_Demo():
@pytest.mark.parametrize("a, b, result", [(1, 1, 2), (2, 8, 10)])
def test_case1(self, a, b, result):
print("\n開始執行測試用例1")
assert a + b == result
結果:
PASSED [ 50%]
開始執行測試用例1
PASSED [100%]
開始執行測試用例1
參數化實例2
import pytest
data = [(1, 1, 2),
(2, 8, 10),
(99, 1, 100)
]
class Test_Demo():
@pytest.mark.parametrize("a, b, result", data)
def test_case1(self, a, b, result):
print("\n開始執行測試用例1")
assert a + b == result
if __name__ == '__main__':
pytest.main()
結果:
PASSED [ 33%]
開始執行測試用例1
PASSED [ 66%]
開始執行測試用例1
PASSED [100%]
開始執行測試用例1
參數化實例3
data.yaml文件內容:
-
- 1
- 1
- 2
-
- 2
- 8
- 10
-
- 99
- 1
- 100
import pytest
import yaml
class Test_Demo():
@pytest.mark.parametrize(["a","b","result"],yaml.safe_load(open("./data.yaml")))
def test_case1(self, a, b, result):
print("\n開始執行測試用例1")
assert a + b == result
結果:
PASSED [ 33%]
開始執行測試用例1
PASSED [ 66%]
開始執行測試用例1
PASSED [100%]
開始執行測試用例1
數據驅動
數據驅動參數化的應用,數據量小的測試用例可以使用代碼的參數化來實現數據驅動,數據量大的情況下可以使用一種結構化的文件(例如csv、yaml、xml、db、 excel、json等)來存儲數據,然后在測試用例中讀取這些數據。
文章標題:Pytest測試框架(四):pytest 參數化用例
本文作者:hiyo
本文鏈接:https://www.cnblogs.com/hiyong/p/14163287.html
歡迎關注公眾號:「測試開發小記」及時接收最新技術文章!