开发者社区> 游客pxprrm2iipsfu> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

接口测试平台插播: ( Postman 的小bug)

简介: 接口测试平台插播: ( Postman 的小bug)
+关注继续查看

   不知道大家知不知道一个事情:就是我们在进行测试post请求的时候,见到过字段名是相同的情况,比如:

微信图片_20220704230845.png

这个postman请求体,三个字段都一样,都是a这种情况,我们来看下postman的请求代码生成:

微信图片_20220704230855.png

微信图片_20220704230901.png

postman中,只是忠实的把这个请求体转换成了字典,然后在地下直接通过data=payload的方式传递了出去。

那么这种写法是正确的么?

答案是:

在没有同名字段的时候,是可以的。

但是一旦有同名字段,就不对了。


我们把这段代码复制到pycharm中来详细验证一下:

微信图片_20220704230908.png

注意,还没开始运行,pycharm已经在警告了。我们运行一下看看:

微信图片_20220704230914.png

结果正常显示,但是这是因为本接口是作者随便找的例子,并没有真正的需要字段a,甚至3遍!所以大多数情况下,我们很难去注意到这个细节bug。


    那我们要怎么来验证下呢?答案很简单,我们通过response,来输出它真实的请求体:

微信图片_20220704230920.png

输出:

微信图片_20220704230925.png

可以看到,它的请求体只有一个a,而且等于最后的值3,前面的1 和 2都被抛弃掉了。


我们再来修改请求体测试下:

微信图片_20220704230931.png

再看看结果:

微信图片_20220704230937.png

可以看到,b成功显示来了,但是a仍然只留一个最新的值。

所以这个写法是错误的。

大家不用怀疑了,因为博主今天测试接口,检查数据库的时候发现的这个情况,数据库中只保留了同名字段的最后一次值,所以排查出此问题,源头就是postman的请求代码的bug。


那这里我们要怎么修改,才能让这个a=1 a=2 a=3 b=5 同时当作请求发出去呢?


其实很简单,这里要弄明白,postman为什么会出现这个bug,原因是:很多人平时都会简单的把python中的字典,看作是 json格式。

而postman的开发者显然也这么认为,甚至我们在所有的python-requests的教程中,请求体都是这样字典的格式存在。


但是,这不行! 原因很简单, json允许 同名字段存在!而字典不允许!


所以我们在程序中加上这样一句打印:

微信图片_20220704230942.png

然后就看到了问题所在:

微信图片_20220704230948.png

在这个字典刚写完的时候,实际上已经自动去重了...... a=1 和a=2已经被丢弃了。


那这里我们要怎么修改呢?其实只要找一个新的格式来代替字典即可,它要具备俩种特性:

1.允许同名字段

2.可以被requests成功发出

3.可以让服务器成功解析


那么这种格式是什么?就是多元元组。


说的太多大家也不好理解,直接看代码吧,把格式改成这样:

微信图片_20220704230953.png

怎么样,看着是不是怪怪的,圆圆滚滚的还有点可爱~

直接请求:

微信图片_20220704230958.png

可以看到结果,成功的保存了同名字段a的所有值,并且被requests所认可,因为这是通过response.request.body打印出来的哦~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
vue再读52-postman测试接口
vue再读52-postman测试接口
5 0
postman 传入不同组参数循环调用接口
postman 传入不同组参数循环调用接口
52 0
接口测试平台代码实现40:修改bug
我们的这个系列已经进行了长达12章成品预览和40章纯开发章节,但是基本还没做过完全一点的测试修复bug章节,每次新开发的功能也仅仅停留在单元/函数层面上的自测。
26 0
一文搞定 Postman 接口自动化测试
一文搞定 Postman 接口自动化测试
22 0
一文搞定 Postman 接口自动化测试
![](https://ceshiren.com/uploads/default/original/3X/b/4/b429d24df9b7af9ec0e6d7bed79e60d247ec05d4.jpeg) - 文末获取测试开发进阶指南 - 本文适合已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求等基本操作。 工作环境与版本: - W
39 0
一文搞定 Postman 接口自动化测试
![](https://ceshiren.com/uploads/default/original/3X/b/4/b429d24df9b7af9ec0e6d7bed79e60d247ec05d4.jpeg) - 文末获取测试开发进阶指南 - 本文适合已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求等基本操作。 工作环境与版本: - W
65 0
一文搞定 Postman 接口自动化测试
![](https://ceshiren.com/uploads/default/original/3X/b/4/b429d24df9b7af9ec0e6d7bed79e60d247ec05d4.jpeg) - 文末获取测试开发进阶指南 - 本文适合已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求等基本操作。 工作环境与版本: - W
90 0
基于postman测试接口(整套接口测试)
可以解决的问题 几百个接口人工测试接口过于繁杂 大多测试无法使用请求结果当参数 可以使用随机参数 支持swagger信息导入 随账号持久化保存数据 对集合一键测试 自定义可视化结果
1412 0
+关注
游客pxprrm2iipsfu
我去热饭
435
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载