@pytest.fixture有一個params參數,接受一個列表,列表中每個數據都可以作為用例的輸入。也就說有多少數據,就會形成多少用例。
如下面例子,就形成3條用例
test_parametrizing.py
1 import pytest 2 3 seq=["case1","case2","case3"] 4 5 6 @pytest.fixture(scope="module",params=seq) 7 def params(request): 8 return request.param 9 10 11 12 def test_params(params): 13 print(params) 14 assert "case" in params
執行命令:
pytest -rA test_parametrizing.py
執行結果:
正常情況params參數不能動態取值的,如果需要動態取值,可以采用在params的序列值中放入函數的方法解決
1 import uuid 2 import pytest 3 4 5 6 def duuid(): 7 return str(uuid.uuid4()) 8 9 duuids=[] 10 duuids.append(duuid()) 11 12 @pytest.fixture(scope="function", params=duuids) 13 def gparams(request): 14 p = request.param 15 return p 16 17 18 def guuid(): 19 def _uuid(): 20 return str(uuid.uuid4()) 21 return _uuid 22 23 @pytest.fixture(scope="function", params=[guuid()]) 24 def funcparam(request): 25 p = request.param 26 return p() 27 28 @pytest.fixture(scope="function", params=[guuid(), guuid()]) 29 def funcparams(request): 30 p = request.param 31 return p() 32 33 34 35 36 def test_params1(gparams): 37 print("test_params1:"+gparams) 38 #fb3dc70e-273f-4622-bedb-72b3967e9296 39 40 def test_params1_1(gparams): 41 print("test_params1_1:"+gparams) 42 #fb3dc70e-273f-4622-bedb-72b3967e9296 43 44 def test_params2(funcparam): 45 print("test_params2:"+funcparam) 46 #92bc5bf6-0dbe-44d0-b402-29f57971949e 47 48 def test_params2_2(funcparam): 49 print("test_params2:" + funcparam) 50 #2d42e226-47f1-47d5-9561-557ab2a1115e 51 52 def test_params3(funcparams): 53 print("test_params3:"+funcparams) 54 #05e9e475-fb6e-4a02-8f47-dd14bdea53f4 55 #520bd717-7d95-4281-94f7-d7ba45f88db1
在用例test_params2和test_params2_2的執行結果中可以看到,在scope為function的情況下,兩條用例獲取到不同的UUID值。