【精通Postman接口测试】01-基础理论+安装使用+项目实战+接口关联(万字图文,零基础保姆级)

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🎯 你正在阅读「接口测试从入门到跑路」系列文章 🎯

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

🔥 弹简特 个人主页

❄️ 个人专栏直通车:

✨ 靠热爱去书写自己,靠勇敢去书写生活!

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨


🌟 博主简介:


目录

前言

📘 为什么你应该读这篇?

网上 Postman 的教程很多,但大部分是:

  • 直接装软件、点几下
  • 零基础根本不知道接口测试是什么

我花了很长时间,把 接口测试理论(分类/为什么做/全流程) + Postman 安装 + 界面详解 + 微信公众号真实接口实战(6个接口:获取token、查询、新增、修改、删除、文件上传) 全部整理成一份 零基础能一步一步跟着做 的笔记。

全文 1 万多字,配图 50+ 张,每一步都有截图和说明 。

这是 Postman 系列的第一篇 ,后续还会讲 接口关联、变量提取、数据驱动、Newman + Jenkins 持续集成 等等,一篇一篇把 Postman 彻底讲透。

如果你是零基础,跟着这篇能把第一个微信公众号接口跑通。

现在,让我们开始。

一、Postman接口测试理论基础

1、接口分类

在实际项目中,接口主要分为两大类:项目自身的接口 和 项目他去调用的外部的接口。

1.1. 项目自身的接口

这类接口由开发人员编写,供项目内部或外部使用。

类型 说明 文档是否公开 测试策略
内部接口 供本项目各个模块之间进行数据交互 不公开 一般只测正例和反例
外部接口 供外部系统调用(给其他人使用) 公开 需全面测试正例和反例

1.2. 调用外部的接口

  • 定义:被测项目调用外部系统已经测试过的接口
  • 测试策略:只要能够调用成功即可,无需深入验证外部接口的内部逻辑

1.3. 如何识别项目中的接口?

如果我不知道我的项目里面有哪些接口呢?

核心原则:Web或App项目中,凡是有数据交互的地方就有接口。


2、为什么要做接口测试?

2.1. 前后端分离开发模式

在理解接口测试的重要性之前,我们先了解前后端分离的开发流程:

复制代码
需求评审 → 前后端定义接口 → 编写接口文档 → 
后端开发接口 + 前端Mock数据 + 测试编写用例 → 
接口测试 → 前后端联调

关键节点说明:

  • 第一步:开发,测试,产品进行需求评审,评审之后前端开发和后端开发开会定接口。
  • 第二步:由其中一个开发来定义接口文档(Swagger和ShowDoc和Word)等。
  • 第三步 :
    • (1) 后端开发就会根据接口文档开发接口,他会使用Postman做接口调试(一般他只会测试正例)。
    • (2) 前端开发和后端开发同步开发,这个时候前端需要Mock数据(因为后端还没有开发好)。
    • (3) 测试同步根据接口文档编写接口测试用例。
  • 第四步:测试就可以通过Postman或Jmeter进行接口测试。
  • 第五步:前后端都开发好之后进行前后端接口联调。

2.2. 接口测试的三大核心原因

原因 说明
确保数据交互准确性 验证项目各个模块之间的数据传递是否正确
降低修复成本 在项目开发早期进行接口测试,更早发现问题,从而降低解决问题的成本和时间
保障接口安全 对于提供给外部系统的接口,通过测试确认身份验证和授权机制是否完善

接口测试属于集成测试阶段,也就是在前后端联调之前。


3、接口测试全流程

3.1. 第1步:获取接口文档

拿到接口文档后,需要熟悉以下内容:

  • 接口业务:理解接口的功能和使用场景
  • 接口协议:HTTP / HTTPS / WebService / Dubbo 等
  • 数据格式:JSON 或 XML

注意:如果没有接口文档,可以通过抓包工具(如Fiddler、Charles)或录制工具获取接口信息。

示例:JSON数据格式

JSON数据在python中称之为字典

json 复制代码
{
  "name": "John",
  "age": 35,
  "languages": ["JavaScript", "Python", "Java"],
  "address": {
    "street": "123 Main St",
    "city": "Exampleville"
  }
}

JSON由字典 {key: value} 和列表 [data1, data2, ...] 两种数据结构嵌套组成。

示例:XML数据格式
xml 复制代码
<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <RECORD>
    <FIELD ID="1" TYPE="NativePrefix" PREFIX_LENGTH="1"/>
    <FIELD ID="2" TYPE="NCharPrefix" PREFIX_LENGTH="8"/>
  </RECORD>
  <ROW>
    <COLUMN SOURCE="1" NAME="c1" TYPE="SQLINT"/>
    <COLUMN SOURCE="2" NAME="c2" TYPE="SQLNCHAR"/>
  </ROW>
</BCPFORMAT>

3.2. 第2步:编写接口测试用例并评审

接口测试用例的设计思路与功能测试基本一致,分为正例 和反例两大类。

正例
  • 正常请求接口,验证接口返回数据的正确性
反例
反例类型 测试场景
接口鉴权反例 鉴权码为空、错误的鉴权码、鉴权码已过期
接口参数反例 参数必填校验、参数类型异常、参数长度异常
业务场景反例 异常场景(参考接口文档)、黑名单(你的ip是黑名单,你就访问不了我)、接口调用次数限制(超过我给你的调用次数就不让你调用)、分页场景(0,1,5,100)

比如那个分页场景:我得测一下它的边界值,比如第1页的前面我得测一下,最后一页的后面我得测一下这样子。

说白了,接口测试用例的编写我们就只考虑正例和反例。

记得我们的原则:用最少的用例去写正例,用最多的用例去写反例,反例你要多考虑一点。

3.3. 第3步:使用接口测试工具执行测试

接口测试的核心:请求与响应
请求四要素
要素 说明 示例
请求方法 HTTP动词 GET、POST、PUT、DELETE
请求路径 接口地址 /api/user/login
请求头 附加信息,指导服务器处理请求 Content-Type、Accept、Authorization、User-Agent、Cookie
请求体 发送给服务器的数据 JSON格式的参数

常用请求头说明:

请求头 作用
Content-Type 请求的内容类型(如 application/json)
Accept 期望接收的内容类型
Authorization 鉴权信息
X-Requested-With 标识异步请求
User-Agent 标识请求的客户端
Cookie 携带Cookie信息
响应四要素
要素 说明 常见示例
响应码 服务器处理结果的状态码 200(成功)、302(重定向)、404(资源不存在)、500(服务器错误)
响应头 响应的附加信息 Content-Type、Content-Length、Set-Cookie
响应体 服务器返回的数据 JSON/XML格式的业务数据
Cookies 响应的Cookie信息 用于后续请求保持会话
测试工具参考
  • Postman:适合单次调试和手动测试
  • JMeter:适合性能测试和批量自动化测试

3.4. 第4步:接口测试持续集成

通过 Postman + Jenkins 实现接口测试的持续集成,主要有两种方式:

方式 说明
CLI(命令行) 直接使用命令行执行Postman测试脚本
Newman Postman官方提供的命令行运行工具,更适合CI/CD集成

二、Postman接口工具安装使用

1、下载和安装

我的版本是:12.8.4

老铁们可自行参考,下载最新版的

安装 :双击你下载的exe文件,只需要一路next就行了。

安装成功之后,会有如下的界面👇

2、注册和登录

1)点击右上角创建一个用户Create Account

此时他会打开一个网页

登录

注册成功之后点击右上角的sign in 登录

此时会 跳转到一个网页

如果是第一次登录

如果是第二次登录

登录成功

我们为什么需要注册和登录呢?

如果你不注册和登录,你关闭这个工具,你的项目那些测试用例下一次打开的时候都会消失。

3、Postman的界面介绍



4、创建一个项目

首先我们的Collections中显示的是我们的项目

4.1. 点击集合

4.2. 给项目起一个名字

4.3. 解释项目中几个功能


梳理如下👇

🔹 Overview(概览)
  • 是什么:当前集合的「总览页面」
  • 包含内容:
    • 集合名称、创建者、修改时间
    • 可添加项目描述、说明文档
    • 快速查看接口数量、最近运行记录
  • 用途:团队协作时,用来给项目做说明、沉淀文档,让别人快速了解这个集合的作用。

🔹 Authorization(授权/鉴权)
  • 是什么:给整个集合统一配置接口鉴权方式
  • 支持的类型:
    • No Auth(无鉴权)
    • API Key、Bearer Token、Basic Auth、OAuth 2.0 等
  • 用途:给集合下所有接口统一设置鉴权信息,不用每个接口单独配置,比如项目里所有接口都需要同一个 token,在这里配置一次就全部生效。

🔹 Scripts(脚本)

我们提到的 Pre-request 和 Post-response 都属于这里,是集合级别的脚本:

  • Pre-request Script(请求前脚本)
    • 发送接口请求之前自动执行的代码(JS 语法)
    • 用途:动态生成请求参数(比如时间戳、签名)、设置环境变量
  • Post-response Script / Test Script(响应后脚本)
    • 收到接口响应之后自动执行的代码
    • 用途:做接口断言(比如判断响应码是否为200、返回数据是否正确)、提取响应结果设置为变量(比如登录接口拿到的token,传给后续接口)
  • 他的作用域是集合级脚本:会作用于集合下的所有接口,不用每个接口重复写脚本。

🔹 Tests(测试)
  • 是什么 :新版已整合为「功能提示页」,不再是独立的测试用例管理入口,所有测试逻辑现在完全由 Post-response Script 承载。
  • 用途:
    • 作为功能迁移引导,点击可直接跳转到 Post-response Script 编辑页
    • 原有的测试断言、用例编写功能,全部转移到 Scripts 模块中,语法和运行逻辑完全不变
  • 补充:它和 Scripts 里的测试脚本本质是同一套东西,只是现在不再单独提供集中展示界面,测试结果依然可以在响应结果的 Test Results 标签页查看。

🔹 Variables(变量)
  • 是什么 :集合级变量管理,就是说作用域是 「当前集合/项目内的所有接口」
  • 分类:
    • Initial Value(初始值):变量的默认值
    • Current Value(当前值):运行时生效的值,可被脚本修改
  • 用途:定义集合内通用变量,比如项目的 baseUrl、公共参数,用 {``{变量名}} 的方式在接口里引用,方便统一修改。

🔹 Runs(运行结果)

我们的三类结果,都在这里管理:

  • Functional(功能测试结果)
    • 集合运行器(Collection Runner)执行后的测试结果
    • 用途:查看接口是否跑通、断言是否通过、响应时间等,比如我们做持续集成的时候,我们用CLI的方式运行,他就会把你的结果放到此处。
  • Scheduled(计划运行结果)
    • 定时任务(Monitor)自动运行后的结果
    • 用途:查看接口的可用性监控、告警情况
  • Performance(性能测试结果)
    • Postman 性能测试工具运行后的报告
    • 用途:查看接口在多并发、高负载下的响应时间、成功率

5、新建一个请求

5.1. 你做接口测试的话,那么就新建一个请求

5.2. 为接口起一个名字

5.3. Postman中构造请求和得到响应的介绍

5.3.1 请求构造部分
1). 请求方法
  • 是什么:定义接口的 HTTP 操作类型,决定了接口的语义和用途。
  • 常用类型:
    • GET:获取/查询数据(无请求体,参数通常放 URL 或 Params)
    • POST:提交/新增数据(核心请求体传递参数)
    • PUT:全量更新数据
    • PATCH:部分更新数据
    • DELETE:删除数据
    • HEAD/OPTIONS:用于预检、跨域检测,一般较少直接使用

2). 请求配置选项
Params(查询字符串参数)
  • 是什么:拼接在接口地址后的键值对参数。
  • 用途:以 ?key=value&key2=value2 的格式传递,适合 GET 请求的查询条件。
Authorization(鉴权)
  • 是什么:接口访问权限配置。
  • 用途:设置接口所需的身份验证方式,如 Bearer Token、Basic Auth、API Key 等,无需在每个接口重复配置。
Headers(请求头)
  • 是什么:传递接口元信息的键值对。
  • 用途:设置 Content-Type(如 application/json)、Token、User-Agent 等信息,服务器会根据请求头解析请求类型。
Body(请求体/请求参数)
  • 是什么:POST/PUT/PATCH 等方法的核心参数载体。
  • 用途:传递复杂数据,支持多种格式,详见下方细分说明。
Scripts(脚本)
  • 是什么:接口级(只作用于本接口)自动化脚本。
  • 分类:
    • Pre-request Script:发送请求前执行,可动态生成参数、设置变量。
    • Post-response Script:收到响应后执行,可做断言验证、提取响应数据。
Settings(设置)
  • 是什么:接口级高级配置。
  • 用途:设置超时时间、重定向策略、SSL 校验、代理等。
Cookies
  • 是什么:请求携带的 Cookie 信息。
  • 用途:模拟会话状态,传递服务器下发的 Cookie。

3). 请求体(Body)细分类型
  • none :无请求体,GET 请求默认选择此项。

  • form-data :

    • 用途:既有表单参数又有文件附件上传参数,就用这个

  • x-www-form-urlencoded :

    • 用途:仅传递纯表单键值对,会自动编码参数,适合简单表单提交。

  • raw :

    • 用途:自定义格式数据,支持多种子类型:
      • JSON:最常用的接口数据格式,自动添加 Content-Type: application/json
      • XML:XML 格式数据
      • HTML/Text/JavaScript:纯文本或代码片段

  • binary :

    • 用途:以二进制流直接传输文件(如图片、视频),即把文件当做二进制传输。

5.3.2 响应查看部分
  • Body(响应体) :服务器返回的核心数据,支持多种查看方式:
    • Pretty:格式化高亮展示(如 JSON/XML),便于阅读
    • Raw:原始文本格式,无任何处理
    • Preview:网页预览(适用于 HTML 响应)
  • Headers(响应头) :服务器返回的元信息,包含状态码、服务器类型、Content-Type 等。
  • Cookies(响应Cookie):服务器下发的 Cookie 信息,可自动保存到 Postman Cookie 管理器。
  • 状态码(如 200) :接口响应结果标识,常见含义:
    • 200:请求成功
    • 400:客户端请求错误
    • 401:未授权/Token 无效
    • 404:资源不存在
    • 500:服务器内部错误
  • Test Results(测试结果):响应后脚本中断言的执行结果,展示通过/失败的用例统计。

三、Postman接口测试项目实战-微信公众平台

1、准备阶段和介绍

我们接下来就是去测试一下,微信公众平台的增删改查接口,我会先给出接口文档,然后会给出对应的实操,以及通过截图注释标注出很多的重点,同时后面我们会通过该平台的接口测试为后续引出接口关联该怎么做。

首先我们新建一个项目叫做微信公众平台接口测试:👇


2、第一个接口:获取鉴权码access token接口

2.1. 接口文档

简要描述
获取微信全局接口调用凭证 access_token 鉴权码。

请求URL
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=secret

请求方式
GET

参数说明

参数名 必选 类型 说明 备注
grant_type 是 string 用户类型 固定填写:client_credential
appid 是 string 第三方用户唯一凭证 后续接口有获取方法
secret 是 string 第三方用户唯一密钥 后续接口有获取方法

返回示例

bash 复制代码
{"access_token":"ACCESS_TOKEN","expires_in":7200}

返回参数说明

参数名 类型 说明
access_token string 获取到的鉴权码凭证
expires_in int 凭证有效时间,单位:秒

错误码说明

错误码 错误码说明
-1 系统繁忙,此时请开发者稍候再试
40001 AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性
40002 请确保grant_type字段值为client_credential
40164 调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置
89503 此IP调用需要管理员确认,请联系管理员
89501 此IP正在等待管理员确认,请联系管理员
89506 24小时内该IP被管理员拒绝调用两次,24小时内不可再使用该IP调用
89507 1小时内该IP被管理员拒绝调用一次,1小时内不可再使用该IP调用

2.2. 开始测试

2.2.1 首先分析接口文档

为什么先测试这个接口呢?

因为这个接口它能够返回一个鉴权码。就是会返回一个token,即我们的令牌。然后后面我们所有的请求都需要带上该接口返回的令牌,也就是说后续所有的接口都需要加上该接口返回的鉴权码,我们的接口才能请求成功。

首先就是基本信息:

同时你可以看到一个关键的参数信息,就是我们的查询字符串里面的参数值怎么获取?

那么获取后面两个参数的接口如下:👇

2.2.2 获取后面两个参数

1) 访问改地址
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

2)点击登录

3)扫码登录

4)得到刚刚缺少的两个参数

大家可按照上述的步骤获取到自己的。

2.2.3 复制请求路径和选择请求方式
2.2.4 填写对应的参数和参数值
2.2.5 点击发送并查看结果

对于这个鉴权码,我们后续,所有的接口都需要这个参数,我们都需要带着这个参数去请求。它好比鉴权码就是身份证,你无论去哪你都得带上身份证,比如住酒店那些带上身份证你才能住。

这也是我们先测试这个接口的原因,也就是说你想住酒店,那么就得先办理身份证,给你身份证了,你再带上身份证去 😏😏。


3、第二个接口:查询微信公众平台的已创建的标签接口(查询)

3.1. 接口文档

简要描述

获取公众号已创建的标签接口

请求URL
https://api.weixin.qq.com/cgi-bin/tags/get?access_token=access_token

请求方式
GET

返回示例

json 复制代码
{   
"tags":[{       
    "id":1,       
    "name":"每天一罐可乐星人",      
    "count":0
},
{   
    "id":2,   
    "name":"星标组",   
    "count":0
},
{   
    "id":127,  
    "name":"广东",  
    "count":5 
 }   
] }

返回参数说明

参数名 类型 说明
id int 标签id
name string 标签名称
count int 此标签下的粉丝数

3.2. 开始测试

3.2.1 开始构造请求

还是老规矩,分析好我们的接口之后,直接开始构造请求如下:

需要带上鉴权码

3.2.1 发送并查看响应结果

4、第三个接口:创建标签接口(新增)

4.1. 接口文档

简要描述

创建标签接口

请求URL
https://api.weixin.qq.com/cgi-bin/tags/create?access_token=ACCESS_TOKEN

请求方式
POST

请求参数

json 复制代码
{"tag":{"name":"广东"}}

注:name为标签名,并且标签名不能和已经存在的标签名重复!

返回示例

json 复制代码
{"tag":{"id":134,"name":"广东"}}

返回参数说明

参数名 类型 说明
id int 标签id
name string 标签名

错误码说明

错误码 错误码说明
-1 系统繁忙,此时请开发者稍候再试
45157 标签名非法,请注意不能和其他标签重名
45158 长度超过30个字节
45056 创建的标签数过多,请注意不能超过100个

4.2. 开始测试

操作了上述两个接口,我们应该顺手了些,那此处我们是也是一样的过程,首先把需求给理解到位,然后就开始构造请求,注意这个接口里面是有一些坑的,我会带你先踩坑,然后再解决😂。

咱构造接口请求如下:👇

4.2.1 请求路径和请求方式
4.2.2 设置鉴权码

说了,后续所有的接口都得带上这个鉴权码,所以此处你还是得去复制第1个接口中返回的鉴权码值,这里也埋下一个伏笔:我们每测一个接口都要去自己一个一个的复制粘贴,这样是比较麻烦的,后面我们会做一个接口关联来解决这个问题。

4.2.3 填写请求参数

他的请求要求是json格式,是个json对象,那么此处需要点击body选择raw,再选择JSON,如下👇

写我们的JSON对象

4.2.4 点击发送结果出现问题

这个故意给老铁们带的坑,核心原因其实就是我们的需求文档,没有理解透彻。

4.2.5 一图解释问题原因

从图中我们也不难理解我们插入的数据名称重复了,所以他不让你插入,这是我们带老铁们去踩的一个坑,核心呢,就是给老铁们引出解决办法👇。

4.2.6 解决重复插入的办法

办法我们有两种:

方法1:自己写没有插入过的数据,不要和之前插入过的一致

你不是广东这个名字重复了吗?那我这次自己改为广东a1,这个广东a1我们之前没有插入过,他肯定不会报错。

但是这个办法有个缺点就是你得自己想,没有出现过的名字比较麻烦,那有没有一种简单的办法呢?

有的老铁,那就是第2种方法。

方法2:拼接一个时间戳函数{``{$timestamp}}

从中我们也可以看出,我们在名字后面加一个时间戳函数就行了。

这里可千万不要懵逼哦~,我们是要去测试插入,但是他要求你插入的数据不能够重复,也就是说你刚才插入过了,你现在不能再重复插入一遍了;而你又想插入测试很多条数据,不可能每一条都能够想出不一样的数据吧,就算你能想出来,那数据量比较大的时候也是很费力的,所以我们就加了一个时间戳,让他自己去拼接呗。

那么会有老铁问:你这个时间戳函数怎么出来的?自己生出来的呀?🤔

{``{$timestamp}}就这玩意儿,咱也不藏着,肯定是由AI生成的。

问AI呀,兄弟,现在AI如此之厉害,咱不让他给咱干脏活累活那可惜了呀,为什么自己去费脑子想呢,对吧?直接问就得了😂。

得嘞,下一个接口~


5、第四个接口:编辑标签接口(修改)

5.1. 接口文档

简要描述

编辑标签接口

请求URL
https://api.weixin.qq.com/cgi-bin/tags/update?access_token=ACCESS_TOKEN

请求方式
POST

请求参数

json 复制代码
{"tag" : {"id":134,"name":"广东人"}} 

注:name为标签名,并且标签名不能和已经存在的标签名重复!

返回示例

json 复制代码
{"errcode":0,"errmsg":"ok"}

返回参数说明

参数名 类型 说明
errcode int 错误码,0表示成功
errmsg string 错误信息,ok表示成功

错误码说明

错误码 错误码说明
-1 系统繁忙,此时请开发者稍候再试
45157 标签名非法,请注意不能和其他标签重名
45158 标签名长度超过30个字节
45056 不能修改0/1/2这三个系统默认保留的标签

5.2. 开始测试

5.2.1 构造请求

还是一样的,把接口文档理清楚,然后就构造请求如下,👇

5.2.2 编辑哪一个数据

我们本次测试的结果是编辑操作,在做编辑操作之前,我们得回顾一下刚刚的新增操作。

为什么呢?因为我们编辑你得告诉他,你要编辑哪一个数据?所以它有个很重要的参数就是你得给他传标签id,用于告诉他,你要编辑哪一个标签。

首先我们上回新增的接口中,新增了一个id为179的数据,👇

于是我们填写参数的时候也让去他去修改179这个标签

修改的时候名字重复就不要修改了,要改,里面没有存在的名字,同时记得把id改为179,因为我们要去改179这个标签。

5.2.3 执行测试并观察结果

对比修改前和修改后的结果,我们看查询那个接口得到的结果。


6、第五个接口:删除标签接口(删除)

6.1. 接口文档

简要描述

删除标签接口

请求URL
https://api.weixin.qq.com/cgi-bin/tags/delete?access_token=ACCESS_TOKEN

请求方式
POST

请求参数

复制代码
{"tag":{"id":134}}

返回示例

json 复制代码
{"errcode":0,"errmsg":"ok"}

返回参数说明

参数名 类型 说明
errcode int 错误码,0表示成功
errmsg string 错误信息,ok表示成功

错误码说明

错误码 错误码说明
-1 系统繁忙,此时请开发者稍候再试
45057 该标签下粉丝数超过10w,不允许直接删除
45058 不能修改0/1/2这三个系统默认保留的标签

6.2. 开始测试

6.2.1 构造请求

我们依然是分析好接口文档,然后构造出对应的请求,仍然要注意把第1个接口返回得到的鉴权码token复制到该接口里面去。

6.2.2 删除哪一个数据

我们修改了id为179这个标签,这次我们将id为179的这个标签给删除掉。

删除前和删除之后的一个比对:👇

7、第六个接口:文件上传接口

7.1. 接口文档

简要描述

文件上传接口

请求URL
https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=access_token

请求方式
POST

请求参数说明

参数名 必选 类型 说明
media 是 string 文件附件

返回示例

json 复制代码
{"url":"http:\/\/mmbiz.qpic.cn\/mmbiz_png\/gwVWn1TZHhVh3ibHyjRYXwr7G3FibZB99CpOIGo984hkklgQRgDNNnt1cfoVRJzKJlmMUDaNWbLhFPoaxwmiaIUuQ\/0"}

返回参数说明

参数名 类型 说明
url string 上传之后的文件地址

7.2. 开始测试

7.2.1 构造请求

分析理解接口文档,然后还是一样的,在第1个接口中把那个鉴权码给拷贝过来。

7.2.2 传递文件参数

根据他的接口要求,我们文件的参数名为media我们按照如下图所示去上传一个文件

1)由于是上传一个普通文件,并不是二进制,所以我们在请求体中选择form-date👇

2)填写参数名media

3)在你的磁盘要选择你要上传的文件

7.2.3 发送请求并看结果

我们复制他返回的路径,去浏览器里面访问一下,看能不能访问成功:👇

如图所示,能够看到结果,说明我们文件提交成功了。

到此,我们的微信公众平台所有接口也就测试完毕~~


8、引出接口关联

但是从上述的测试中,我们不难发现,第1个接口是获取我们的鉴权码,也就是说给你办理一个身份证。

我们后续的5个接口,每一个接口都需要去带上这个鉴权码,我们上述的操作都是自己手动一个一个的去复制的。

显然这样的操作是很麻烦的😖😖

这时有老铁就问他,主包,有没有简单又轻松的办法推荐一下😏

肯定是有滴,它涉及的是一个接口关联的问题,啥意思呢?

咱第1个接口返回的结果作为后续所有接口的参数,这就是接口关联。

那既然这样的话,我们就可以想办法把第1个接口返回的结果值给提取出来,存到一个变量之中,后续你去使用该接口返回的结果值,直接用变量名去取就行了~~😁

老铁们,懂我意思不?😄 懂了咱接下来就直接开整Postman接口关联!

对了,铁铁们,这篇笔记俺可是肝了很久很久......希望各位铁子大佬能赏脸点个赞、关个注,顺便在评论区冒个泡👀,让我知道你们还活着(不是)。放心,我会慢慢摸过去回访的~🚶‍♂️💨


四、Postman接口关联项目实战

1、为什么使用接口关联

从上述的例子中,原因有2:

原因1:鉴权码需要手动复制

上述我们测试了6个接口,第1个接口返回的鉴权码作为后面5个接口的参数值👇

那么每一个接口你都自己去复制的话,会很麻烦,所以我们会使用接口关联来优化。

原因2:增删改无法形成闭环

增加修改和删除,这三个接口无法形成闭环,是什么意思呢?举个例子,我们新增一条数据,它的id是5,但是你的修改和删除都是依赖id编号的,如果你不指定你要修改哪一个编号的标签,以及不指定你要删除的哪一个编号的标签,此时是无法完成修改删除这个操作。

如果你手动指定了,但是比如你新增了编号为6的数据,你去修改和删除的时候,你没有去指定编号为6,导致后续我们的数据只会越来越多。

而如果我们新增编号为6的数据,这个新增编号为6的数据,我们作为修改和删除的参数,让他们做一个结果关联,那么你每一次测试的时候,你新增的这条记录如果新增成功,那么你就对其进行修改和删除。如此一来,数据库中的数据就不会增多,而是形成闭环。

2、什么是接口关联

从上述的解释中,我们也不能难看出。
所谓的接口关联就是上一个接口的返回值作为下一个接口的参数。

3、实现接口关联的前提

接下来我们会以鉴权码这个例子为例,给大家介绍如何去做接口关联,而对于增删改数据闭环,我们将在第6点中进行练手实战。

但是实现接口关联的前提:你得先学会如何去用代码获取请求的四要素和响应的四要素👇

咱先使用一个接口来进行这个代码测试:比如https://www.bilibili.com/如下

3.1. 代码获取请求的四要素

3.1.1 获取请求方式
java 复制代码
// pm : Postman内置对象,所有脚本操作都要从pm开始
// request : 请求对象,代表当前发送的接口请求
// method : 属性,代表请求方式
console.log(pm.request.method);

解释1:要选择响应之后

解释2:代码解释如下

3.1.2 获取请求路径
java 复制代码
// pm : Postman内置对象
// request : 请求对象
// url : 属性,代表当前接口完整请求地址
console.log(pm.request.url);
3.1.3 获取请求头
1)获取所有请求头的数据
java 复制代码
// pm : Postman内置对象
// request : 请求对象
// headers : 请求头集合对象
console.log(pm.request.headers);
2)获取指定请求头中的数据
java 复制代码
// pm : Postman内置对象
// request : 请求对象
// headers : 请求头集合
// get() : 方法,根据名字获取单个请求头
console.log(pm.request.headers.get("User-Agent"));
3.1.4 获取请求体
java 复制代码
// pm : Postman内置对象
// request : 请求对象
// body : 属性,代表请求体内容
console.log(pm.request.body);

3.2. 代码获取响应的四要素

3.2.1 获取响应码
java 复制代码
// pm : Postman内置对象
// response : 响应对象,代表服务器返回的数据
// code : 属性,代表HTTP响应状态码
console.log(pm.response.code);
3.2.2 获取响应头
1)获取响应头中的所有数据
java 复制代码
// pm : Postman内置对象
// response : 响应对象
// headers : 响应头集合对象
console.log(pm.response.headers);
2)获取响应头中的指定数据
java 复制代码
// pm : Postman内置对象
// response : 响应对象
// headers : 响应头集合
// get() : 方法,根据名称获取单个响应头
console.log(pm.response.headers.get("Content-Type"));
3.2.3 获取响应体
1)如果响应类型是文本

如果响应的类型是文本就可以得到文本类型的响应体

java 复制代码
// pm : Postman内置对象
// response : 响应对象
// text() : 方法,把响应体以**纯文本**格式返回
console.log(pm.response.text());
2)如果响应类型是JSON

如果响应的类型是JSON就可以得到JSON类型的响应体

java 复制代码
// pm : Postman内置对象
// response : 响应对象
// json() : 方法,把响应体自动解析成JSON对象,方便取值
console.log(pm.response.json());

如果你的响应类型不是json,它就会报错

举我们之前测过的接口:

3.2.4获取Cookies
java 复制代码
// pm : Postman内置对象
// cookies : 属性,获取当前接口所有Cookie信息
console.log(pm.cookies);

4、实现接口关联的两个步骤

  • 第一步:先获取上一个接口的返回值中的指定的数据。
  • 第二步:在下一个接口的参数里面使用获取到的数据。

接下来使用两种方式去完成这两步:

4.1. 方式1:使用JSON提取器提取返回的值

注意:使用【JSON提取器】:只能针对JSON数据

第一步:使用JSON提取器获取上一个接口的返回值中的指定的数据

1)首先我们看第1个接口返回的结果是JSON,里面有鉴权码

2)选择我们的脚本

这里必须注意,这个脚本一定是写在第1个接口下的,因为他返回的是鉴权码,而我们要提取的是他的鉴权码,所以你一定是写在他下面。

3)使用代码得到响应得到的Json数据

java 复制代码
var res_value = pm.response.json();

4)响应体中根据键得到鉴权码值

java 复制代码
var res_token = res_value.access_token;

5)把获取到的token值设置为集合变量,使得它被当前项目中所有接口共享。

java 复制代码
pm.collectionVariables.set("access_token", res_token);

为什么设置为集合变量呢?首先我们有哪些变量,如下图所示?👇

如果你设置为全局变量,那所有的项目(集合),都能够共享他是不太好的。

如果你设置为集合变量,那只是当前的项目共享。

如果你设置为局部变量,只是某一个接口共享。

第二步:在下一个接口的参数里面使用获取到的数据

如何在下一个接口的参数里面去获取到刚刚集合变量中提取到的鉴权码?

使用{``{名称}}的方式获取,👇

4.2. 方式2:使用正则表达式提取返回的值

注意:使用【正则表达式】:适用于文本格式数据。

文本格式包括:

  • 纯文本(.txt, .csv, .log)
  • 标记语言(HTML, XML, Markdown)
  • 数据交换格式(JSON, YAML, TOML)
  • 程序源代码(.py, .js, .java 等)
  • 编码文本(Base64、URL编码)
  • JSON 是纯文本格式,可用记事本打开。
第一步:使用正则表达式获取上一个接口的返回值中的指定的数据

第1种方式,我们是使用json提取器来提取我们的鉴权码,那么接下来这种方式,我们使用正则表达式,如何做呢?跟着我一步一步的走:

1)我们先获取响应体,以文本格式的方式获取

java 复制代码
var res_value = pm.response.text()

2)开始从这段结果中匹配出我们的值

第一小步骤:获取目标值左边界+目标值+目标是右边界

你左边界右边界分别取多少?看你能否匹配到我的目标值,具体问题具体分析即可。

第二小步骤:将目标值换为正则表达式(.*?)

java 复制代码
var match_value = res_value.match('"access_token":"(.*?)","expires_in"');

3)取出你匹配到的值,设置为集合变量

java 复制代码
pm.collectionVariables.set("access_token", match_value[1]);

解释,下标为什么是1不是0?

第二步:在下一个接口的参数里面使用获取到的数据

如何在下一个接口的参数里面去获取到刚刚集合变量中提取到的鉴权码?

使用{``{名称}}的方式获取,👇


注意:如果你的接口返回的是json数据,那么这两种方式都可以用,如果你的接口返回的不是json数据,则只能用第二种。


5、一图解释原理

接下来我将画一张图解释它的原理,如下图所示👇


6、使用接口关联完成增删改闭环

Ok,知道上述的操作之后,我们这一步就稍微快一点,直接使用JSON提取器来完成。

首先你得知道,新增的返回值有id,这个id作为修改和删除的参数,所以我们提取的时候,脚本一定是写在新增接口下面的。

1)第一步:使用JSON提取器提取id值

js 复制代码
//获取JSON格式响应体
var jsonData = pm.response.json();
//打印出来看现象
console.log(jsonData);
//提取他的id值
var tagId = jsonData.tag.id;

//将id值设置为集合变量
pm.collectionVariables.set("tagId", tagId);

2)第二步:在修改和删除接口中使用{{tagId}}获取这个id值

最后执行成功:👇

新增了一个id为185的标签

修改删除前id=185的标签

修改后的id=185的标签

删除之后就没有id=185的标签


OK,到此我们本期就结束咯~


五、写在最后

🎯 看到这里,辛苦啦!歇一歇,喝口水,让眼睛放松一下
这篇笔记我写了很久,如果对你有哪怕一点点帮助,请点一下「关注」 。
后面我还会继续分享很多自学干货笔记,都是自己边学边总结的,依然会是零基础能看懂、每一步都截图的那种详细笔记 。
我是学生,没什么能送你的,只能保证每一篇都认真写、不藏私。
我能给的,就是一篇一篇亲手整理的、零基础也能看懂的干货笔记。
你的每一次关注,都是我继续写下去的动力。
谢谢你的时间,我们下一篇笔记见 👇
(如果这篇笔记有写错的地方,也请一定在评论区告诉我,我会第一时间修改)

下一篇见咯,兄弟们~~


相关推荐
EVE จุ๊บ21 小时前
playwright和selenium的区别是什么
selenium·测试工具
Meta Luo2 天前
页面改版后自动化用例大量失败,应该怎么维护?
运维·功能测试·测试工具·自动化
释槐鸟~3 天前
还不知道RIDE工具怎么装吗
测试工具·自动化
有技巧搬砖4 天前
为什么锂电池组的电池老化测试很重要?
测试工具·锂电池·电池老化
蒲公英内测分发4 天前
智能手表卖出去后,包装、说明书和官网里的 App 下载入口怎么统一?
前端·人工智能·测试工具·智能家居·智能硬件·智能手表
蒲公英内测分发4 天前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表
无语的小歪歪4 天前
ATF 智测 1.0
python·测试工具·集成测试
SHENGWEI胜为4 天前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
xie881018025 天前
长表格跨页重复表头:排版上的做法
测试工具
老孟说禅5 天前
测试工具示波器的使用
测试工具