pytest fixture 利用 params参数实现用例集合

@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值。

posted @ 2019-08-14 14:48  月色深潭  阅读(2829)  评论(0编辑  收藏  举报