一、作用
将测试数据参数化,单独管理测试数据,实现数据和代码分离
二、格式
@pytest.mark.parametrize('exp_data,data',[[a,b],[c,d],[e,f]...]),作用是声明下面的方法要做参数化,下面的函数在参数列表需要将上面的exp_data和data放进去,后面数据外面里面有元组列表都行
@pytest.mark.parametrize('exp_data,data',[[1,2],[1,1],[2,3]])
def test_pa(exp_data,data):
assert exp_data == data
# 没有写循环,实际上是在循环运行的,是框架实现的,测试方法只有一个,但一共会运行三次,是三条用例
三、参数化在项目里应用
上述后面的列表数据可以写在yaml文件里,通过一个通用读取yaml方法工具读取yaml文件并返回特定结构用例数据,在参数化处数据写上函数名即可
yaml语法见:yaml语法学习笔记
# get_yaml_data.py
def get_yaml_case(file_path):
file_path = BASE_DIR + '/data/' + file_path
res = get_yaml_data(file_path)
case_list = []
for item in res:
dict_values = item.values()
case_list.append(tuple(dict_values))
用例login_data.yml
![](https://img-blog.csdnimg.cn/img_convert/b264789148cf414290f1c7d04346e5f4.png)
# 测试脚本test_login.py
class TestLogin(BaseAssert):
@allure.title('{title}')
@pytest.mark.parametrize('title,req_body,code', get_yaml_case('login_data.yml'))
def test_login(self,title,req_body,code):
resp_data = Login().login(req_body)
self.assert_common(resp_data.get('code'),code)