使用parametrize之前:
def add(x,y):return x+y
class TestAddFunction(object):def test01(self):res=add(2,4)assert 6==resdef test02(self):res=add(4,6)assert 10==res
parametrize参数化之后:
import pytest
def add(x,y):return x+ydata=[(10,20,30),(200,300,600)]class TestAddFunction(object):@pytest.mark.parametrize("x,y,expect",data) def test_add(self,x,y,expect):#通用测试方法res=add(x,y) #调用待测函数assert expect==res #断言预期结果是否正确
参数化:@pytest.mark.parametrize(“a,b,expect”,[(),()…])
参数2必须要求是[(),()…]格式
数据来源于json文件的话,需要对其进行处理
封装一个函数,对json进行处理:
def read_json_data():with open("add_data.json","r",encoding="utf8") as f:json_data=json.load(f)data_list=[]# print(json_data)for data in json_data:val=data.values()tmp=tuple(val)data_list.append(tmp)print(data_list)
将文件名作为一个参数,传入进去:
def read_json_data(file_name):with open(file_name,"r",encoding="utf8") as f:。。。。。
if __name__ == '__main__':# read_json_data()res_list=read_json_data("add_data.json")print(res_list)
后续需要增加测试数据的时候,只需要在json文件中添加更多数据,代码不需要修改。
参数化步骤:
1.将 测试数据 ,按照[{},{}…]形式,组织到json文件中;
2.读取json文件,将数据转为[(),()…]格式
3.在通用测试方法的上一行,添加装饰器@pytest.mark.parametrize()
4.传参。 参1:字符串类型,内容为json文件中一组数据的key。参2:[(),()…]格式的数据。
5.给通用测试方法传入形参(与参1字符串内容一致)。