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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据计算存储资源池_管家实践:轻松玩转大数据计算服务

以下是直播内容精华整理,主要包括以下四个方面:1.背景速览;2.功能介绍;3.案例讲解;4.新功能预告。一、背景速览MaxCompute(原ODPS)是一项大数据计算服务,它能提供快速、完全托管的PB级数据仓库解决方案&…

客如云数据中台建设

简介: 本次分享介绍客如云如何利用阿里云大数据产品来建设数据中台。 客如云是2012年成立的一家公司,覆盖餐饮、零售、美业,还有其他的业态以及服务的一家综合性的SaaS公司。到2020年为止,客如云已经服务了60万商家,帮…

微博机器学习平台云上最佳实践

简介: 本文讲述了微博机器学习平台和深度学习平台的业务功能和云上实践,剖析了阿里云大数据在微博这两大学习平台的架构建设上所起到的作用。 作者:新浪微博数据计算平台系统架构师 曹富强 本文讲述了微博机器学习平台和深度学习平台的业务功…

搞懂异地多活,看这篇就够了

来源:水滴与银弹作者:Kaito阅读本文大约需要 20 分钟。你好,我是 Kaito。在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理。异地多活到底是什么&…

python项目部署访问特别卡_【python新人求助】flask+pymssql 通过wsgi发布到Apache,访问接口服务器卡死?...

前端发起http请求 /getData ,项目就卡死index.py 代码如下:from flask import Flask,render_template,requestimport jsonimport pymssqlimport urllib.parseimport sysapp Flask(__name__)app.route(/)def index():return render_template(index.html)app.route(/…

mysql 闪回_MySQL数据误删除的快速解决方法(MySQL闪回工具)

概述Binlog2sql是一个Python开发开源的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binlog解析为回滚的SQL,去除主键的INSERT SQL,是DBA和运维人员数据恢复好帮手。一、安装配置1.1 用途数据快速回滚(闪回)主从切换…

搭建一个微服务商城到底可以有多快?

简介: 极速部署一个微服务电商商城,体验 Serverless 带给您的应用全托管体验。 作者:云原生技术运营 - 望宸 技术实践的门槛不仅在于应用上线后各类问题的排查难度,也在于搭建一个 Demo 应用时的复杂度。 今天我们尝试 3 种方法来…

分享2种规划思维和4个规划方法

简介: 为结果买单,为过程鼓掌。 作者:不拔 每年各个部门都要进行规划,规划能让目标更聚焦,让我们清晰地知道今后我们要做什么、如何去做。并非每个人都会参与规划中去,但需要掌握规划的方法,否…

apache 统计404日志_Apache监控与调优(四)Apachetop监控

除了使用status监控外,还可以使用第三方软件来监控。现在使用的最多的第三方监控软件是apachetop。虽然我们使用status也可以监控到很多信息,但是对于一些统计信息来说,例如统计哪些URL的访问量最大,不同状态码下分别有多少个HTTP…

mysql or_MySQL中or语句用法示例

1.mysql中or语法的使用,在mysql语法中or使用注意点。 项目遇到坑,遍历发放奖励数据查询错误!!!$sql SELECT*FROMvvt_spread_doubleegg_exchange_award AS pWHEREp.act_type 4 or p.act_type 5ANDp.user_id .$user…

揭秘 | 2021年移动云API大赛决赛大奖花落谁家?

10月21日,2021年移动云API应用创新开发大赛决赛暨移动云开发者论坛,在苏州圆满举办。现场,移动云开发者社区重磅发布首批MVP名单,同时公布2021年API创新开发大赛决赛获奖名单。中国移动、英特尔、CSDN、PingCAP、各参赛团队等技术…

冷热分离之OTS表格存储实战

简介: 为什么要冷热分离由于2020疫情的原因,在线教育行业提前被大家所重视,钉钉教育已经服务超过21万所学校、700万教师和1.4亿学生用户,每天大量的教育数据产生。整体数据量:随着时间的积累,数据量越来直大…

世界地图可以无限放大_不敢相信!世界地图,你竟然骗了我这么多年...

本文转载自微信公众号:中国国家地理(ID:dili360)原文首发于2018年10月13日,标题为《世界地图,我竟然被你骗了这么多年!》不代表FM93交通之声观点。都说眼见为实,其实眼见到的也不一定为实相信你们很多人都以为世界就像…

WebAssembly + Dapr = 下一代云原生运行时?

简介: 云计算已经成为了支撑数字经济发展的关键基础设施。云计算基础设施也在持续进化,从 IaaS,到容器即服务(CaaS),再到 Serverless 容器和函数 PaaS (fPaaS 或者 FaaS),新的计算形态相继出现。…

Service Mesh 开源实现之 Istio 架构概览

来源:无敌码农作者:无敌码农今天的文章将从更宏观的概念和架构入手,来全面介绍Istio这一最著名的服务网格开源解决方案,以求从整体上将Istio实现服务网格的核心原理阐述清楚!Istio中的关键概念要学习Istio需要先明确以…

mysql外键约束分数_MySQL提高(外键约束)

外键约束1.条件语句的写法在sql中可以通过where 条件语句 来对操作对象进行筛选 -筛选a.比较运算符&#xff1a;&#xff0c;<>,,<,>注意&#xff1a;判断一个字段的值是否为空不用使用和<>&#xff0c;而是使用is null和is not nullselect number from t_co…

Java Map中那些巧妙的设计

简介&#xff1a; 他山之石可以攻玉&#xff0c;这些巧妙的设计思想非常有借鉴价值&#xff0c;可谓是最佳实践。然而&#xff0c;大多数有关Java Map原理的科普类文章都是专注于“点”&#xff0c;并没有连成“线”&#xff0c;甚至形成“网状结构”。因此&#xff0c;本文基于…

java json转xml_关于JSON与XML的区别比较

现在互联网上&#xff0c;最流行的两大传输数据的标准就是json和XML了&#xff0c;关于谁是最好的&#xff0c;一直以来都是人们争论的话题&#xff0c;其实各有各的缺点和优点&#xff1b;1.定义介绍(1).XML定义扩展标记语言 (Extensible Markup Language, XML) &#xff0c;用…

揭秘!阿里实时数仓分布式事务Scale Out设计

简介&#xff1a; Hybrid Transaction Analytical Processing(HTAP) 是著名信息技术咨询与分析公司Gartner在2014年提出的一个新的数据库系统定义&#xff0c;特指一类兼具OLTP能力&#xff08;事务能力&#xff09;和OLAP能力&#xff08;分析能力&#xff09;的数据库系统。 …

mysql对本地文件的读取_Mysql 任意读取客户端文件

load data infile "/etc/passwd" into table test FIELDS TERMINATED BY \n;实现&#xff1a;Mysql Server会读取服务端的/etc/passwd&#xff0c;然后将其数据按照\n分割插入表中&#xff0c;但现在这个语句同样要求你有FILE权限&#xff0c;以及非local加载的语句也…