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

接口性能测试工具 - JMeter

1. 下载和运行

JMeter 是由 Java 语言编写的, 因此 JMeter 的使用依赖于 Java 环境 - JRE.

前往 oracle 网管下载 JMeter 压缩包.

Mac 用户解压完成后, 在包内的 bin 目录下运行 sh jmeter:

Windows 用户直接运行 bin 目录下的 jmeter.bat:

即可进入 JMeter 主页面:

1.1 添加环境变量

上面的方法虽可以打开 JMeter, 但是过程比较繁琐(需要手动打开 bin 目录). 如果我们把 bin 目录添加至系统环境变量, 那我们就可以直接在终端运行 jmeter 命令, 即可打开 JMeter.

步骤(macOS):

  1. vim 编辑器打开配置文件:
    vim ~/.zshrc
  2. 在编辑器中, 按 i 键进入“插入模式”(Insert Mode)
  3. 在文件的末尾, 添加下面这行代码. 记得替换为自己的 JMeter bin 目录路径:
    # JMeter Environment Variable
    export JMETER_HOME="/Users/shybee/apache-jmeter-5.5"
    export PATH="$JMETER_HOME/bin:$PATH"
  4. 按 Esc 键退出插入模式
  5. 输入 :wq 然后按回车, 保存文件并退出 vim 编辑器
  6. 关闭当前的终端窗口, 然后重新打开一个新的(让配置立即生效)

  7. 验证配置是否成功

这样, 我们可直接在终端输入 jmeter 命令, 运行 JMeter:

配置语言为简体中文(修改 bin 目录下的 jmeter.properties 文件):  

配置编码为 utf-8(修改 bin 目录下的 jmeter.properties 文件):  

修改配置后, 重启 JMeter, 配置生效.

2. 配置 HTTP 请求

2.1 创建线程组

  1. 在测试计划下, 创建线程组:
  2. 在线程组中进行配置

上述配置, 在 “循环次数” 没有勾选 “永远”, 表示指定循环次数.

如果勾选 “永远”, 那么必须打开 “调度器” 并配置 “持续时间”, 表示在 n 秒内, x 个虚拟用户不断的发起请求, 但是具体多少次请求是未知的.

2.2 配置 HTTP 请求

首先在线程组下创建 HTTP 请求:

然后进行数据配置:

需要注意的是, 填写路径时, 最开始一定要加上斜杠 “/”

此外: 该 POST 请求的数据为 Json 格式, 除了上图选择 "消息体数据" 写入数据外, 我们该需额外的在请求的 header 中配置 Content-Type 为 application/json(需配置 HTTP 信息头管理器, 下文会讲):

(将 HTTP 信息头管理器建立在 博客登录接口 下, 那么这个信息头管理器, 只对这一个接口生效)

2.3 配置查看结果树

添加查看结果树:

添加完结果树后, 点击运行, 便可发送所配置的所有请求:

注意: 上图是将结果树配置于线程组下, 即: 与所有接口同级, 那么这个结果树会查询到该线程组下所有的请求和响应信息.

如果想获取单一接口的请求结果, 那就可以把结果树添加在指定的接口下:

2.4 配置 header 信息 - 信息头管理器

大多数请求的 header 中, 都会携带用户身份验证信息(如: cookie, token 令牌), 如果不携带这些信息, 则请求无法发出.

拿博客系统举例, 当用户登录成功后, 前端会把 "loginUserToken" 存储到浏览器的 localStorage 中, 当用户再次发送请求时(如获取博客列表接口), 前端就会把这个 token 放在请求的 header 中, 供后端进行校验, 若后端发现请求中携带 token 且值正确, 就正确返回响应. 若请求的 header 中未携带 token, 则被拦截器拦截, 进行强制登录操作.

使用 postman 访问接口举例. 

不携带 token:

携带 token:

因此, 我们在使用 JMeter 发送请求时, 也要对 header 进行相应的配置, 否则请求根本无法发送成功:

因为只有 获取博客列表接口 需要 token 信息, 而登录接口并不需要, 因此, 为了使得这个配置了 token 的信息头管理器只对 获取博客列表接口 生效, 我们只需将它建立在 获取博客列表接口 下即可:

配置完成后, 请求便可发送成功:

2.5 HTTP 请求默认值

对于同一个项目, 存在许多重复的配置, 如: URL 中的协议类型/IP/端口号.

对于这些重复的配置, 我们就可以创建一个 "HTTP 请求默认值", 将重复的部分管理起来, 这样就不需要每创建一个接口 都填写这些重复信息了:

发送请求时, "HTTP 请求默认值" 中的信息, 就会拼接到 URL 中:

因此, 当多个接口发起请求时存在多个重复的 HTTP 配置, 我们就可以将这些重复的配置提取出来, 放到 "HTTP 请求默认值" 中, 后续的 HTTP 取样器(接口请求) 中, 就无需再添加这些配置, 发起请求时会读取 "HTTP 请求默认值" 中的配置并进行拼接.

但是, 配置的读取遵循 "就近原则", 只有当接口请求中没有配置时, 才会从读取 "HTTP 请求默认值" 中读取, 若接口请求中配置了, 则读取接口请求中的数据.

2.6 提取请求返回值 - JSON 提取器

在开发中, 一个请求的返回值作为另一个请求的参数, 是很常见的时间, 比如: 获取博客列表请求的 header 中, 需要携带 登录请求 返回的 user_token 信息; 获取博客详情请求的参数, 需要携带 获取博客列表请求 的 bolg_id.

此时, 我们就可以使用 Json 提取器, 获取某个请求的响应中 Json 格式的 body 中的信息.

要提取 Json 格式的数据, 我们需要先了解 Json 操作符.

2.6.1 Json 操作符

获取 Json 数据, 需要用到 Json 操作符:

OperatorDescription
$表示根元素
@当前元素
*通配符。所有节点
..选择所有符合条件的节点
.<name>子元素
['<name>' (, '<name>')]括号表示子元素或子元素列表
[<number> (, <number>)]数组索引或索引列表
[start:end]数组切片操作符
[?(<expression>)]过滤器表达式。表达式必须评估为布尔值。

获取响应 body 中指定字段时, 通常使用: $..字段名

若该字段有多个, 要获取第一个, 则用: $..[0]字段名

如, 获取 body 中所有的 id 字段(先选择 JSON Path Tester):

获取 body 中第一个 id 字段:

2.6.2 配置 Json 提取器

在需要提取返回值的请求下, 添加一个 Json 提取器. 例如, 我们需要提取登录接口请求返回的 user_token 数据, 则在 登录接口请求 下建立一个 Json 提取器:

使用 Json Path Tester 进行测试, 可知该 token 数据可用 $..token 表示:

注意: 使用提取出的变量, 需要通过 ${变量名} 进行使用:

这样, 在其他请求发送时, 就会携带 登录接口 返回的 token 字段:

除了上述提取登录请求的返回值外, 也可以提取博客列表请求的返回值, 作为博客详情页请求的参数:

2.7 JSON 断言

判断一个请求的结果是否符合预期, 不仅仅是查看状态码, 而是要查看响应的数据是否正确, 此时就需要用到 JSON 断言.

对断言进行配置:

若请求结果符合断言, 则请求成功, 若请求结果不符合断言, 则请求失败:

常用正则表达式:

  • /d 匹配数字
  • /S 匹配非空字符

未完待续

http://www.lryc.cn/news/625813.html

相关文章:

  • JB4-9-任务调度
  • 《飞算Java AI使用教程:从安装入门到实践项目》
  • 12.3.2设置背景色12.3.3 创建设置类12.4 添加飞船图像 12.4.1 创建Ship 类 12.4.2 在屏幕上绘制飞船
  • 用MacBook进行LLM简单人类指令微调
  • 蓝凌EKP产品:JSP 项目性能基于业务维度的 JS 压缩合并方案优化实战
  • 供水设备智慧化管理物联网解决方案:远程监控与运维
  • 操作系统:多线程、进程管理、内存分配、任务调度等
  • IC验证 AHB-RAM 项目(二)——接口与事务代码的编写
  • 比赛准备之环境配置
  • Nginx前后端分离反代(VUE+FastAPI)
  • 卫生许可证识别技术:通过OCR与NLP实现高效合规管理,提升审核准确性与效率
  • Apache IoTDB 大版本升级记录(成熟的2.0.2版本)
  • 汇编语言学习2---GNU Debugger (GDB)
  • PiscCode迅速集成YOLO-Pose 实现姿态关键点轨迹跟踪应用
  • 疏老师-python训练营-Day50预训练模型+CBAM注意力
  • PHP如何使用JpGraph生成折线图?
  • NVIDIA 优化框架:Jetson 平台 PyTorch 安装指南
  • vue,H5车牌弹框定制键盘包括新能源车牌
  • 楼宇自控系统的应用,已然成为智能建筑行业发展方向
  • 【网络运维】Playbook部署文件:Files模块库&JINJA2模板
  • 18650锂电池自动化生产线:智能集成提升制造效能
  • Qt猜数字游戏项目开发教程 - 从零开始构建趣味小游戏
  • 厚板数控矫平机的“第三堂课”——把视角拉远,看看它如何重塑整条制造链
  • AUTOSAR进阶图解==>AUTOSAR_SWS_FlashEEPROMEmulation
  • 星链之供应链:SpaceX供应链韧性密码,70%内部制造+模块化设计,传统航天企业如何追赶?
  • 数字孪生 :提高制造生产力的智能方法
  • 写代码的方式部署glm-4-9b-chat模型:gradio和api两种模式
  • python学习DAY46打卡
  • Apache ECharts 6.0.0 版本-探究自定义动态注册机制(二)
  • npm下的scratch(少儿编程篇)