当前位置: 首页 > news >正文

【玩转 Postman 接口测试与开发2_019】第15章:利用 Postman 初探 API 性能测试(含实战截图)

book cover for the 2nd version

《API Testing and Development with Postman》最新第二版封面

文章目录

  • 第十五章 API 接口性能测试
    • 1 性能负载的类型
    • 2 Postman 负载配置
    • 3 Postman 性能测试实战
      • 3.1 Fixed 型负载下的性能测试
      • 3.2 基于数据驱动的 Postman 接口性能测试
    • 4 性能测试的注意事项

写在前面
终于来到了本书最后一章 API 性能测试的学习。这一章也是第二版的新增内容,虽然不能算作最后的彩蛋级福利(毕竟性能测试不是 Postman 的专长),但通过几个简单的设置也能在 Postman 进行最基础的性能测试,还是让我非常惊喜的。平时这些功能几乎都没用过,实际操作一遍发现并没有什么难度,既可以作为拓展知识阅读,也可视为今后工作中性能测试的应急方案。
至此,整本书的要点笔记就全部梳理完了,虽然前面还有三章内容没梳理,但都是一些概念性的知识,没有多少提炼的价值,后续可能会放到同一篇博文中一并介绍。相信有了书中介绍的接口测试知识,大家的 Postman 应该称得上熟练甚至小范围精通了。但这只是一个开端,我学 Postman 也是为后面的 AI 学习打下坚实的基础;后续有 Postman 相关的最新动态我也会陆续更新到本专栏,欢迎大家多提意见,共同进步。感谢关注!

第十五章 API 接口性能测试

本章要点

  • 性能负载的不同类型
  • 负载配置文件在 Postman 中的用法
  • 性能测试在 Postman 中的运行方法
  • 性能测试注意事项

API 接口通过编程进行交互,从而促成了自动化访问,同时也意味着出现性能问题。本章将基于 Postman 简要介绍接口性能测试。


1 性能负载的类型

性能测试的复杂之处在于,需要全面综合考虑可能导致系统变慢的各种因素。

性能负载主要可分三类:

  1. 处理负荷(Processing Load):是指处理单元的负荷,可能发生在计算资源开销极为昂贵的任务中;
  2. 内存负载(Memory Load):涉及临时内存(RAM)或存储设备的高内存使用率;
  3. 连接负载(Connection Load):涉及服务器可处理的最大同时连接数等。

2 Postman 负载配置

Postman 实现性能测试,主要是通过 Collection Runner 中的 Performance 配置页实现的:

图 15.1 Postman 实现基本性能测试的配置页面及负载配置选项截图

【图 15.1 Postman 实现基本性能测试的配置页面及负载配置选项截图】

目前共支持四类负载配置类型:

类型特点适用场景
Fixed(固定负载)模拟恒定不变的负载,用户数量或请求速率在整个测试期间保持不变适用于评估系统在稳定负载下的表现
Ramp up(逐步增加负载)负载从低到高逐步增加,模拟用户或请求逐渐增多的场景适用于测试系统在负载逐步增加时的响应和稳定性
Spike(突发负载)短时间内负载急剧增加,模拟突发的高流量场景适用于测试系统在突发高负载下的表现和恢复能力
Peak(峰值负载)负载在短时间内达到峰值,模拟系统在高峰期的表现适用于评估系统在最大负载下的性能和稳定性

切换每个类型,下方都会显示该类型的可视化配置图,表征虚拟用户数(Virtual Users,即 VUs)随时间的变化趋势:

图 15.2 Fixed 型负载配置示意图

【图 15.2 Fixed 型负载配置示意图】

图 15.3 Ramp up 型负载配置示意图

【图 15.3 Ramp up 型负载配置示意图】

图 15.4 Spike 型负载配置示意图

【图 15.4 Spike 型负载配置示意图】

图 15.5 Peak 型负载配置示意图

【图 15.5 Peak 型负载配置示意图】

由于在 PostmanCollection Runner 进行性能测试,只能模拟最多 100 个虚拟用户节点发起请求,不仅测试规模有限,性能参数的监控也不够全面,仅供了解即可。

3 Postman 性能测试实战

总思路:以 GitPod 在线演示项目 ToDo List App 为基础,利用 Collection Runner 进行基础的性能测试。

3.1 Fixed 型负载下的性能测试

新建测试集合 Performance Testing,并添加示例请求 Get task list,请求接口 GET {{url}}/tasks

模拟 10 个虚拟用户节点、1 分钟内的性能测试:

图 15.6 Fixed 型负载下模拟 10 个虚拟用户 1 分钟内的性能测试配置页截图

【图 15.6 Fixed 型负载下模拟 10 个虚拟用户 1 分钟内的性能测试配置页截图】

运行结果如下:

图 15.7 性能测试进行中的实时监控情况截图

【图 15.7 性能测试进行中的实时监控情况截图】

图 15.8 性能测试完成后的结果展示页截图

【图 15.8 性能测试完成后的结果展示页截图】

从测试集合的运行统计表中还可以看到更多性能指标:

图 15.9 从测试集合的运行统计栏中还可以看到更多性能指标数据

【图 15.9 从测试集合的运行统计栏中还可以看到更多性能指标数据】

其余负载类型均可如法炮制。

3.2 基于数据驱动的 Postman 接口性能测试

本例演示上传 CSV 数据文件进行 Fixed 型负载性能测试,目标接口为 ToDo List App 项目的 PUT /tasks/1 修改接口。

首先从浏览器登录 user1user1/12345),并手动添加一则待办事项:

图 15.10 先从页面登录 user1,并新增一则待办事项

【图 15.10 先从页面登录 user1,并新增一则待办事项】

然后创建一个控制 status 状态的 CSV 文件 status.csv,内容如下(可用 Excel 另存为 csv 格式):

Status
Draft
In Progress
Complete

同时设置 PUT 请求的请求体为,注意变量名 Status 要与 CSV 文件的字段列名称保持一致:

{"description": "Do Something Great","status": "{{Status}}"
}

上传该 CSV 文件,此时会立即弹出一个临时窗口,选择随机插值后确认:

图 15.11 上传 CSV 数据文件时,在自动弹出的窗口中设置插值方式为随机插值

【图 15.11 上传 CSV 数据文件时,在自动弹出的窗口中设置插值方式为随机插值】

最后检查其他配置,再次运行 Collection Runner

图 15.12 再次确认性能测试各项配置

【图 15.12 再次确认性能测试各项配置】

运行结果如下:

图 15.13 基于数据驱动的性能测试实时运行界面截图

【图 15.13 基于数据驱动的性能测试实时运行界面截图】

图 15.14 基于数据驱动的性能测试实时 GitPod 后端运行界面截图

【图 15.14 基于数据驱动的性能测试实时 GitPod 后端运行界面截图】

图 15.15 基于数据驱动的性能测试运行结束后的界面截图

【图 15.15 基于数据驱动的性能测试运行结束后的界面截图】

此外,还可以在某个运行详情页与其他性能测试记录进行对比,并结合统计图中的选筛条件,实现更多性能指标的综合对比:

图 15.16 不同性能测试的运行指标对比效果图

【图 15.16 不同性能测试的运行指标对比效果图】

4 性能测试的注意事项

何时进行:尽量在开发周期的早期阶段进行。

性能测试中各个基准指标的确定

  • 单一负载:尽量设计得简单可靠;
  • 复杂负载:除了考察可以接受的响应速度边界,还应考虑时间随负载的变化趋势。

可重复性的考虑

性能测试对可重复性的要求相对较低,但这并不意味着可重复性不重要,而是要在有限条件下尽可能确保可重复性:

  • 尽可能确保 测试环境的标准化:相同的底层硬件、相同数量的内核环境、内存配置、相同的 Docker 容器配置等等,尽可能降低性能测试的噪音;
  • 认真考虑 初始数据 对性能测试的影响,尽量保持一致;
  • 一致的性能测试数据清理流程;
  • 建议不要总是自动删除数据,而是根据实际情况决定是否有必要保留(既有数据也可能会有助于后续调试);
  • 系统的冷启动问题:初始阶段可能性能尚不稳定;
  • 推荐制定一套明确的操作步骤文档;
  • 各性能指标的确认需要多方参与,综合考虑,避免纸上谈兵,闭门造车。

相关文章:

【玩转 Postman 接口测试与开发2_019】第15章:利用 Postman 初探 API 性能测试(含实战截图)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十五章 API 接口性能测试1 性能负载的类型2 Postman 负载配置3 Postman 性能测试实战3.1 Fixed 型负载下的性能测试3.2 基于数据驱动的 Postman 接口性能测试 4 性能测试的注意事项 写在前面 终于来到了…...

在 Qt 开发中,可以将 QML 封装成库

在 Qt 开发中,可以将 QML 封装成库,以便在多个项目中复用 QML 组件或模块。下面通过一个简单的例子说明如何将 QML 封装成库并在其他项目中使用。 1. 创建 QML 库项目 首先,我们创建一个新的 Qt 项目,专门用于封装 QML 组件。假…...

换电脑了如何快速导出vscode里的插件

当你换电脑了,之前vscode里的插件又不想全部手动重装,那么恭喜你,刷到了这篇文章。 1. 将 VSCode 添加到系统路径 macOS 打开 VSCode。按下 Command Shift P 打开命令面板。 3。 输入 Shell Command: Install ‘code’ command in PATH …...

点大商城V2-2.6.6源码全开源uniapp +搭建教程

一.介绍 点大商城V2独立开源版本,版本更新至2.6.6,系统支持多端,前端为UNiapp,多端编译。 二.搭建环境: 系统环境:CentOS、 运行环境:宝塔 Linux 网站环境:Nginx 1.21 MySQL 5.…...

9 Pydantic复杂数据结构的处理

在构建现代 Web 应用时,我们往往需要处理复杂的输入和输出数据结构。例如,响应数据可能包含嵌套字典、列表、元组,甚至是多个嵌套对象。Pydantic 是一个强大的数据验证和序列化库,可以帮助我们轻松地处理这些复杂的数据结构&#…...

springboot+redis实现将树形结构存储到redis

1.pom配置redis <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.yml文件配置&#xff1a; spring:redis:database: 0host: 1.1.1.1port: 6379timeout:…...

6、使用one-api管理统一管理大模型,并开始使用本地大模型

文章目录 本节内容介绍集中接入&#xff1a;将大模型统一管理起来当使用了大模型代理大模型代理示例 开源模型&#xff1a;如何使用Hugging Face上的模型modelscope使用 pipeline 调用模型用底层实现调用模型流式输出 如何在项目中使用开源模型使用 LangChain使用集中接入开始使…...

Windows安装Lyx

Lyx介绍 LyX 是一个基于 LaTeX 的可视化编辑器&#xff0c;可以让在不编写 LaTeX 代码的情况下使用 LaTeX 的排版功能。 需要依赖Latex环境&#xff0c;如Tex live 或者 MiKTeX Lyx 官网 Lyx官网 安装包下载 点击download默认进入最新版本下载界面 在Recent News/ News里可选…...

一文讲透大模型部署工具ollama--结合本地化部署deepseek实战

Ollama 是一个开源的人工智能平台&#xff0c;专注于在本地高效运行大型语言模型&#xff08;LLMs&#xff09;。通过 Ollama&#xff0c;开发者可以在自己的机器上运行多种大规模语言模型&#xff0c;而不必依赖于云端服务。它支持对大模型的管理和本地化部署&#xff0c;并且…...

网络防御高级

接口配置&#xff1a; SW2: [sw2]vlan 10 [sw2]vlan 20 [sw2]interface GigabitEthernet 0/0/1 [sw2-GigabitEthernet0/0/1]port link-type trunk [SW2-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20 [sw2]interface GigabitEthernet 0/0/2 [sw2-GigabitEthernet0/0/…...

使用PyCharm进行Django项目开发环境搭建

如果在PyCharm中创建Django项目 1. 打开PyCharm&#xff0c;选择新建项目 2.左侧选择Django&#xff0c;并设置项目名称 3.查看项目解释器初始配置 4.新建应用程序 执行以下操作之一&#xff1a; 转到工具| 运行manage.py任务或按CtrlAltR 在打开的manage.pystartapp控制台…...

如何定义“破坏环境”

当我们谈论破坏环境时&#xff0c;通常会从人类活动对自然生态造成负面影响的角度来定义。例如&#xff0c;大规模的森林砍伐、工业污染排放、温室气体增加等&#xff0c;都是典型的破坏环境的行为。我们常常看到这些行为导致了生态系统的破坏、物种灭绝、气候变化等问题&#…...

现代前端开发的演进与未来趋势:从工具革新到技术突破

在过去的十年中&#xff0c;前端开发经历了翻天覆地的变化。从最初的静态页面到如今复杂的单页应用&#xff08;SPA&#xff09;&#xff0c;从手动操作 DOM 到基于虚拟 DOM 的高效渲染&#xff0c;从前端“三剑客”&#xff08;HTML/CSS/JS&#xff09;到全栈框架的兴起&#…...

活动预告 |【Part1】Microsoft 安全在线技术公开课:安全性、合规性和身份基础知识

课程介绍 通过参加“Microsoft 安全在线技术公开课&#xff1a;安全性、合规性和身份基础知识”活动提升你的技能。在本次免费的介绍性活动中&#xff0c;你将获得所需的安全技能和培训&#xff0c;以创造影响力并利用机会推动职业发展。你将了解安全性、合规性和身份的基础知识…...

idea Ai工具通义灵码,Copilot我的使用方法以及比较

我用过多个idea Ai 编程工具&#xff0c;大约用了1年时间&#xff0c;来体会他们那个好用&#xff0c;以下只是针对我个人的一点分享&#xff0c;不一定对你适用 仅作参考。 介于篇幅原因我觉得能说上好用的 目前只有两个 一个是阿里的通义灵码和Copilot&#xff0c;我用它来干…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter8-对象、类与面向对象编程

八、对象、类与面向对象编程 ECMA-262 将对象定义为一组属性的无序集合。严格来说&#xff0c;这意味着对象就是一组没有特定顺序的 值。对象的每个属性或方法都由一个名称来标识&#xff0c;这个名称映射到一个值。正因为如此&#xff08;以及其他还未讨论的原因&#xff09;&…...

介绍下SpringBoot常用的依赖项

Spring Boot 是一个用于快速开发 Spring 应用程序的框架&#xff0c;它通过自动配置和依赖管理简化了开发过程。以下是一些 Spring Boot 项目中常用的依赖项&#xff1a; 1. Spring Boot Starter Web 作用: 用于构建 Web 应用程序&#xff0c;包括 RESTful 服务。依赖项: spr…...

深度解析策略模式:从理论到企业级实战应用

一、策略模式的本质&#xff1a;面向接口的算法工厂 策略模式&#xff08;Strategy Pattern&#xff09;是行为型设计模式的典型代表&#xff0c;其核心思想是将算法族抽象为独立对象&#xff0c;使其能够相互替换。这种模式完美体现了以下面向对象设计原则&#xff1a; 开闭原…...

【Linux】深入理解linux权限

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 目录 前言 一、权限是什么 二、用户和身份角色 三、文件属性 1. 文件属性表示 2. 文件类型 3. 文件的权限属性 四、修改文件的权限属性和角色 1. …...

C++STL(六)——list模拟

目录 本次所需实现的三个类一、结点类的模拟实现构造函数 二、迭代器类的模拟实现为什么有迭代器类迭代器类的模板参数说明构造函数运算符的重载- -运算符的重载和!运算符的重载*运算符的重载->运算符的重载引入模板第二个和第三个参数 三、list的模拟实现3.1 默认成员函数构…...

身份证OCR识别接口接入实战:Python/Java/PHP/C#四语言代码示例与踩坑指南

#身份证OCR, #OCR接口, #API接入, #Python示例, #Java示例, #PHP示例, #踩坑指南, #石榴智能, #实名认证, #图片识别 身份证OCR识别接口接入实战&#xff1a;Python/Java/PHP/C#四语言代码示例与踩坑指南 作者&#xff1a;石榴智能技术团队 一、前言 身份证OCR识别已经不是什…...

Sentinel-3B OLCI 3 级全球分箱地球观测降分辨率(ERR)叶绿素(CHL)数据,版本 2022.0

Sentinel-3B OLCI Level-3 Global Binned Earth-observation Reduced Resolution (ERR) Chlorophyll (CHL) Data, version 2022.0 简介 叶绿素 a 数据集提供全球网格化的表层叶绿素 a 浓度&#xff08;浮游植物生物量的替代指标&#xff09;合成数据。CHL 支持时间序列和气候…...

用C语言解决‘换硬币’问题?我来教你如何调试和验证你的循环逻辑

用C语言解决‘换硬币’问题&#xff1f;我来教你如何调试和验证你的循环逻辑 当你第一次面对"换硬币"这类组合问题时&#xff0c;那种既兴奋又困惑的感觉我至今记忆犹新。作为C语言初学者&#xff0c;理解多重循环的运作机制就像在迷宫中寻找出口——每次你以为找到了…...

AI智能体到底强在哪?为什么大家开始从“养龙虾”转向“养马”

那么AI智能体的核心能力是什么&#xff1f; 1、理解需求 它能分析你的真实意图&#xff0c;而不是只看表面的文字&#xff0c;比如让它整理这个月的消费情况&#xff0c;它明白之后&#xff0c;会读取账单&#xff0c;做分类统计&#xff0c;生成总结&#xff0c;最后输出图表。…...

智能手机相机光谱特性测量与多光谱成像技术

1. 智能手机相机光谱特性测量基础智能手机相机的光谱灵敏度函数(Spectral Sensitivity Function, SSF)和透射率函数是计算摄影领域的核心参数&#xff0c;它们决定了设备对光信号的响应特性。准确获取这些参数对色彩还原、光谱重建和白平衡校准等任务至关重要。1.1 光谱灵敏度函…...

别再死记硬背Payload了!我用XSS-Game靶场,带你拆解18种过滤规则背后的绕过逻辑

从XSS-Game靶场实战中掌握18种过滤规则的逆向思维在网络安全领域&#xff0c;跨站脚本攻击&#xff08;XSS&#xff09;始终是Web应用面临的主要威胁之一。许多开发者虽然了解XSS的基本概念&#xff0c;但当面对各种复杂的过滤规则时&#xff0c;往往不知如何系统分析并构造有效…...

一次搞懂内存取证:用Volatility3和Cobalt Strike分析工具复现VNCTF‘来一把紧张刺激的CS’

实战内存取证&#xff1a;从Volatility3到Cobalt Strike信标分析全解析 在网络安全事件响应中&#xff0c;内存取证往往是发现高级威胁的最后一道防线。当攻击者使用文件无落地的技术时&#xff0c;传统的磁盘取证可能一无所获&#xff0c;而内存中却保留着攻击行为的完整痕迹。…...

武汉国电华美16875kVA串联谐振试验装置,这手活儿细

在超高压变电站和长距离电缆的现场&#xff0c;交流耐压试验是检验设备绝缘的“最后一关”。这位老师傅经手过不少大工程&#xff0c;他说&#xff0c;面对GIS、大型变压器这些“大块头”电容性试品&#xff0c;能不能顺利“过关”&#xff0c;往往就看串联谐振装置顶不顶得住。…...

Actor Framework里的“多米诺骨牌”:一个错误如何让整个嵌套操作者链崩溃?

Actor Framework中的“多米诺效应”&#xff1a;如何避免嵌套操作者链的崩溃 在分布式系统设计中&#xff0c;Actor模型因其天然的并发处理能力而备受青睐。LabVIEW的Actor Framework(AF)通过操作者(actor)的嵌套结构&#xff0c;为复杂系统提供了模块化解决方案。然而&#x…...

每日一书㉗ | 刻意练习:为什么有些人努力一辈子还是平庸?

“本文来自「乐想屋」公众号&#xff0c;系列更新[每日一书]&#xff0c;每次5分钟&#xff0c;帮你把书读薄&#xff0c;把知识用活”先问你一个问题。你身边有没有这样的人&#xff1a;入行时间比你短&#xff0c;但能力已经甩你好几条街。他们好像没有特别刻苦&#xff0c;但…...