目的:解析Json格式的接口參數(shù)
用途:用于接口自動化測試认境,避免手工錄入接口參數(shù)
遞歸.png
1
Json格式的接口參數(shù)會有多種形式:數(shù)組叉信、對象、數(shù)組和對象組合模式硅急。
數(shù)組的實現(xiàn)方式:
[
{"id" : 1 ,"name" : "zhangsan"},
{"id" : 2 , "name" : "lisi"}
]
對象的實現(xiàn)方式:
{
"meta":{
"name":"南方有喬木",
"cpCode":"mgtv",
"genre":"happy"
}
}
2
將json的參數(shù)解析出來并存入?yún)?shù)對象列表中佳遂。
def parseParamJson(suite_id):
suite = TestSuite.objects.get(id=suite_id)
paramList = json.loads(suite.json)
newparams = []
parentNodeName = ''
parentNodeType = ''
param = None
typeName = None
parseParam(paramList,parentNodeName,parentNodeType,typeName,param,newparams)
for param in newparams:
print("Param name :" + param.name)
print("Param type :" + str(param.type))
print("Param parentNodeName :" + param.parentNodeName)
print("Param parentNodeType :" + param.parentNodeType)
print("-------------------------------")
def parseParam(paramList,parentNodeName,parentNodeType,typeName,paramName,newparams):
if not paramName is None :
if type(paramName) != dict:
parentNodeName = parentNodeName + '#' + paramName
else:
parentNodeName = parentNodeName + '#' + 'DefaultNodeTest'
if not typeName is None:
parentNodeType = parentNodeType + '#' + typeName
if type(paramList) == list:
for paramName in paramList:
typeName = 'list'
parseParam(paramName, parentNodeName, parentNodeType, typeName,paramName,newparams)
break
elif type(paramList) == dict:
for paramName in paramList:
typeName = 'dict'
paramValue = paramList[paramName]
parseParam(paramValue, parentNodeName, parentNodeType,typeName, paramName,newparams)
else:
param = TestSuiteParam()
param.name = paramName
param.type = type(paramList)
param.parentNodeName = parentNodeName
param.parentNodeType = parentNodeType
newparams.append(param)
3
驗證數(shù)組
Param name :id
Param type :<class 'int'>
Param parentNodeName :#DefaultNodeTest#id
Param parentNodeType :#list#dict
-------------------------------
Param name :name
Param type :<class 'str'>
Param parentNodeName :#DefaultNodeTest#name
Param parentNodeType :#list#dict
-------------------------------
驗證對象
Param name :name
Param type :<class 'str'>
Param parentNodeName :#meta#name
Param parentNodeType :#dict#dict
-------------------------------
Param name :cpCode
Param type :<class 'str'>
Param parentNodeName :#meta#cpCode
Param parentNodeType :#dict#dict
-------------------------------
Param name :genre
Param type :<class 'str'>
Param parentNodeName :#meta#genre
Param parentNodeType :#dict#dict
-------------------------------