简介

  最近在工作中,遇到一种奇葩的接口,它的参数数据是通过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请求就给小伙伴们介绍完了,看起来是不是相当简单啊,但是在工作中遇到类似的问题,要灵活应用,不要生搬硬套。

最新文章

  1. 2015年3月阿里内推(c++研发)实习生电面经历
  2. 使用Log4Net完成异常日志处理
  3. iOS - Mac 锁屏快捷键设置
  4. spring 好处与优点
  5. C语言--C语言程序
  6. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 分类: dp 2015-05-21 10:50 14人阅读 评论(0) 收藏
  7. C#中int32 的有效值范围
  8. EF中用Newtonsoft.Json引发的循环引用问题
  9. Android进阶(二十七)Android原生扰人烦的布局
  10. 了解Serverless架构
  11. C语言 统计一串字符中空格键、Tab键、回车键、字母、数字及其他字符的个数(Ctrl+Z终止输入)
  12. Spring4-@Enable** 注解的实现原理
  13. session失效时间设置
  14. mysql 转义字符问题
  15. Linux学习笔记04—IP配置
  16. git基本命令之删除撤销操作
  17. Onvif获取rstp地址GetCapabilities能力时,出现error 4或者52的的解决方法
  18. leetcode-219-Contains Duplicate II(使用set来判断长度为k+1的闭区间中有没有重复元素)
  19. c#参数修饰符-out
  20. Docker 运行时的用户与组管理的方法

热门文章

  1. 【转】 Pro Android学习笔记(六四):安全和权限(1):签发apk
  2. 微服务理论之四:SOA
  3. LInux在线安装JDK
  4. WPF x:key和x:name用法
  5. Vue之vue.js声明式渲染
  6. MS-SQL循环、随机数
  7. arguments详解
  8. 关于ArcGis for javascrept之Map类
  9. vue的安装配置
  10. ubuntu下hive-0.8.1配置