#!/usr/bin/env python
"""解析swagger接口返回值自动生成接口自动化用例
将新增的用例写入到文件末尾,已存在的用例则不重新写入"""
importrequestsimportjsonimportsysdef auto_create_robotcase(filename='robot.txt', url='http://test-customer-/v2/api-docs'):try:
f= open(filename, 'a+', encoding='utf-8')
f.seek(0, 0)
content=f.read()
f.write('\n')
f.write('\n')
f.write('\n')
r=requests.get(url)print(r.text)#将返回的文本转换成json格式,并取paths部分的值,因为这个部分包含了所有需要的信息
api_docs =json.loads(r.text)
paths= api_docs['paths']
definitions= api_docs['definitions']
k= 1
print(len(paths.items()))for i inpaths.items():print(i)
interface_api=i[0]if interface_api incontent:continueinterface_type= list(i[1].keys())[0]
mode_name= dict(list(i[1].values())[0])['tags'][0]
interface_name= dict(list(i[1].values())[0])['summary']print(str(mode_name) + "模块下第" + str(k) + "个接口为:" + str(interface_name) + "类型为:" +str(
interface_type)+ "URI:" +str(interface_api))
head=[]
data=[]if list(i[1].values())[0].__contains__('parameters'):
params= dict(list(i[1].values())[0])['parameters']for param inparams:
param_name= param['name']
param_position= param['in']
param_required= param['required']print("参数名:", param_name, "参数位置:", param_position, "必填否:", param_required)#有些参数没有描述字段,这里做个判断,有的时候取描述,没有赋空值
if param.get('description'):
param_description= param['description']else:
param_description= ''
ifparam_required:if param_position == 'header':
pa= param_name + "=" +param_description
head.append(pa)elif param_position == 'query':
pa= param_name + "=" +param_description
data.append(pa)elif param_position == 'body':
param_schema= param['schema']if param_schema.get('items'):
define_name= param_schema['items']['$ref'].split('/')[-1]else:
define_name= param_schema['$ref'].split('/')[-1]
data= definitions[define_name]['properties']
case_name= mode_name + "-" +interface_name
f.write(case_name+ '\n')
head_s= ""
for i inhead:
head_s= head_s + " " +str(i)ifhead_s:
create_head= '${headers} Create Dictionary Content-Type=${Content-Type} Accept=${Accept}' +head_selse:
create_head= '${headers} Create Dictionary Content-Type=${Content-Type} Accept=${Accept}'f.write(create_head+ '\n')
create_api= 'Create Session api ${host} ${headers}'f.write(create_api+ '\n')if str(data).startswith("{"):
create_data= '${data} Set Variable' +str(data)else:
data_s= ''
for i indata:
data_s= data_s + ' ' +str(i)
create_data= '${data} Create Dictionary' +data_s
create_params= '${params} Create Dictionary' +data_s
create_get_request= '${result} Get Request api' + interface_api + 'params=${params}'create_get_request_noparams= '${result} Get Request api' +interface_api
create_post_request= '${result} Post Request api' + interface_api + 'data=${data}'create_post_request_noparams= '${result} Post Request api' +interface_apiif interface_type == 'get':ifdata:
f.write(create_params+ '\n')
f.write(create_get_request+ '\n')else:
f.write(create_get_request_noparams+ '\n')else:ifdata:
f.write(create_data+ '\n')
f.write(create_post_request+ '\n')else:
f.write(create_post_request_noparams+ '\n')
create_response= '${response} Set Variable ${result.content}'create_response_to_json= '${response} To Json ${response}'create_assert_code= 'should be equal as integers ${response["code"]} 200'create_assert_msg= 'should be equal ${response["msg"]} 操作成功'f.write(create_response+ '\n')
f.write(create_response_to_json+ '\n')
f.write(create_assert_code+ '\n')
f.write(create_assert_msg+ '\n')
f.write('\n')
k= k + 1f.close()exceptException as e:raiseeif __name__ == "__main__":if len(sys.argv) == 1:
auto_create_robotcase()else:
auto_create_robotcase(sys.argv[1], sys.argv[2])