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-8”?>
<COM>
<REQ name="北京-宏哥">
<USER_ID>bjhongge</USER_ID>
<COMMODITY_ID>123456</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、参考代码

 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数据

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

2、新建一个body1_xml文件,写入内容如下

3、参考内容

<?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>

4、用open函数去读xml内容

5、运行结果

6、参考代码

 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请求就给小伙伴们介绍完了,看起来是不是相当简单啊,但是在工作中遇到类似的问题,要灵活应用,不要生搬硬套。

原文地址:https://www.cnblogs.com/du-hong/p/10923930.html

时间: 2024-10-09 20:03:46

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

python接口自动化(三十九)- logger 日志 - 上(超详解)

简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式. logging模块与log4j的机制是一样的,只是具体的实现细节不同.模块提供logger,handler,filter,formatter. logger提供日志接口,供应用代码使用.logger最长用的操作有两类:配置和发送日志消息.可以通过

python接口自动化2-发送post请求

前言 发送post的请求参考例子很简单,实际遇到的情况却是很复杂的,首先第一个post请求肯定是登录了,但登录是最难处理的.登录问题解决了,后面都简单了. 一.查看官方文档 1.学习一个新的模块,其实不用去百度什么的,直接用help函数就能查看相关注释和案例内容. >>import requests >>help(requests) 2.查看python发送get和post请求的案例 >>> import requests       >>> r

python接口自动化5-Json数据处理

前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的参数就行,这时候就需要json来解析返回的数据了. 一.json模块简介 1.Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式,常用于http请求中 2.可以用help(json),查看对应的源码注释内容 Encoding basic P

python接口自动化4-绕过验证码登录(cookie)

前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录cookie 1.登录后会生成一个已登录状态的cookie,那么只需要直接把这个值添加到cookies里面就可以了. 2.可以先手动登录一次,然后抓取这个cookie,这里就需要用抓包工具fiddler了 3.先打开博客园登录界面,手动输入账号和密码(勾选下次自动登录) 4.打开fiddler抓包工具,刷

python接口自动化3-自动发帖(session)

前言 上一篇模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等,这时候如何保持会话呢? 一.session简介 1.查看帮助文档,贴了一部分,后面省略了 >>import requests>>help(requests.session()) class Session(SessionRedirectMixin) |  A Requests session. |   |  Provides cookie persistence, connection-poo

python接口自动化1-发送get请求【转载】

本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E5%8C%96/ 前言 requests模块,也就是老污龟,为啥叫它老污龟呢,因为这个官网上的logo就是这只污龟,接下来就是学习它了. 一.环境安装 1.用pip安装requests模块 >>pip install requests 二.get请求 1.导入requests后,用get方法就能直

python接口自动化1-发送get请求

前言 requests模块,也就是老污龟,为啥叫它老污龟呢,因为这个官网上的logo就是这只污龟,接下来就是学习它了. 一.环境安装 1.用pip安装requests模块 >>pip install requests 二.get请求 1.导入requests后,用get方法就能直接访问url地址,如:http://www.cnblogs.com/wanghaihong200/,看起来是不是很酷 2.这里的r也就是response,请求后的返回值,可以调用response里的status_cod

python接口自动化发送get请求 详解(一)

前言:接口自动化实现自动化脚本比较稳定,主要用到requests模块,后面我会把这个模块单独拉出来写一下. 一.环境安装 1.用pip安装requests模块 >>pip install requests 注意:pip很容易就会版本升级, 方法1:检测并更新 pip list –outdated 方法2: ♦先卸载: pip uninstall packagename ♦在用:easy_install.exe安装 easy_install.exe pip 二.get请求 ♦1.导入reques

python接口自动化(post请求)

python接口自动化(post请求) 一.post请求的作用:新增资源 二.data格式的参数请求(data是字典对象) #1.导包 import requests #2.调用post方法 #请求的URL url='https://www.******/pc/member/sign' #请求头 headers={'content-type':'application/x-www-form-urlencoded'} #请求的参数 data={'flag': 'mobile', 'password