JMeter 性能测试实战笔记

本文档是一份详细的 JMeter 指南,涵盖了从创建测试计划、执行测试到解读性能结果的全过程。

一、创建测试计划

一个完整的测试计划是执行性能测试的基础。下面将分步介绍如何创建一个针对文件上传接口的测试场景。

第一步:添加线程组 (定义并发用户)

“线程组”是用来模拟并发用户的核心元件。它决定了有多少个“虚拟用户”同时去请求您的服务。

  1. 在左侧的树状视图中,用鼠标右键点击 ▲ Test Plan
  2. 在弹出的菜单中,依次选择 添加 (Add) -> 线程 (Users) -> 线程组 (Thread Group)
  3. 点击新创建的 线程组,您会在右侧看到它的配置选项。请按照如下计划来填写:
    • 线程数 (Number of Threads): 20 (模拟20个并发用户)
    • Ramp-up Period (in seconds): 10 (在10秒内让这20个用户全部启动)
    • 循环次数 (Loop Count): 100 (每个用户重复请求100次)
    • 也可以设置一段时间
      Image

第二步:添加 HTTP 请求 (定义要测试的接口)

现在我们需要告诉 JMeter,这些虚拟用户具体要请求哪个接口。

  1. 在左侧的树状视图中,右键点击您刚刚创建的 线程组
  2. 依次选择 添加 (Add) -> 取样器 (Sampler) -> HTTP 请求 (HTTP Request)
  3. 点击新创建的 HTTP 请求,在右侧面板中进行核心配置:
    • Web 服务器 (Web Server)
      • 服务器名称或IP (Server Name or IP): localhost
      • 端口号 (Port Number): 8080
    • HTTP 请求 (HTTP Request)
      • 方法 (Method): 选择 POST
      • 路径 (Path): /api/convert/JODConverter
      • 重要: 如果要上传文件,记得勾选 Use multipart/form-data for POST 复选框。
  4. 如果要配置上传文件:
    • 切换到下方的 Files Upload 标签页。
    • 点击 添加 (Add) 按钮。
    • 填写文件信息:
      • 文件路径 (File Path): 点击 Browse... 选择您准备好的测试Word文档。
      • 参数名称 (Parameter Name): file (必须和后端接口的 @RequestParam("file") 一致)
      • MIME 类型 (MIME Type): application/vnd.openxmlformats-officedocument.wordprocessingml.document

第三步:添加监听器 (查看测试结果)

没有监听器,我们就看不到任何测试结果。

  1. 再次右键点击 线程组
  2. 依次选择 添加 (Add) -> 监听器 (Listener) -> 聚合报告 (Aggregate Report)
    • 这个监听器会在测试运行时,以表格形式实时汇总和展示平均响应时间、吞吐量、错误率等核心性能指标。
  3. (可选,推荐用于调试) 右键点击 线程组 -> 添加 (Add) -> 监听器 (Listener) -> 查看结果树 (View Results Tree)
    • 这个监听器可以看到每一次请求的详细信息。注意:在正式进行大并发量测试时,请禁用它(右键点击 -> 禁用),因为它会消耗较多内存。

二、执行测试与保存结果

测试计划创建好后,下一步就是执行它并保存结果以供分析。推荐使用命令行模式执行正式的压测。

方法一:通过 GUI 保存结果

此方法适用于快速查看和调试,不推荐用于正式压测。

  1. 在 JMeter 图形界面中,选中您的 聚合报告 (Aggregate Report) 监听器。
  2. 在右侧的配置面板中,找到 文件名 (Filename) 输入框。
  3. 点击 浏览 (Browse)... 按钮,选择一个路径并输入一个文件名,例如 /Users/sunyuan/develop/project/word2pdf/performance_results/jmeter_results.csv。 每次运行测试时,结果会自动追加到这个文件中。

方法二:使用命令行执行压测(推荐的最佳实践)

虽然图形化界面便于设计脚本,但官方强烈建议使用命令行模式来执行真正的压力测试。这样做可以避免 GUI 带来的额外性能开销,确保测试结果的纯净和准确。

  1. 保存您的 JMeter 测试计划:

    • 在 JMeter 图形界面中,点击 文件 (File) -> 保存测试计划为 (Save Test Plan as)
    • 将测试计划保存为一个 .jmx 文件,例如 /Users/sunyuan/develop/project/word2pdf/shell/test_plan.jmx
  2. 通过命令行执行:

    • 打开一个新的终端窗口。
    • 使用以下命令来执行测试。这个命令会自动处理结果文件的保存和后续的 HTML 报告生成。

    Bash

    # 定义变量,方便管理
    BASE_DIR="/Users/sunyuan/develop/project/word2pdf"
    TEST_PLAN="${BASE_DIR}/shell/test_plan.jmx"
    RESULT_FILE="${BASE_DIR}/performance_results/jmeter_results.csv"
    REPORT_DIR="${BASE_DIR}/performance_results/html_report"# 确保结果文件和报告目录是干净的 (JMeter要求报告目录为空)
    rm -f $RESULT_FILE
    rm -rf $REPORT_DIR
    mkdir -p $REPORT_DIR# 执行 JMeter 命令行压测
    jmeter -n -t $TEST_PLAN -l $RESULT_FILE -e -o $REPORT_DIR
    

    命令参数解析:

    • -n: non-GUI mode,以无图形界面模式运行。
    • -t <file.jmx>: test plan,指定要运行的测试计划文件。
    • -l <file.csv>: log file,指定用于记录测试结果的日志文件。
    • -e: end,表示在测试结束后生成 HTML 报告。
    • -o <directory>: output directory,指定存放 HTML 报告的输出目录。此目录必须为空或不存在

三、结果分析

测试完成后,需要对结果数据进行详细解读,以评估系统性能。

聚合报告 (Aggregate Report) 结果解读

  • Label:是我们测试的请求的标签或名称。

  • # Samples (样本数): 总共完成了 200 次请求。

  • Average (平均响应时间): 所有请求的平均响应时间是 1808 毫秒 (约 1.81 秒)。这是评估服务处理速度最核心、最直观的指标。

  • Median (中位数): 50% 的用户响应时间低于 1754 毫秒。比平均值更能抵抗极端值的影响。

  • 90% Line (90百分位): 90% 的请求响应时间都在 2060 毫秒 (2.06 秒) 以内。

  • 95% Line (95百分位): 95% 的请求响应时间都在 2183 毫秒 (2.18 秒) 以内。这是衡量服务稳定性的一个常用指标 (SLI/SLO)。

  • 99% Line (99百分位): 99% 的请求响应时间都在 2420 毫秒 (2.42 秒) 以内,帮助我们了解最慢请求的情况。

  • Min / Maximum (最小/最大响应时间): 最快的一次花费了 1.58 秒,最慢的一次花费了 2.83 秒

  • Error % (错误率): 0.00% 是一个完美的指标!说明在当前并发压力下,服务非常稳定。

  • Throughput (吞吐量): 服务器每秒钟能成功处理 1.1 个转换请求。这是衡量服务器处理能力的核心指标,通常也称为 QPS (Queries Per Second)。

  • Received/Sent KB/sec: 每秒接收和发送的数据量。发送 (Sent) 远大于接收 (Received),符合上传大文件的场景。

jmeter_results.csv 文件列名分析

CSV 文件记录了每一次请求的详细数据,便于进行更深入的分析。

列名示例值含义
responseCode200HTTP 响应状态码。200 代表 OK (成功)
threadNameword2pdf thread group 1-1发出请求的具体虚拟用户(线程)的名称
dataTypetext响应数据的类型。
successtrue请求是否成功。错误率 (Error %) 就是根据此列计算的。
bytes740响应数据的大小(字节)。成功后只返回小段 JSON,所以值很小。
sentBytes1691146发送数据的大小(字节)。此值很大,代表上传的 Word 文档大小。
grpThreads2请求发生时,其所在线程组内的活跃线程数。
allThreads2请求发生时,整个测试计划中的总活跃线程数。
URLhttp://127.0.0.1:8080/...请求的完整 URL 地址。
Latency1792(重要指标) 从发出请求到接收到响应第一个字节的时间 (ms),主要衡量服务器端处理时间
Connect0建立 TCP 连接的时间 (ms)。通常只有首个请求耗时,后续复用连接,时间为 0。

四、常见问题与技巧

Q: 点击绿色启动按钮时,应该选中哪个元件?

A: 您不需要选中任何特定的元件。

JMeter 的启动按钮(绿色的三角箭头 )是针对整个测试计划 (Test Plan) 生效的。无论您当前在左侧的树状视图中选中了哪个元件,当您点击启动按钮时,JMeter 都会从最顶层的 Test Plan 开始,执行其中所有未被禁用的元件。

如果不测试的元件,要禁用

关于启动和停止的额外提示

  • 启动 (Start): 绿色的 按钮。
  • 停止 (Stop): 红色的 按钮。这会立即停止所有线程,可能会中断正在进行的请求。
  • 优雅地停止 (Shutdown): 停止 按钮旁边的那个灰色 按钮。这会允许当前正在执行的请求完成后再停止所有线程,是更推荐的停止方式
  • 清除结果 (Clear All): 工具栏上的扫帚图标 🧹。点击它会清除所有监听器(如 聚合报告查看结果树)中已有的测试结果,方便您开始一次全新的测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90853.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90853.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90853.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像处理:第二篇 —— 选择镜头的基础知识及对图像处理的影响

一、图像传感器的典型应用图像处理过程大致可分为如下四步&#xff1a;1.拍 摄 按下快门&#xff0c;拍摄图像2.传 送 将图像数据由照相机传送到控制器。3.处 理 前处理 : 对于图像数据进行加工&#xff0c;使其特征更加明显。测算处理 : 根据图像数据对于损…

Linux 系统文件夹结构及用途说明

Linux 系统采用树形文件结构&#xff0c;每个目录都有明确的功能定位&#xff0c;遵循 FHS&#xff08;Filesystem Hierarchy Standard&#xff09; 标准。以下是新安装系统后主要文件夹的用途&#xff1a;一、根目录&#xff08;/&#xff09;核心文件夹1. /bin&#xff1a;基…

[spring6: HttpSecurity]-全新写法

HttpSecurity HttpSecurity 是 Spring Security 中用于配置基于 HTTP 请求的安全策略的核心构建器&#xff0c;支持细粒度控制请求授权、认证、登录、登出、CSRF、CORS、会话管理等安全功能。 package xyz.idoly.demo;import org.springframework.context.annotation.Bean; imp…

MIPI DSI 转 1LVDS ,分辨率1920*1080.

一款桥接芯片&#xff0c;它接收 MP DSI 输入并发送 LVDS 输出。MlPI DSI 支持至多 4 条通道&#xff0c;每条通道的最大传输速率为 1Gbps&#xff0c;总的最大输入带宽为 4Gbps&#xff0c;并且还支持 MlPI 定义的 ULPS&#xff08;超低功耗状态&#xff09;。LVDS 输出采用 V…

墨者:SQL手工注入漏洞测试(MySQL数据库)

一、SQL手工注入漏洞测试(MySQL数据库) 本文以墨者学院靶场为例&#xff0c;演示MySQL数据库的手工SQL注入全过程。靶场以自己的地址为准&#xff1a;http://124.70.64.48:47777/new_list.php?id1 二、注入原理与流程&#xff08;如下指令去掉了id之前的内容&#xff09; M…

idea打开后project窗口未显示项目名称的解决方案

前言 今天上班后&#xff0c;打开了idea发现之前project窗口中的项目都不见了&#xff0c;啥也没有&#xff0c;见下图原因 一般为配置文件*.iml 出错了。 解决方案1 方法1&#xff1a;若知道出错的具体位置与原因&#xff0c;用文本编辑器打开*.iml文件&#xff0c;找到出错位…

不一样的Mysql安装方式

文章目录MySQL介绍与安装MySQL介绍基本安装下载打开网址点击点击选择LTSwindows选择zip压缩包格式&#xff0c;mac OS选择dmg格式。不需要注册登陆网站&#xff0c;直接谢谢&#xff0c;继续下载即可。解压复制bin路径配置环境变量搜索点击环境变量点击用户变量的Path 或 系统变…

MyBatis高级应用实战指南

MyBatis高级应用实例 以下是MyBatis高级应用实例,涵盖复杂查询、动态SQL、插件开发、缓存优化等场景,帮助深入掌握MyBatis核心技术。 动态SQL构建 Example 1: 多条件动态查询 使用<if>和<where>标签实现条件组合: <select id="findUsers" resu…

Xilinx-FPGA-PCIe-XDMA 驱动内核兼容性问题修复方案

问题1&#xff1a;implicit declaration of function "mmiowb()"解决方法&#xff1a;在 libxdma.c 和 cdev_xvc.c 文件中注释掉所有 mmiowb () 函数调用问题2&#xff1a; "macro"access_ok"passed 3 arguments, but takes just 2"解决方法&…

ThreadLocal--ThreadLocal介绍

&#x1f9e0; 一、什么是 ThreadLocal&#xff1f; ThreadLocal 是 Java 提供的一种 线程本地变量机制&#xff1b; 每个线程都维护一份自己的副本&#xff1b; 它不用于多个线程共享变量&#xff0c;而是用于每个线程独立维护自己的变量副本&#xff1b; 常用于&#xff1…

AWS云S3+Glue+EMRonEC2+ReadShift

Amazon S3&#xff08;Amazon Simple Storage Service&#xff09;即亚马逊简单存储服务&#xff0c;是 AWS&#xff08;Amazon Web Services&#xff09;提供的一种对象存储服务&#xff0c;在大数据领域被广泛使用。以下是关于它的详细介绍&#xff1a;基本概念Amazon S3 主要…

OpenLayers 综合案例-轨迹回放

看过的知识不等于学会。唯有用心总结、系统记录&#xff0c;并通过温故知新反复实践&#xff0c;才能真正掌握一二 作为一名摸爬滚打三年的前端开发&#xff0c;开源社区给了我饭碗&#xff0c;我也将所学的知识体系回馈给大家&#xff0c;助你少走弯路&#xff01; OpenLayers…

语音自动生成PPT、思维导图、会议纪要、笔记、大纲、导读等

一、需要用到录音工具&#xff0c;手机端工具&#xff1a;讯飞听见二、需要用到的工具通义&#xff1a;https://www.tongyi.com/discover上传录音&#xff0c;描述一下&#xff0c;让直接给生成PPT就行&#xff0c;点生成就可以生成ppt&#xff0c;对PPT进行导出就行 三、除了生…

【MySQL】脚本化快速搭建跨平台、可定制的MySQL数据库

冗长的废话就省略了&#xff0c;大家看到这篇博客&#xff0c;效果如标题所示&#xff0c;我将提供完整的脚本&#xff0c;并用 「保姆级」的详细步骤&#xff0c;给你提供一个快速搭建跨平台、可定制的 MySQL环境的解决方案。保证无论你是 Linux 服务器管理员、macOS 开发者&a…

MAC包头、IP包头 、UDP包头中的长度含义是啥?三者之间有啥区别?

以太网帧、IP包及TCP与UDP的报文格式 下面用通俗技术的方式详细解释&#xff1a; 1. MAC包头&#xff08;以太网帧头&#xff09;中的长度 字段名称&#xff1a;EtherType/Length位置&#xff1a;以太网帧头的第13、14字节含义&#xff1a; 如果值小于等于1500&#xff08;0x0…

Multiscale Structure Guided Diffusion for Image Deblurring 论文阅读

基于多尺度结构引导扩散模型的图像去模糊 摘要 扩散概率模型&#xff08;Diffusion Probabilistic Models, DPMs&#xff09;最近被用于图像去模糊&#xff0c;其被表述为一个以模糊输入为条件的图像条件生成过程&#xff0c;将高斯噪声映射到高质量图像。当在成对的域内数据上…

git 提交时排除一个或多个文件

前言 在提交文件时&#xff0c;总是有一些文件是不需要提交的&#xff0c;比如机器上的配置文件&#xff0c;日志文件等等&#xff0c;所以在提交时就需要排除这些文件&#xff1b; 第一种方案 git add file1 file2 比如我新添加了3个文件&#xff1a; file1.txt file2.txt fil…

OpenCV 入门:基础图像操作

在计算机视觉领域&#xff0c;OpenCV 无疑是最受欢迎的开源库之一。它由 Intel 公司俄罗斯团队发起&#xff0c;如今已成为处理图像和视频的强大工具。本文我会介绍OpenCV 的基础知识&#xff0c;从图像的读写显示到实时视频流处理&#xff0c;迈出计算机视觉的第一步。 目录 …

大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(3):使用云平台最小外部依赖方案

文章大纲 1 方案总览(与官方文档映射) 2 环境准备(一步完成) 3 数据层(零代码迁移 Excel → BigQuery 或 SQLite) 4 函数声明(JSON Schema 与官方示例一致) 5 Cloud Function(**最小外部依赖**) 6 客户端调用(对齐官方 Python 示例) 7 Token 与性能对比(官方计费口…

C++高效实现轨迹规划、自动泊车、RTS游戏、战术迂回包抄、空中轨迹、手术机器人、KD树

C++ 算法汇总 基于C++的城市道路场景 以下是基于C++的城市道路场景中车辆紧急变道轨迹生成的实现方法和示例代码。内容涵盖轨迹规划算法、数学建模及代码实现,适用于自动驾驶或驾驶辅助系统开发。 基于多项式曲线的轨迹生成 采用五次多项式(Quintic Polynomial)生成平滑…