import requests, json
from logger import logger
class SwaggerUI:#swagger-ui解析类
def apiBaseInfoGet(self, swaggerAddress):#基础信息获取,host及operationId
swaggerHost, operationId = '', ''
swaggerAddr_list = str(swaggerAddress).split('/swagger-ui.html')
swaggerHost = swaggerAddr_list[0]
if swaggerAddr_list[1].replace('#/', ''):
operationId = swaggerAddr_list[1].split('/')[len(swaggerAddr_list[1].split('/'))-1]
requestType = operationId.split('Using')[1]
logger.info("接口地址URL及operationId为:%s,%s" %(swaggerHost, operationId))
return swaggerHost, operationId
def swaggerJsonGet(self, swaggerHost):#通过swagger API获取所有swagger接口
response = requests.get(str(swaggerHost) + '/v2/api-docs')
response_dict = json.loads(response.text)
logger.info("swagger-ui所有接口信息:%s" %json.dumps(response_dict))
return response_dict
def requestTypeGet(self, swaggerJsonDict, operationId):#指定swagger-ui接口requestType获取
requestType = ""
try:
for key1, value1 in swaggerJsonDict.items():
if key1=='paths':
for key2, value2 in value1.items():
for key3, value3 in value2.items():
for key4, value4 in value3.items():
if key4=='operationId':
if value4==operationId:
requestType = key3
logger.info("%s接口请求类型%s" %(operationId,requestType))
break
break
break
except Exception as e:
logger.info(e)
return requestType
def apiInfoGet(self, swaggerJsonDict, requestType, operationId):#指定operationId的url及对应json获取
theApiJson = {}
url = ""
try:
for key1, value1 in swaggerJsonDict.items():
if key1=='paths':
for key2, value2 in value1.items():
for key3, value3 in value2.items():
if key3.lower()==requestType.lower():
for key4, value4 in value3.items():
if key4=='operationId':
if value4==operationId:
url = key2
print(url)
break
break
theApiJson = value1[url][requestType]
break
except Exception as e:
logger.info(e)
logger.info("%s接口的url及json:%s,%s" %(operationId, url, json.dumps(theApiJson)))
return url, theApiJson
def contentTypeGet(self, theApiJson):#指定接口的content-type获取
contentType = 'application/json'
try:
for key, value in theApiJson.items():
if key.lower() == 'consumes':
contentType = ''
for i in range(len(value)):
if i==0:
contentType+=value[0]
else:
contentType+=',' + value[i]
break
break
except Exception as e:
logger.info("swagger获取content-Type属性时异常 %s,属性可能不存在" %e)
logger.info("Content-Type:%s" %contentType)
return contentType
def headersGet(self, theApiJson):#指定接口的请求头获取
global headers
headers={}
try:
for key, value in theApiJson.items():
if key.lower() == 'parameters':
for i in range(len(value)):
isHeaderParameter = False
headerParameterName = ''
headerParameterType = ''
for parameterKey, parameterValue in value[i].items():
if parameterKey.lower()=='name':
headerParameterName = parameterValue
if parameterKey.lower()=='in' and parameterValue.lower()=='header':
isHeaderParameter = True
if parameterKey.lower()=='type':
headerParameterType = parameterValue
if isHeaderParameter==True:
headers[headerParameterName] = headerParameterType
break
except Exception as e:
logger.info("swagger获取content-Type属性时异常 %s,属性可能不存在" %e)
logger.info("Headers: %s" %json.dumps(headers))
if headers == {}:
headers = ''
return headers
def bodySchemaGet(self, theApiJson):#指定接口的bodySchema获取
global bodySchema
bodySchema={}
try:
for key, value in theApiJson.items():
if key.lower() == 'parameters':
for i in range(len(value)):
isBodyParameter = False
for parameterKey, parameterValue in value[i].items():
if parameterKey.lower()=='in' and parameterValue.lower()=='body':
isBodyParameter = True
if isBodyParameter and parameterKey.lower()=='schema':
bodySchema = parameterValue
break
break
except Exception as e:
logger.info("swagger获取bodySchema属性时异常 %s,属性可能不存在" %e)
logger.info("bodySchema:%s" %json.dumps(bodySchema))
if bodySchema=={}:
return False, bodySchema
else:
return True, bodySchema
def queryBodyGet(self, theApiJson):#获取指定接口的queryBody
global body
body={}
try:
for key, value in theApiJson.items():
if key.lower() == 'parameters':
for i in range(len(value)):
isQueryParameter = False
queryParameterName = ''
queryParameterType = ''
for parameterKey, parameterValue in value[i].items():
if parameterKey.lower()=='name':
queryParameterName = parameterValue
if parameterKey.lower()=='in' and parameterValue.lower()=='query':
isQueryParameter = True
if parameterKey.lower()=='type':
queryParameterType = parameterValue
if isQueryParameter==True:
body[queryParameterName] = queryParameterType
break
except Exception as e:
logger.info("swagger获取接口body属性时异常 %s,属性可能不存在" %e)
logger.info("Body:%s" %json.dumps(body))
if body == {}:
body = ''
return body
def bodyGet(self, swaggerJsonDict, bodySchema):#指定接口的body获取
body={}
try:
bodySchemaArray = bodySchema['$ref'].split('/')
bodyProperty_dict = swaggerJsonDict[bodySchemaArray[1]][bodySchemaArray[2]]['properties']
print(bodyProperty_dict)
for key, value in bodyProperty_dict.items():
for key1, value1 in value.items():
if key1.lower()=='type':
body[key]=value1
break
logger.info("Body:%s" %json.dumps(body))
if body == {}:
body = ''
except Exception as e:
body = ''
logger.info(e)
return body
def urlRequestTypeOperationIdListGet(self, swaggerJsonDict):#获取swagger所有接口的基础信息
urlList = []
requestTypeList = []
operationIdList = []
try:
for key, value in swaggerJsonDict.items():
if key=='paths':
for key1, value1 in value.items():
print(key1)
urlList.append(key1)
for key2, value2 in value1.items():
print(key2)
requestTypeList.append(key2)
for key3, value3 in value2.items():
if key3=='operationId':
# print(value3)
operationIdList.append(value3)
except Exception as e:
logger.info(e)
logger.info("URL List:%s" %urlList)
logger.info("requestType List:%s" %requestTypeList)
logger.info("operationIdList List:%s" %operationIdList)
return urlList, requestTypeList, operationIdList
def headersBodyContentTypeListGet(self, swaggerJsonDict, requestTypeList, operationIdList):
#获取swagger所有接口的header,body及contentType信息
headersList = []
bodyList = []
contentTypeList = []
try:
for i in range(len(operationIdList)):
url, theApiJson = self.apiInfoGet(swaggerJsonDict, requestTypeList[i], operationIdList[i])
contentTypeList.append(self.contentTypeGet(theApiJson))
headersList.append(self.headersGet(theApiJson))
isBody, bodySchema = self.bodySchemaGet(theApiJson)
body = {}
if isBody:
body = self.bodyGet(swaggerJsonDict, bodySchema)
else:
body = self.queryBodyGet(theApiJson)
bodyList.append(body)
except Exception as e:
logger.info(e)
logger.info("Headers List:%s" %headersList)
logger.info("Body List:%s" %bodyList)
logger.info("ContentType List:%s" %contentTypeList)
return headersList, bodyList, contentTypeList
类引用:
swaggerui = SwaggerUI()
host, operationId = swaggerui.apiBaseInfoGet("http://host:port/swagger-ui.html#/app/saveUsingPOST")
swaggerJsonDict = swaggerui.swaggerJsonGet(host)
requestType = swaggerui.requestTypeGet(swaggerJsonDict, operationId)
urlList, requestTypeList, operationIdList = swaggerui.urlRequestTypeOperationIdListGet(swaggerJsonDict)
headersList, bodyList, contentTypeList = swaggerui.headersBodyContentTypeListGet(swaggerJsonDict, requestTypeList, operationIdList)