接口测试之Postman+Jmeter

1. 了解状态码

状态码大全:https://cloud.tencent.com/developer/chapter/13553

(1)HTTP状态码分类

状态码分类 类别名称 说明
1xx 信息性状态码 响应中:临时状态码,表示请求已经接受,告诉客户端应该继续请求,或者如果请求已完成则忽略它。
2xx 成功状态码 成功:表示请求已经被服务器成功接收、理解并接受,处理已完成。
3xx 重定向状态码 重定向:需要客户端采取进一步的操作以完成请求。通常用于重定向到其他地方,让客户端发起新请求。
4xx 客户端错误状态码 客户端错误:服务器无法处理请求,责任在客户端。例如:请求资源不存在(404)、未授权、禁止访问等。
5xx 服务器错误状态码 服务端错误:服务器在处理请求的过程中发生错误,责任在服务端。例如:服务器抛出异常、路由出错、HTTP 版本不支持等。

(2)常用 HTTP 状态码详解表

状态码 英文描述 解释说明
200 OK 请求成功。这是最理想的状态,表示服务器已成功处理了客户端的请求。
302 Found 临时重定向 。请求的资源已临时移动到 Location 响应头指定的 URL,浏览器会自动跳转。
304 Not Modified 未修改(缓存有效)。服务器告诉客户端资源自上次请求后未更改,可以直接使用本地缓存。
400 Bad Request 语法错误。客户端请求存在语法错误或参数错误,服务器无法理解该请求。
403 Forbidden 拒绝访问。服务器理解请求,但拒绝提供服务(通常是因为没有权限)。
404 Not Found 资源不存在。请求的 URL 错误或服务器上的资源已被删除。
405 Method Not Allowed 请求方式错误。例如该资源仅支持 GET 请求,但客户端使用了 POST。
428 Precondition Required 要求先决条件 。要求客户端必须发送特定请求头(如 If-Match)才能访问。
429 Too Many Requests 请求过多 。触发了频率限制,通常配合 Retry-After 响应头告知重试时间。
431 Header Fields Too Large 请求头过大。服务器不愿处理头部字段过大的请求,需减小头部大小后重试。
500 Internal Server Error 服务器内部错误。服务端发生不可预期的异常,通常需要检查服务器日志排查。
503 Service Unavailable 服务不可用。服务器由于超载或停机维护等原因暂时无法处理请求。
511 Network Authentication Required 网络认证要求。客户端需要进行身份验证(如登录 Wi-Fi 门户)才能获得网络访问权限。

2. B/S架构下Web访问过程

B/S 架构:Browser/Server,浏览器/服务器 架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可。

B/S架构的好处:易于维护升级:服务器端升级后,客户端无需任何部署就可以使用到新的版本。

* 静态资源:静态资源主要包含HTML、CSS、JavaScript、图片等,主要负责页面的展示。

* 动态资源:动态资源主要包含Servlet、JSP等,主要用来负责逻辑处理。

* 数据库:数据库主要负责存储数据。

* HTTP协议:主要定义通信规则。

* Web服务器:负责解析 HTTP 协议,解析请求数据,并发送响应数据。(比如:Tomcat)

整个Web的访问过程:

(1)浏览器发送一个请求到服务端,去请求所需要的相关资源;

(2)资源分为动态资源和静态资源,动态资源可以是使用Java代码按照Servlet和JSP的规范编写的内容;

(3)在Java代码可以进行业务处理也可以从数据库中读取数据;

(4)拿到数据后,把数据交给HTML页面进行展示,再结合CSS和JavaScript使展示效果更好;

(5)服务端将静态资源响应给浏览器;

(6)浏览器将这些资源进行解析;

(7)解析后将效果展示在浏览器,用户就可以看到最终的结果。

3. HTTP请求与响应

什么是HTTP?

HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。
什么数据传输规则?

请求数据和响应数据需要按照指定的格式进行传输。

如果想知道具体的格式,可以打开浏览器,点击`F12`打开开发者工具,点击Network来查看某一次请求的请求数据和响应数据具体的格式内容。

HTTP协议特点?

1.基于TCP协议: 面向连接,安全

2.基于请求-响应模型的:一次请求对应一次响应

3.HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的

* 缺点:多次请求间不能共享数据。(Java中使用会话技术(Cookie、Session)来解决这个问题)

* 优点:速度快。


HTTP数据请求格式

GET / HTTP/1.1 # 请求行

Host: www.baidu.com # 请求头

Connection: keep-alive

Upgrade-Insecure-R3quests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0

......
POST / HTTP/1.1

Host: www.baidu.com

Connection: keep-alive

Upgrade-Insecure-R3quests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0

......

username=root&password=1234 # 请求体

请求数据总共分为三部分内容,分别是请求行、请求头、请求体。

* 请求行: HTTP请求中的第一行数据。其中 GET表示请求方式,/表示请求路径,HTTP/1.1表示协议及版本

* 请求头: 第二行开始,格式为key: value形式。

*请求体: POST请求的最后一部分,请求体和请求头之间是有一个空行隔开,存储请求参数。

常见的HTTP请求头有:

* Host : 表示请求的主机名

* User-Agent : 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko;

* Accept :表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;

* Accept-Language :表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;

* Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。

这些数据有什么用处?

服务端可以根据请求头中的内容来获取客户端的相关信息,有了这些信息服务端就可以处理不同的业务需求。比如:

  • * 不同浏览器解析HTML和CSS标签的结果会有不一致,所以就会导致相同的代码在不同的浏览器会出现不同的效果
  • * 服务端根据客户端请求头中的数据获取到客户端的浏览器类型,就可以根据不同的浏览器设置不同的代码来达到一致的效果
  • * 这就是我们常说的浏览器兼容问题

GET请求与POST请求的区别?

  • * GET请求请求参数在请求行中,没有请求体,POST请求请求参数在请求体中
  • * GET请求请求参数大小有限制,POST没有

HTTP数据响应格式

HTTP/1.1 200 OK # 响应行

Server: Tengine # 响应头

Content-Type: test/html

Transfer-Enconding: chunked...

<html> # 响应体

<head>

<title></title>

</head>

<body></body>

</html>

响应数据总共分为三部分内容,分别是响应行、响应头、响应体。

* 响应行 :响应数据的第一行。其中HTTP/1.1表示协议及版本,200表示响应状态码,ok表示状态码的描述

* 响应头 :第二行开始,格式为key:value形式

* 响应体: 最后一部分。存放响应数据

常见的响应状态码有:

  • * 200 ok 客户端请求成功
  • * 404 Not Found 请求资源不存在
  • * 500 Internal Server Error 服务端发生不可预期的错误

常见的HTTP响应头有:

* Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;

* Content-Length:表示该响应内容的长度(字节数);

* Content-Encoding:表示该响应压缩算法,例如gzip;

* Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒


4. postman接口测试

4.1 接口测试流程

1.拿到接口文档(没有需要抓包),熟悉接口业务,接口请求四要素和响应四要素,接口鉴权方式,错误码业务等。

2.编写接口测试用例(测试点XMIND)并评审(怎么测)

正例:正常输入接口的请求四要素,查看并验证接口响应数据的正确性。

  • 接口请求四要素:请求方式,请求路径,请求头,请求数据(给)
  • 接口响应四要素:响应码,响应信息,响应头,响应数据。(返)

反例:

  • 接口鉴权反例:鉴权码为空,错误,过期等
  • 接口参数反例:参数为空,参数类型异常,参数长度异常。
  • 业务场景反例:黑名单,接口调用次数,分页(100条,每页10条)

3.使用Postman执行接口测试

4.通过Postman+Newman+Jenkins实现接口自动化测试持续集成。并且输出报告以及进行邮件,企微,钉钉通知。


4.2 使用postman创建一个接口请求

请求:接口请求四要素:请求方式,请求路径,请求头,请求数据(给)
Params(第一种传参):查询字符串参数:即在请求路径后以?传递的参数,多个参数之间用&分割。它是URL的一个部分,是所有人都可见。会自动填写。

Authorization:鉴权

Headers:请求头

Body(第二种传参):Body参数,不会显示在URL,相对安全,它包括:JSON,表单,文件等等。

  • none:没有body参数
  • form-data:即有参数,又有文件。
  • x-www-form-urlencoded:只有参数
  • raw:json,xml,html,js等等
  • binary:二进制数据
  • GraphQL:facebook在2012开发一个查询语言。

Scripts:前置脚本和后置脚本

Settings:设置

Cookies:请求Cookie,属于请求头

响应:接口响应四要素:响应码,响应信息,响应头,响应数据。(返)

Body:响应数据

Cookies:响应Cookie,属于响应头

Headers:响应头

Test Results:断言接口是否请求成功


5. Jmeter接口测试

【接口】是 【系统】内外的交互方式

  • 接受来自用户的数据(内容),返回来自系统的响应
  • 完成数据的校验、加个、存储、权限控制

接口测试工具:

  • JMeter:支持多种接口类型,还能测试性能,开源,开源进行二次扩展
  • Postman:简单、方便,局限性比较大,适合开发临时性调试
  • APIFox等:新工具,市场占有小,适合小团队尝鲜

接口的类型:

  • Restful :HTTP 传输 JSON
  • WebService: HTTP 传输 XML
  • RPC :TCP 传输 二进制

5.1 JMeter环境搭建

(1)安装好jak,并加入环境变量( JMeter 是⽤ JAVA 语⾔开发的接⼝测试和性能测试的⼯具,所有它需要依赖于 JAVA 语⾔的环境 jdk)

(2)安装好JMeter,并加入环境变量

此处略,请自行查看文档!

使用JMeter的两种方式:

  • 在 CMD 窗⼝中输⼊命令:jmeter 打开 Jmeter 界⾯
  • 直接点击 jmeter.bat ⽂件打开 Jmeter 界⾯

了解JMeter目录

  1. 备份

  2. 二进制:软件主体、配置文件

  3. 文档:内部API文档

  4. 额外:配合外部工具

  5. 依赖库:记载和调用的功能

  6. 许可证:开源许可证

  7. 可打印文档:使用说明文档


5.2 JMeter界面组件

(1)核心组件

(2)辅助组件

5.3 HTTP核心配置

什么是配置元件?

(1)HTTP 信息头管理器

(2)HTTP Cookie管理器

(3)HTTP请求默认值


练习1:

  1. 请求百度首页

  2. 请求99次

  3. 每次请求之前,打印日志:北凡

  4. 查看每次请求的结果

元件的加载顺序:

  1. 加载配置元件

  2. 加载线程组

  3. 加载取样器

  4. 为取样器加载辅助元件

  5. 父级组件

  6. 同级组件

  7. 子组件

  8. 不会收集 旁系子组件


下面是每个组件具体的参数配置建议:

1. 线程组 (Thread Group)

这里定义脚本运行的基础。

  • 线程数 (Number of Threads): 1 (练习阶段,用 1 个虚拟用户即可)。

  • Ramp-Up Period: 1 (1 秒内启动完成)。

  • 循环次数 (Loop Count): 1注意:因为你下方已经加了"循环控制器",所以这里保持为 1 即可,由控制器来接管循环)。

2. 循环控制器 (Loop Controller)

负责执行"请求 99 次"的核心逻辑。

  • 循环次数 (Loop Count): 99

3. HTTP 请求 (HTTP Request)

配置百度首页的访问地址。

  • 协议 (Protocol): https

  • 服务器名称或 IP (Server Name or IP): www.baidu.com

  • 方法 (Method): GET

  • 路径 (Path): / (或者留空,默认也是访问根目录)。

4. JSR223 预处理程序 (JSR223 PreProcessor)

负责在请求发送前执行代码(打印日志)。

  • 语言 (Language): groovy (这是 JMeter 推荐的默认语言,性能最好)。

  • 脚本 (Script): 填入以下代码:

    Groovy

    复制代码
    log.info("北凡");

    原理说明: 它是"HTTP 请求"的子节点,因此会在每次 HTTP 请求发出前执行一次。

5. 查看结果树 (View Results Tree)

  • 无需配置额外参数。

  • 使用方法: 点击 JMeter 顶部的绿色启动按钮(或快捷键 Ctrl + R),然后点击此元件,你就能看到 99 条百度首页的请求结果了。


💡 进阶小贴士

如果你想在打印日志时加上当前的次数,可以将脚本改为:

log.info("北凡 - 当前是第 " + vars.getIteration() + " 次请求");

这样在 JMeter 的日志控制台(点击界面右上角的黄色三角/数字图标可打开)里就能看到带编号的输出了。
练习2:

一共有2个取样器、3个后置处理器,每个后置处理器记录一次日志
思考:

  1. 会产生几条日志?

  2. 日志的内容是什么?

加载过程:

  • 有2个取样器,辅助元件要加载2次
  • AAA
    • 父组件
    • 同级组件
    • 子组件
  • BBB
    • 同级组件
    • 子组件

这是一个关于 JMeter 作用域(Scope)执行顺序的经典练习。理解了这个结构,你就能掌握 JMeter 最核心的逻辑。直接给出结论:

1. 会产生几条日志?

答:共产生 4 条日志。

2. 日志内容及原因分析

在 JMeter 中,后置处理器(Post-Processor)会对作用域内的每一个取样器执行一次。

具体的执行逻辑分解:

  • 取样器 AAA 执行时:

    1. 执行线程组下的 JSR223 后置处理器(因为它的作用域是整个线程组,包含 AAA)。

    2. 执行 AAA 节点下的 JSR223 后置处理器(因为它是 AAA 的私有子节点)。

    • 此时产生 2 条日志。
  • 取样器 BBB 执行时:

    1. 执行线程组下的 JSR223 后置处理器(同理,它也会作用于 BBB)。

    2. 执行 BBB 节点下的 JSR223 后置处理器(因为它是 BBB 的私有子节点)。

    • 此时产生 2 条日志。

日志内容预测:

假设你在代码里写的日志内容是其组件名称,控制台输出大致如下:

  1. 线程组下的后置处理器内容 (由 AAA 触发)

  2. AAA 下的后置处理器内容

  3. 线程组下的后置处理器内容 (由 BBB 触发)

  4. BBB 下的后置处理器内容


💡 核心知识点总结

为了让你更好地掌握,这里有三个"金律":

  1. 父子关系决定作用域: 放在线程组下的元件(如你图中最上方的后置处理器),会作用于该线程组内所有的取样器(AAA 和 BBB)。

  2. 简单控制器不影响作用域: 简单控制器 只是一个"文件夹",它不会像"循环控制器"那样改变执行次数,也不会限制后置处理器的作用范围。

  3. 执行顺序: 当一个取样器执行完后,JMeter 会先寻找并执行父级 的后置处理器,然后再执行自身子级的后置处理器。

思考题:

如果你把最上面的那个 JSR223 后置处理器 拖进 简单控制器 里(和 AAA、BBB 同级),日志数量会有变化吗?(答案是:依然是 4 条,因为 AAA 和 BBB 依然在它的作用域内。)


5.4 JMeter接口实战

(1)熟悉文档

请求:

  • 请求方法
  • 接口地址
  • 鉴权要求
  • 请求参数

响应:

  • 状态码
  • 响应头
  • 响应内容

(2)对接接口

根据接口文档要求,请求接口。


相关推荐
米丘4 小时前
从 HTTP 到 WebSocket:深入 Vite HMR 的网络层原理
http·node.js·vite
A.A呐8 小时前
【Linux第二十一章】http
linux·运维·http
白毛大侠9 小时前
WebSocket 核心:借 HTTP 建联,做自己的通信
websocket·网络协议·http
難釋懷9 小时前
OpenResty封装http工具
http·junit·openresty
cccyi79 小时前
【C++ 脚手架】cpp-httplib 与 websocketpp 库的介绍与使用
c++·websocket·http
王家视频教程图书馆10 小时前
你在 HTTPS 页面 里加载 HTTP 资源 → ,不支持 HTTPS → 握手失败。浏览器自动升级为 HTTPS。你的 8080 端口只支持 HTTP
网络协议·http·https
class心平气和21 小时前
postman-mcp-server
测试工具·postman
未来转换1 天前
计算机网络之HTTP协议详解
网络协议·计算机网络·http
m0_651593911 天前
从羊肠小道到智能高速:HTTP1到HTTP3的演进之路
http