Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >接口测试平台插播: ( Postman 的小bug)

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

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

不知道大家知不知道一个事情:就是我们在进行测试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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
接口测试平台插播: 同名字段请求体
接上节课,我们发现在form-data和x-www-form-urlencoded的时候如果出现同名字段,那么我们底层的代码是不能处理的。所以我们本节就来修改一下底层的这个发送请求的函数:Api_send
我去热饭
2022/05/19
2550
接口测试平台插播: 同名字段请求体
接口测试平台插播: 同名字段请求体-其他涉及代码
我们上节课,成功的把单接口调试的底层请求代码中form-data等格式的请求体从字典转变为了多元元组,实现了同名字段的正常请求。本节就来搞定首页请求/用例请求/异常测试/登陆态的底层代码。
我去热饭
2022/05/19
2410
接口测试平台插播: 同名字段请求体-其他涉及代码
接口测试平台代码实现53: 首页重构1
定位错误的窍门就是 先看最后一句,是一个json解析错误。然后找具体哪行时候,我们直接看我们自己写的py文件就好,其他的忽略。迅速锁定来这行,原来是header的问题。我们代码中直接就对header字符串进行json化。结果当为空的时候 ,会引发代码报错。
我去热饭
2022/05/19
4340
接口测试平台代码实现53: 首页重构1
快速掌握接口测试利器Postman
Postman是谷歌开发的一款网页调试和接口测试工具,能够发送任何类型的http请求,支持GET/PUT/POST/DELETE等方法。Postman非常简单易用,可以直接填写URL,header,body等就可以发送一个请求,用来测试api接口非常方便。
吾非同
2020/10/23
1K0
详解接口测试(2)- HTTP接口用例设计与测试方法(拿B站练手)
在之前的文章《详解接口测试(1)-常见的网络通信协议》当中,我们介绍了接口的概念以及各种类型的接口用到的网络通信协议。鉴于HTTP网络协议使用最为广泛,本文将会基于HTTP协议的接口对其讲解如何进行接口测试,内容包含以下部分:
Bug挖掘机
2022/09/28
2K0
详解接口测试(2)- HTTP接口用例设计与测试方法(拿B站练手)
Postman被低估的功能 — 自动化接口测试
该篇文章针对已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。
架构师修炼
2021/11/02
3.7K0
接口测试基础学习
(一)http协议基础 协议基础 请求消息 响应消息 (二)接口测试概述 (三)Requests库介绍 (四)抓包工具 fiddler (五)URL参数 (六)响应消息 (七)Session机制 (八)待更新 问题记录
全栈程序员站长
2022/09/22
5820
postman接口测试
postman提供功能强大的 Web API 和 HTTP 请求的调试,它能够发送任何类型的HTTP 请求 (GET, POST, PUT, DELETE...),并且能附带任何数量的参数和 Headers.不仅如此,它还提供测试数据和环境配置数据的导入导出,付费的Post Cloud用户还能够创建自己的Team Library用来团队协作式的测试,并能够将自己的测试收藏夹和用例数据分享给团队.
测试加
2022/03/24
1K0
postman接口测试
Postman接口测试工具详解
Postman可以在官方页面下载,支持Windows、macOS和Linux系统。下载并安装后,注册并登录Postman账号以便使用云端功能。
洛秋_
2024/07/11
3720
一文搞定Postman接口自动化测试
本文适合已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求等基本操作。
lyb-geek
2020/02/11
1.5K0
一文搞定Postman接口自动化测试
如何使用postman做接口测试
Postman: 简单方便的接口调试工具,便于分享和协作。具有接口调试,接口集管理,环境配置,参数化,断言,批量执行,录制接口,Mock Server, 接口文档, 接口监控等功能;
伤心的辣条
2022/09/08
1.7K0
如何使用postman做接口测试
全网最全的Postman接口自动化测试!(菜鸟级攻略)
该篇文章针对已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。
测试小兵
2023/03/03
1.3K0
全网最全的Postman接口自动化测试!(菜鸟级攻略)
面试官:你了解接口测试吗?
在谈论接口测试之前,让我们先明确前端和后端这两个概念。在互联网开发中,前端和后端经常一起工作以完成一个任务。前端通常负责用户交互和数据的呈现,后端则负责数据的处理和存储。
一个正经的AI
2024/01/22
2430
面试官:你了解接口测试吗?
使用Postman工具做接口测试(三)——断言与参数提取
  下面我会以登录为例,来讲如何利用postman提取上一个接口返回数据,并且放到当前接口来使用。
全栈测试开发日记
2023/02/02
8730
使用Postman工具做接口测试(三)——断言与参数提取
使用Postman,导出为python接口测试脚本
Postman的脚本可以导出多种语言的脚本,方便二次维护开发。 Python的requests库,支持python2和python3,用于发送http/https请求 使用unittest进行接口自动化测试 01 环境准备 1、安装python(使用python2或3都可以) 2、安装requests:pip install requests 电脑中同时存在python2和python3时会出现安装错误如下: Python3下安装: Pip的版本太低,无法安装其他模块 升级pip 成功
测试小兵
2023/03/08
1.6K0
使用Postman,导出为python接口测试脚本
接口测试之Postman使用全指南(原来使用 Postman测试API接口如此简单)
做接口测试的好处: 1、节约时间,缩短项目成本 2、提高工作效率 3、提高系统的健壮性
全栈程序员站长
2022/09/04
5.2K0
接口测试之Postman使用全指南(原来使用 Postman测试API接口如此简单)
Postman测试实例
  如果请求成功,返回json格式的消息体,如下所示,retcode值为0表示添加成功,id是新加课程对应的ID号
顾翔
2019/12/12
1.3K0
Postman测试实例
介绍 Postman 接口自动化测试
在 Postman 中相关的功能在非常显眼的地方,Tests 功能的使用需要我们有一定的编程语言基础,目前支持的脚本语言即为 JavaScript 。但比较好的一点是,我们不需要再去考虑上下文问题以及运行环境的问题 ,也就是说我们只需要在这边完成结果逻辑判断的代码块即可。 而 Postman 还为我们提供了一些常用的代码模板,在 Tests 面板右边的 SNIPPETS 功能区中,所以对 JavaScript 不大了解问题也不大。代码编写相关将在下文进行具体介绍。 先看上图的代码部分,我们可以发现 responseCode 、 responseBody 和 tests 三个变量(可直接使用) :
霍格沃兹测试开发
2022/05/07
7320
接口测试|Postman设置断言
作为一款接口测试工 具,postman需要对发送请求后返回的结果是否正确做验证,在postman中通过 tests页签做请求的验证,也称为断言。
霍格沃兹测试开发Muller老师
2023/01/31
1.1K0
软件测试之 接口测试 Postman使用
Qiuner
2024/07/19
1620
软件测试之 接口测试 Postman使用
相关推荐
接口测试平台插播: 同名字段请求体
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档