使用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字符串內容一致)。