python实现接口自动化_python 实现接口自动化1

#coding="utf-8"

importxlrdfrom xlutils.copy importcopyimportrequestsfrom util.log importloggerfrom util.db_util importDBUtil#xlrd:读取Excel文件数据#xlwt:写入Excel 数据,缺点是无法复用,写入会全部覆盖,无法追加数据,为了方便用户,写入的话,比较推荐xlutils模块,它可以复制原excel#formatting_info=True,保留Excel的原格式,这样xlutils写入后格式不变#xlrd模块0.8版本后不支持以xlsx为后缀名文件,所以excel要用xls格式,不能会打不开

if __name__ == '__main__':

db=DBUtil()

db.get_con()

dir_path=r'E:\PyCharmWorkSpace\AutoInterfaceTest\testFile\test_interface005.xls'run_sheet_name="用例"summary_sheet_name="总结"

#统计成功数,失败数

all_cases =0

statistics_success=0

statistics_fail=0#前置标志

pre_flag =Falsetry:#目录加r可以取消转义,不加r的话\改为\\即可

workbook=xlrd.open_workbook(dir_path,formatting_info=True)exceptFileNotFoundError:print ("File is not found.") #文件不存在

exceptPermissionError:print ( "You don't have permission to access this file.") #文件存在无权限访问,例如文件被打开时无法写入

else:

table= workbook.sheet_by_name(run_sheet_name) #根据sheet名字获取sheet

new_workbook= copy(workbook) #复制文件,这样将结果写入excel

writeSheet = new_workbook.get_sheet(run_sheet_name) #获取写入用例sheet

writeSheet_summary=new_workbook.get_sheet(summary_sheet_name)#获取写入总结sheet

for i in range(1, table.nrows):

request_method= table.cell(i, 2).value

url= table.cell(i, 3).value

params= table.cell(i, 4).value

expected_results=table.cell(i,5).value

db_operations= table.cell(i, 9).value

sql= table.cell(i, 10).value

pre_request_method=table.cell(i, 12).value

pre_url= table.cell(i, 13).value

pre_params= table.cell(i, 14).valueif( request_method!="" and url!="" and params!="" and expected_results!=""):

logger.info("********************************************************************************************************************")

all_cases+=1

if(pre_request_method!="" and pre_url!=""and pre_params!=""):

logger.info("第" + str(i) + "个用例前置请求 url:" + pre_url + "请求参数:" +pre_params)if (pre_request_method == "get"):try:

res= requests.get(url=pre_url, params=pre_params)exceptException as result:

logger.info("第" + str(i) + "个用例前置请求异常:" +str(result))else:

logger.info("第" + str(i) + "个用例前置请求结果:" +res.text)

res_json= res.json() #将返回参数转为json串,取某字段值,result_json[父元素1][子元素2]

pre_response_token = res_json["data"]["token"]

headers= {'Authorization-Qkids': pre_response_token}

pre_flag=Trueelif (pre_request_method == "post"):try:

res= requests.post(url=pre_url, data=pre_params.encode())exceptException as result:

logger.info("第" + str(i) + "个用例前置请求异常:" +str(result))else:

logger.info("第" + str(i) + "个用例前置请求结果:" +res.text)

res_json= res.json() #将返回参数转为json串,取某字段值,result_json[父元素1][子元素2]

pre_response_token = res_json["data"]["token"]

headers= {'Authorization-Qkids':pre_response_token}

pre_flag=True

logger.info(pre_response_token)else:

logger.info("前置请求方式格式不正确")

headers= {'Authorization-Qkids': pre_response_token}elif(pre_request_method=="" and pre_url==""and pre_params==""):#不做任何操作

pass

else:

logger.info("第" + str(i) + "个用例:前置请求方式/前置url/前置请求参数未填")#前置请求就算报错,第二个请求也会有相应错误提示,所以下面这段代码不用放到前置后面,同级即可

logger.info("第" + str(i) + "个用例请求 url:" + url + "请求参数:" +params)if (request_method == "get"):try:if(pre_flag==True):

res= requests.get(url=url, params=params,headers=headers)else:

res= requests.get(url=url, params=params)exceptException as result:

statistics_fail+= 1logger.info("第" + str(i) + "个用例异常:" +str(result))

writeSheet.write(i,8, "N")else:

logger.info("第" + str(i) + "个用例结果:" +res.text)

writeSheet.write(i,6, res.text) #写入整个返回结果

res_json = res.json() #将返回参数转为json串,取某字段值,result_json[父元素1][子元素2]

response_message = res_json["message"]

writeSheet.write(i,7, response_message) #写入返回的message

if (expected_results ==response_message):

logger.info("结果比对:Y")

writeSheet.write(i,8, "Y")

statistics_success+= 1

else:

logger.info("结果比对:N")

writeSheet.write(i,8, "N")

statistics_fail+= 1

elif (request_method == "post"):try:if(pre_flag==True):#假如请求body里面有汉字,需对data进行encode(),仅用于post请求

res = requests.post(url=url, data=params.encode(),headers=headers)else:

res= requests.post(url=url, data=params.encode())exceptException as result:

statistics_fail+= 1logger.info("第" + str(i) + "个用例异常:" +str(result))

writeSheet.write(i,8, "N")else:

logger.info("第" + str(i) + "个用例结果:" +res.text)

writeSheet.write(i,6, res.text) #写入

res_json = res.json() #将返回参数转为json串,取某字段值方式:result_json[父元素1][子元素2],例如res_json[data][name]

response_message = res_json["message"]

writeSheet.write(i,7, response_message)if (expected_results == response_message): #比对预期结果与返回结果

logger.info("结果比对:Y")

writeSheet.write(i,8, "Y")

statistics_success+= 1

else:

logger.info("结果比对:N")

writeSheet.write(i,8, "N")

statistics_fail+= 1

else:

logger.info("请求方式格式不正确")if (db_operations != "" and sql != ""):if (db_operations in (1, 2, 3, 4)):

db_result=db.other_data(db_operations, sql)

writeSheet.write(i,11, db_result)else:

logger.info("数据库操作填写不符合规则")elif (db_operations == "" and sql == ""):pass

else:

logger.info("数据库操作/数据库sql未填")elif (request_method == "" and url == "" and params == "" and expected_results == ""):#不做任何操作

pass

else:

logger.info("第" + str(i) + "个用例:请求方式/url/请求参数/期望结果未填")#%转义方式:%%,其他使用\

logger.info("---------------------------------------------------------------------------------------------------------------------------------------------")

summary_str="总的请求用例数%d, 已通过%d,不通过%d, 通过比例%.2f%%"%(all_cases,statistics_success,statistics_fail,(statistics_success/all_cases)*100)

logger.info(summary_str)

logger.info("---------------------------------------------------------------------------------------------------------------------------------------------")

writeSheet_summary.write(0,1,summary_str)

new_workbook.save(dir_path)#最后将写的保存

db.close_database()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值