python接口自动化(四十一)- 发xml格式参数的post请求(超详解)

简介

  最近在工做中,遇到一种奇葩的接口,它的参数数据是经过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每一个人的思路想法不同,开发的接口也是各式各样的,若是想要统一的话,必须是提早团队已经作好沟通定好规则,这样就像在产品线上生成一python

样规格大小一致。就不会出现前边的问题了,若是出现了怎么办?并且项目进度比较急,没有时间修改,一期上线就只能凑合着用这组接口了,那么做为QA的你,会不会测试,如何用代码、工具实现呢???等等问题跟着就产生了。json

  前边就有介绍到有关:post请求相对于get请求多一个body部分,body部分常见的数据类型有如下四种(注意是常见的,并非只有4种)浏览器

  • application/x-www-form-urlencoded
  • application/json
  • text/xml
  • multipart/form-data

  本篇就来给各位看官和小伙伴们来说xml这种类型的body案例,如何用python去实现,因为公司的制度的保密性,因此公司的接口就不能在这里给小伙伴们演示了,我给小伙伴们模拟了一个相似的接口,来给小伙伴们讲解一下思路,但愿小伙伴们在遇到的时候不至于app

慌了神,不知道从何处入手,其实说到底,说破大天了,它的本质仍是一个接口,那就仍是按照接口的那套思路往上边靠,这样就思路不至于太偏,也会走不多的弯路。好了就不啰嗦了,直接进入今天的正题吧。composer

text/xml的数据类型

一、首先要肯定post请求的body部分类型是xml格式,能够用fiddler抓包工具、postman、jemter、Google浏览器接口调试插件来进行缺洞,这里我是用fiddler抓包工具来肯定的。看到body部分格式以下:函数

二、body里xml的参数:工具

<?xml version=“1.0” encoding = “UTF-8”?>
<COM>
<REQ name="北京-宏哥">
<USER_ID>bjhongge</USER_ID>
<COMMODITY_ID>123456</COMMODITY_ID>
<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
</REQ>
</COM>

模拟接口请求

  PS:!!!先不要着急的去用代码实现,而是先用工具请求一次,看是否能够请求是否能够成功。不要一开始就抨击怕啦的敲了半天,运行代码,傻眼了,运行结果和股市同样行情大涨,一片红色。结果你费了半天劲调试代码,也没查出错误。一问开发,开发用工具一试,一脸淫笑,而后笑呵呵的告诉你:额。。。,这个接口有点小问题,我须要调整一下下,这个时候是否是有一种想把开发接口的人痛揍一顿冲动,可是仔细想一想仍是本身的问题,若是一开始你就用工具模拟一下,出现问题立马找开发人员确认沟通,就不会有后面的剧情了。这种场景通常是萌新、小白可能会遇到的。好了,如下给小伙伴们列举了两种方法,固然了你也能够用其余方法模拟,条条大路通罗马,便可。post

一、Google浏览器接口调试插件模拟

一、将url、请求方法、参数在插件中填写好,之后直接点击“Send”,便可学习

二、使用fiddler模拟

一、点开fiddler工具上composer菜单测试

 

二、填写URL、选择请求方法、将xml数据直接复制到右下方Request Body部分,而后点右上角Execute就能执行了

python3代码实现

一、宏哥演示环境:

(1)python37 (2)PyCharm 2018.3.5 x64  (3)操做系统win10

二、其实很简单的,难而不会,会而不难。将xml格式的body部分直接写成一个字符串类型就好了,遇到换行的字符串,在后面加个反斜杠

三、body参数用data去接收传入,要是遇到编码问题报错,就对body部分encode下再传入

四、运行结果

五、参考代码

 1 # coding=utf-8
 2 # 1.先设置编码,utf-8可支持中英文,如上,通常放在第一行
 3 
 4 # 2.注释:包括记录建立时间,建立人,项目名称。
 5 '''
 6 Created on 2019-5-29
 7 @author: 北京-宏哥     QQ交流群:984942724
 8 Project:学习和使用 发xml格式参数的post请求
 9 '''
10 # 3.导入模块
11 import requests
12 url = "http://httpbin.org/post"
13 
14 # python3字符串换行,在右边加个反斜杠
15 body = '<?xml version="1.0" encoding = "UTF-8"?>' \
16        '<COM>' \
17        '<REQ name="北京-宏哥">' \
18        '<USER_ID></USER_ID>' \
19        '<COMMODITY_ID>123456</COMMODITY_ID>' \
20        '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \
21        '</REQ>' \
22        '</COM>'
23 
24 # 遇到编码报错时候,对body进行encode
25 r = requests.post(url, data=body.encode("utf-8"))
26 print(r.text)

从文件中读取XML数据

一、xml格式的数据写到代码里面,不太直观,后期维护也不方便,能够把xml格式数据单独拿出来写到一个文件里,再用open函数去读取

二、新建一个body1_xml文件,写入内容以下

三、参考内容

<?xml version=“1.0” encoding = “UTF-8”?>
<COM>
    <REQ name="北京-宏哥">
        <USER_ID>bjhongge</USER_ID>
        <COMMODITY_ID>123456</COMMODITY_ID>
        <SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
    </REQ>
</COM>

四、用open函数去读xml内容

五、运行结果

六、参考代码

 1 # coding=utf-8
 2 # 1.先设置编码,utf-8可支持中英文,如上,通常放在第一行
 3 
 4 # 2.注释:包括记录建立时间,建立人,项目名称。
 5 '''
 6 Created on 2019-5-29
 7 @author: 北京-宏哥     QQ交流群:984942724
 8 Project:学习和使用 发xml格式参数的post请求
 9 '''
10 # 3.导入模块
11 import requests
12 url = "http://httpbin.org/post"
13 
14 # python3字符串换行,在右边加个反斜杠
15 body = '<?xml version="1.0" encoding = "UTF-8"?>' \
16        '<COM>' \
17        '<REQ name="北京-宏哥">' \
18        '<USER_ID></USER_ID>' \
19        '<COMMODITY_ID>123456</COMMODITY_ID>' \
20        '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \
21        '</REQ>' \
22        '</COM>'
23 
24 with open('body1.xml',encoding='utf-8') as fp:
25        body = fp.read()
26 print(body)

小结

   嘿嘿,今天到这里有关发xml格式参数的post请求就给小伙伴们介绍完了,看起来是否是至关简单啊,可是在工做中遇到相似的问题,要灵活应用,不要生搬硬套。

相关文章
相关标签/搜索