热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python完成excel的批量工作_Excel+Python十分钟跑完批量API,就是这么简单粗暴又好用...

现在API测试被越来越多的公司重视,对于测试工程师来说每次收到需求之后首先要做的是研究需求文档。既然接口是两个独立系统之间同步数据或访问对方程序的途径,

现在API测试被越来越多的公司重视,对于测试工程师来说每次收到需求之后首先要做的是研究需求文档。既然接口是两个独立系统之间同步数据或访问对方程序的途径,我们也就是要先看看这些接口到底是连接了哪两个系统,它们之间的关系到底是怎样的。

所以一般需求文档里会包括接口名称,接口描述,接口类型,接口地址,推送参数,返回参数这几项内容。熟悉Postman的同学可以发现这些都是必需的部分:

有了这几项内容之后,我们需要把需求文档转换成Excel,这样不管是做案例管理,还是对比结果,都相对容易一些。而后期Python读取和写入也更方便。在Excel中,我们只写入变化的部分,而对于相对固定的,例如server信息则直接在Python代码中参数化。所以做出来的输入文档如下:

有了这些内容,我们还是使用xlrd和xlwt包对excel进行处理,对于如何使用xlrd和xlwt就不在本文做过多解释了。为什么要新建一个workbook2?因为在跑完一遍之后,如果我们发现有些接口跑出来的结果有问题,我们可以不用关闭workbook1,直接进行修改,然后rerun,就会生成新的workbook2,覆盖之前的结果,节省打开关闭workbook的时间。

workbook1 = xlrd.open_workbook(r"C:\Demo\API\API_Cases.xlsx")

workbook2 = xlwt.Workbook(encoding='utf-8')

sheet1 = workbook1.sheet_by_index(0)

sheet2 = workbook2.add_sheet("response")

读取内容之后,我们对需要参数化的部分进行修改,一般情况下,url的前半部分为http://xx.xx.xx.xx:8080不变,所以我们只需要把excel中第二列取出来拼接成url即可,body部分也如是,如果有固定部分的body,我们可以在python中直接定义,然后与excel中的内容进行拼接:

par_url = sheet1.col_values(1)

body = sheet1.col_values(2)

当然,拼接的代码需要写在循环里面:

request_url = 'https://postman-echo.com' + par_url[i]

print(request_url)

执行的时候,我们用到的是requests这个包,如果需求中既有GET,又有POST,又有PUT,还有DELETE,由于用到的参数不同,我们可以分别处理。对于不同请求需要用到的不同的header,我们也可以在循环里对其进行定义,如果区别很大,我们也可以在excel中单独定义一列,然后在代码中加入相应的读取语句即可。对于POST类型的请求,我们需要以下几个参数:

response = requests.post(url=request_url, headers={}, data=body[i])

print(body[i])

在执行完之后,如果直接写入excel,我们打开response文件之后会发现,所有的返回内容都变成了一行,非常不便于分析。所以我们需要先对返回的数据进行处理,再写入excel。如果返回的内容中包含中文,则必须加上ensure_ascii=False, 否则就会出现编码问题。

json_dic = json.dumps(json.loads(response.content), indent=4, ensure_ascii=False)

最后,我们把整理好的输出内容写入新建的excel文档并保存,就大功告成了。

sheet2.write(i, 0, json_dic)

workbook2.save(r"C:\Demo\API\response.xls")

其中遇到了一些问题,也在这里提示一下,比如在POST请求中,有些参数是随机数,导致每次发送请求的时候都需要手动修改,否则就会报“已存在”之类的错,这时候我们需要用到random这个包。我们以生成10位随机数为例,在代码中用生成的10位随机数替换掉body中{{random}}的内容:

random_num = str(math.floor(1e10 * random.random()))

response = requests.post(url=request_url, headers={}, data=body[i].replace('{{random}}', random_num))

运行结果如图:

生成的新文件:



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
纤妍内衣天旺店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有