欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Python 参数化:使用参数化装饰器,解析列表、元组、字典和其他数据

最编程 2024-06-10 21:03:51
...

在pytest中,也可以使用参数化测试,即每组参数都独立执行一次测试。

使用的工具就是pytest.mark.parametrize(argnames,argvalues)。  注:argnames参数名称,argvalues参数值。

 1 """
 2 在pytest中,也可以使用参数化测试,即每组参数都独立执行一次测试
 3 使用的工具就是 pytest.mark.paramtrize(argnames,argvalues)
 4 例如:username,password
 5 1.用户名错误,密码正确
 6 2.用户名正确,密码错误
 7 3.用户名错误,密码错误
 8 4.用户名正确,密码正确
 9 这种情况下需要用参数化,只需要传参数
10 """
11 
12 import pytest
13 #列表
14 
15 data = ['123','456']
16 @pytest.mark.parametrize('pwd',data)     #argnames参数名称需要和方法里面的名称做对应,data指的是参数值。argnames可以传多个参数,以逗号来分割。
17 def test1(pwd):
18     print(pwd)
19 
20 #元祖
21 data2 = [(1,2,3,),
22          (4,5,6)
23 ]
24 @pytest.mark.parametrize('a,b,c',data2 )
25 def test2(a,b,c):
26     print(a,b,c)
27 
28 #字典
29 data3 = ({
30     'user':'wangfuyan',
31     'pwd':'123456'
32 },
33 {
34     'age':2,
35     'email':'tom@qq.com'
36 })
37 @pytest.mark.parametrize('dic',data3)
38 def test3(dic):
39     print(dic)
40 
41 data_1 = [
42     pytest.param(1,2,3,id="(a+b):pass"),   #id的值可以自定义,只要方便理解每个用例是干什么的即可
43     pytest.param(4,5,10,id="(a+b:fail")
44 ]
45 def add(a,b):
46     return a+b
47 class TestParametrize(object):
48     @pytest.mark.parametrize('a,b,expect',data_1 )
49     def test_parametrize_1(self,a,b,expect):
50         assert add(a,b) == expect

 

 1 import pytest
 2 import math
 3 
 4 #pytest参数化
 5 @pytest.mark.parametrize(
 6     "base,exponent,expeceted",          #base,exponent,expected用于定义参数的名称
 7     [(2,2,4),
 8      (2,3,8),
 9      (1,9,1),
10      (0,9,0)],
11      ids = ["case1","case2","case3","case4"]        #ids参数默认为None,用于定义测试用例的名称
12 )
13 def test_pow(base,exponent,expeceted):
14     assert math.pow(base,exponent) == expeceted     #math模块的pow()方法用于计算x的y次方的值

 

推荐阅读