简介

  最近在工作中,遇到一种奇葩的接口,它的参数数据是通过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的参数:

  1. <?xml version=“1.0 encoding = UTF-”?>
  2. <COM>
  3. <REQ name="北京-宏哥">
  4. <USER_ID>bjhongge</USER_ID>
  5. <COMMODITY_ID></COMMODITY_ID>
  6. <SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
  7. </REQ>
  8. </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-
  2. # .先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # .注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on --
  7. @author: 北京-宏哥 QQ交流群:
  8. Project:学习和使用 发xml格式参数的post请求
  9. '''
  10. # .导入模块
  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、参考内容

  1. <?xml version=“1.0 encoding = UTF-”?>
  2. <COM>
  3. <REQ name="北京-宏哥">
  4. <USER_ID>bjhongge</USER_ID>
  5. <COMMODITY_ID></COMMODITY_ID>
  6. <SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
  7. </REQ>
  8. </COM>

4、用open函数去读xml内容

5、运行结果

6、参考代码

  1. # coding=utf-
  2. # .先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # .注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on --
  7. @author: 北京-宏哥 QQ交流群:
  8. Project:学习和使用 发xml格式参数的post请求
  9. '''
  10. # .导入模块
  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请求就给小伙伴们介绍完了,看起来是不是相当简单啊,但是在工作中遇到类似的问题,要灵活应用,不要生搬硬套。

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

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

    简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP, ...

  2. python接口自动化(二十八)--html测试 报告——下(详解)

    简介 五一小长假已经结束了,想必大家都吃饱喝足玩好了,那就继续学习吧.一天不学习,自己知道:两天不学习,对手知道:三天不学习,大家知道:一周不学习,智商输给猪.好了开个玩笑都逗大家一乐,但是想想还是有 ...

  3. python接口自动化四(json数据处理)

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

  4. 《手把手教你》系列技巧篇(四十一)-java+ selenium自动化测试 - 处理iframe -上篇(详解教程)

    1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了.但是还是有小伙伴或者童 ...

  5. python接口自动化(十一)--发送post【data】(详解)

    简介 前面登录博客园的是传 json 参数,由于其登录机制的改变没办法演示,然而在工作中有些登录不是传 json 的,如 jenkins 的登录,这里小编就以jenkins 登录为案例,传 data ...

  6. 【python接口自动化框架-unittest】如何传参数到下一个case

    1.前提 平时我们用unittest的时候,都知道每个test_ 都是相互独立的,但是很多现实情况是,我们下一个接口参数,可能会用到上一个接口返回的json字段,那么,我们怎么去实现呢 2.实例 1. ...

  7. 记录python接口自动化测试--从excel中读取params参数传入requests请求不生效问题的解决过程(第七目)

    在第六目把主函数写好了,先来运行一下主函数 从截图中可以看到,请求参数打印出来了,和excel中填写的一致 但是每个接口的返回值却都是400,提示参数没有传进去,开始不知道是什么原因(因为excel中 ...

  8. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  9. python接口自动化25-发xml格式post请求

    前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...

随机推荐

  1. JVM插庄之一:JVM字节码增强技术介绍及入门示例

    字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术. 目的:在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修 ...

  2. 查看,上传crushmap命令

    标签(空格分隔): ceph,ceph运维,crushmap 查看crushmap命令 从mon节点获取crushmap: # ceph osd getcrushmap -o crush.map 反编 ...

  3. AI设计的若干规则阐述

    转自:http://www.gameres.com/491742.html 一般来讲,网络游戏的AI历来就是很简单的AI.相比之下,很多单机游戏的AI就要得复杂一些.而笔者并未从事过大型单机游戏的AI ...

  4. C# 播放音乐

    用 .NET 自带的类库 System.Media 下面的 SoundPlayer 来播放音乐的方式,此种方式使用托管代码,应该是更为可取的方式吧 使用起来非常简单,下面稍作说明: . 支持同步.异步 ...

  5. Storm在zookeeper上的目录结构

    storm操作zookeeper的主要函数都定义在命名空间backtype.storm.cluster中(即cluster.clj文件中). backtype.storm.cluster定义了两个重要 ...

  6. C#文件监控工具(对追加内容的监控并输出)

    C#文件监控(对追加内容的监控并输出),适合监控某个目录下的日志文件(log),开发初衷是linux上部署在jexus部署网站后想实时输出jexus的log和自己站点的log文件(已经测试通过在mon ...

  7. Oracle 11g 、 Oracle 11g select 、 PLSQL 、 Sql Server迁移助手(SSMA)6.0/7.1 网盘下载地址

    - - - - - - - - 链接: https://pan.baidu.com/s/1q-uwAfeLOPxzBBx6V1pYLg 提取码: hei9

  8. VS Code(待补充)

    使用! 然后Tab  快速生成html文档结构 快速生成一个类   .类名  会有提示 .container.box .col-6*2 VisualStudio Code怎么同时编辑多处?

  9. PM2使用文档

    简介 PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 下面就对PM2进行入门性的介绍,基本涵盖了PM2的常用的功能和 ...

  10. Java实例练习——基于UDP协议的多客户端通信

    昨天学习了UDP协议通信,然后就想着做一个基于UDP的多客户端通信(一对多),但是半天没做出来,今天早上在参考了很多代码以后,修改了自己的代码,然后运行成功,在这里分享以下代码,也说一下自己的认识误区 ...