前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >接口测试平台插播: ( Postman 的小bug)

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

作者头像
我去热饭
发布2022-05-19 10:31:36
4370
发布2022-05-19 10:31:36
举报
文章被收录于专栏:测试开发干货

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

这个postman请求体,三个字段都一样,都是a

这种情况,我们来看下postman的请求代码生成:

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

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

答案是:

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

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

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

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

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

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

输出:

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

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

再看看结果:

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

所以这个写法是错误的。

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

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

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

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

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

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

然后就看到了问题所在:

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

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

1.允许同名字段

2.可以被requests成功发出

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

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

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

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

直接请求:

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

在博主自己的企业接口测试中,这种写法也成功的被服务器解析,数据库中查到了同名字段全部的值~

(这个bug刚刚提交给postman团队了,希望能引起重视吧~)

那么这个问题,我准备在下一节当中,去我们的接口测试平台上进行改造!

最后贴上git地址:https://github.com/Woqurefan/ApiTest

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发干货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档