python接口自动化(四十一)- 发xml格式参数的post请求(超详解)
简介
最近在工作中,遇到一种奇葩的接口,它的参数数据是通过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每个人的思路想法不一样,开发的接口也是各式各样的,如果想要统一的话,必须是提前团队已经做好沟通定好规则,这样就像在产品线上生成一
样规格大小一致。就不会出现前边的问题了,如果出现了怎么办?而且项目进度比较急,没有时间修改,一期上线就只能凑合着用这组接口了,那么作为QA的你,会不会测试,如何用代码、工具实现呢???等等问题跟着就产生了。
前边就有介绍到有关:post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种)
- application/x-www-form-urlencoded
- application/json
- text/xml
- multipart/form-data
本篇就来给各位看官和小伙伴们来讲xml这种类型的body案例,如何用python去实现,由于公司的制度的保密性,所以公司的接口就不能在这里给小伙伴们演示了,我给小伙伴们模拟了一个类似的接口,来给小伙伴们讲解一下思路,希望小伙伴们在遇到的时候不至于
慌了神,不知道从何处入手,其实说到底,说破大天了,它的本质还是一个接口,那就还是按照接口的那套思路往上边靠,这样就思路不至于太偏,也会走很少的弯路。好了就不啰嗦了,直接进入今天的正题吧。
text/xml的数据类型
1、首先要确定post请求的body部分类型是xml格式,可以用fiddler抓包工具、postman、jemter、Google浏览器接口调试插件来进行缺洞,这里我是用fiddler抓包工具来确定的。看到body部分格式如下:
2、body里xml的参数:
- <?xml version=“1.0” encoding = “UTF-”?>
- <COM>
- <REQ name="北京-宏哥">
- <USER_ID>bjhongge</USER_ID>
- <COMMODITY_ID></COMMODITY_ID>
- <SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
- </REQ>
- </COM>
模拟接口请求
PS:!!!先不要着急的去用代码实现,而是先用工具请求一次,看是否可以请求是否可以成功。不要一开始就抨击怕啦的敲了半天,运行代码,傻眼了,运行结果和股市一样行情大涨,一片红色。结果你费了半天劲调试代码,也没查出错误。一问开发,开发用工具一试,一脸淫笑,然后笑呵呵的告诉你:额。。。,这个接口有点小问题,我需要调整一下下,这个时候是不是有一种想把开发接口的人痛揍一顿冲动,但是仔细想想还是自己的问题,如果一开始你就用工具模拟一下,出现问题立马找开发人员确认沟通,就不会有后面的剧情了。这种场景一般是萌新、小白可能会遇到的。好了,以下给小伙伴们列举了两种方法,当然了你也可以用其他方法模拟,条条大路通罗马,即可。
1、Google浏览器接口调试插件模拟
1、将url、请求方法、参数在插件中填写好,以后直接点击“Send”,即可
2、使用fiddler模拟
1、点开fiddler工具上composer菜单
2、填写URL、选择请求方法、将xml数据直接复制到右下方Request Body部分,然后点右上角Execute就能执行了
python3代码实现
1、宏哥演示环境:
(1)python37 (2)PyCharm 2018.3.5 x64 (3)操作系统win10
2、其实很简单的,难而不会,会而不难。将xml格式的body部分直接写成一个字符串类型就行了,遇到换行的字符串,在后面加个反斜杠
3、body参数用data去接收传入,要是遇到编码问题报错,就对body部分encode下再传入
4、运行结果
5、参考代码
- # coding=utf-
- # .先设置编码,utf-8可支持中英文,如上,一般放在第一行
- # .注释:包括记录创建时间,创建人,项目名称。
- '''
- Created on --
- @author: 北京-宏哥 QQ交流群:
- Project:学习和使用 发xml格式参数的post请求
- '''
- # .导入模块
- import requests
- url = "http://httpbin.org/post"
- # python3字符串换行,在右边加个反斜杠
- body = '<?xml version="1.0" encoding = "UTF-8"?>' \
- '<COM>' \
- '<REQ name="北京-宏哥">' \
- '<USER_ID></USER_ID>' \
- '<COMMODITY_ID>123456</COMMODITY_ID>' \
- '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \
- '</REQ>' \
- '</COM>'
- # 遇到编码报错时候,对body进行encode
- r = requests.post(url, data=body.encode("utf-8"))
- print(r.text)
从文件中读取XML数据
1、xml格式的数据写到代码里面,不太直观,后期维护也不方便,可以把xml格式数据单独拿出来写到一个文件里,再用open函数去读取
2、新建一个body1_xml文件,写入内容如下
3、参考内容
- <?xml version=“1.0” encoding = “UTF-”?>
- <COM>
- <REQ name="北京-宏哥">
- <USER_ID>bjhongge</USER_ID>
- <COMMODITY_ID></COMMODITY_ID>
- <SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
- </REQ>
- </COM>
4、用open函数去读xml内容
5、运行结果
6、参考代码
- # coding=utf-
- # .先设置编码,utf-8可支持中英文,如上,一般放在第一行
- # .注释:包括记录创建时间,创建人,项目名称。
- '''
- Created on --
- @author: 北京-宏哥 QQ交流群:
- Project:学习和使用 发xml格式参数的post请求
- '''
- # .导入模块
- import requests
- url = "http://httpbin.org/post"
- # python3字符串换行,在右边加个反斜杠
- body = '<?xml version="1.0" encoding = "UTF-8"?>' \
- '<COM>' \
- '<REQ name="北京-宏哥">' \
- '<USER_ID></USER_ID>' \
- '<COMMODITY_ID>123456</COMMODITY_ID>' \
- '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \
- '</REQ>' \
- '</COM>'
- with open('body1.xml',encoding='utf-8') as fp:
- body = fp.read()
- print(body)
小结
嘿嘿,今天到这里有关发xml格式参数的post请求就给小伙伴们介绍完了,看起来是不是相当简单啊,但是在工作中遇到类似的问题,要灵活应用,不要生搬硬套。
python接口自动化(四十一)- 发xml格式参数的post请求(超详解)的更多相关文章
- python接口自动化(三十九)- logger 日志 - 上(超详解)
简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP, ...
- python接口自动化(二十八)--html测试 报告——下(详解)
简介 五一小长假已经结束了,想必大家都吃饱喝足玩好了,那就继续学习吧.一天不学习,自己知道:两天不学习,对手知道:三天不学习,大家知道:一周不学习,智商输给猪.好了开个玩笑都逗大家一乐,但是想想还是有 ...
- python接口自动化四(json数据处理)
前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...
- 《手把手教你》系列技巧篇(四十一)-java+ selenium自动化测试 - 处理iframe -上篇(详解教程)
1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了.但是还是有小伙伴或者童 ...
- python接口自动化(十一)--发送post【data】(详解)
简介 前面登录博客园的是传 json 参数,由于其登录机制的改变没办法演示,然而在工作中有些登录不是传 json 的,如 jenkins 的登录,这里小编就以jenkins 登录为案例,传 data ...
- 【python接口自动化框架-unittest】如何传参数到下一个case
1.前提 平时我们用unittest的时候,都知道每个test_ 都是相互独立的,但是很多现实情况是,我们下一个接口参数,可能会用到上一个接口返回的json字段,那么,我们怎么去实现呢 2.实例 1. ...
- 记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)
在第六目把主函数写好了,先来运行一下主函数 从截图中可以看到,请求参数打印出来了,和excel中填写的一致 但是每个接口的返回值却都是400,提示参数没有传进去,开始不知道是什么原因(因为excel中 ...
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- python接口自动化25-发xml格式post请求
前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...
随机推荐
- JVM插庄之一:JVM字节码增强技术介绍及入门示例
字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术. 目的:在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修 ...
- 查看,上传crushmap命令
标签(空格分隔): ceph,ceph运维,crushmap 查看crushmap命令 从mon节点获取crushmap: # ceph osd getcrushmap -o crush.map 反编 ...
- AI设计的若干规则阐述
转自:http://www.gameres.com/491742.html 一般来讲,网络游戏的AI历来就是很简单的AI.相比之下,很多单机游戏的AI就要得复杂一些.而笔者并未从事过大型单机游戏的AI ...
- C# 播放音乐
用 .NET 自带的类库 System.Media 下面的 SoundPlayer 来播放音乐的方式,此种方式使用托管代码,应该是更为可取的方式吧 使用起来非常简单,下面稍作说明: . 支持同步.异步 ...
- Storm在zookeeper上的目录结构
storm操作zookeeper的主要函数都定义在命名空间backtype.storm.cluster中(即cluster.clj文件中). backtype.storm.cluster定义了两个重要 ...
- C#文件监控工具(对追加内容的监控并输出)
C#文件监控(对追加内容的监控并输出),适合监控某个目录下的日志文件(log),开发初衷是linux上部署在jexus部署网站后想实时输出jexus的log和自己站点的log文件(已经测试通过在mon ...
- Oracle 11g 、 Oracle 11g select 、 PLSQL 、 Sql Server迁移助手(SSMA)6.0/7.1 网盘下载地址
- - - - - - - - 链接: https://pan.baidu.com/s/1q-uwAfeLOPxzBBx6V1pYLg 提取码: hei9
- VS Code(待补充)
使用! 然后Tab 快速生成html文档结构 快速生成一个类 .类名 会有提示 .container.box .col-6*2 VisualStudio Code怎么同时编辑多处?
- PM2使用文档
简介 PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 下面就对PM2进行入门性的介绍,基本涵盖了PM2的常用的功能和 ...
- Java实例练习——基于UDP协议的多客户端通信
昨天学习了UDP协议通信,然后就想着做一个基于UDP的多客户端通信(一对多),但是半天没做出来,今天早上在参考了很多代码以后,修改了自己的代码,然后运行成功,在这里分享以下代码,也说一下自己的认识误区 ...