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

JMeter 性能测试实战笔记

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.lryc.cn/news/598730.html

相关文章:

  • 云端哨兵的智慧觉醒:Deepoc具身智能如何重塑工业无人机的“火眼金睛”
  • 无人机正摄影像自动识别与矢量提取系统
  • 无人机保养指南
  • 无人机速度模块技术要点分析
  • 04.建造者模式的终极手册:从快餐定制到航天飞船的组装哲学
  • (LeetCode 面试经典 150 题) 56. 合并区间 (排序)
  • Flutter 主流 UI 框架总结归纳
  • 让UV管理一切!!!
  • Django实时通信实战:WebSocket与ASGI全解析(上)
  • 使用钉钉开源api发送钉钉工作消息
  • kafka的shell操作
  • kafka消费者组消费进度(Lag)深入理解
  • 【阿里云-ACP-1】疑难题解析
  • 力扣189:轮转数组
  • Linux基础服务(autofs和Samba)
  • 深圳三维扫描铸件形位公差尺寸测量3d偏差检测-中科米堆CASAIM
  • LeetCode 2322:从树中删除边的最小分数
  • Elasticsearch 的聚合(Aggregations)操作详解
  • multiprocessing 模块及其底层机制 spawn_main 在大模型应用中的场景
  • STM32-FSMC
  • multiprocessing模块使用方法(一)
  • S7-1500 与 ET200MP 的组态控制通信(Configuration Control)功能实现详解(上)
  • 设备虚拟化技术IRF
  • 力扣刷题(第九十七天)
  • 智慧驾驶疲劳检测算法的实时性优化
  • 「Linux命令基础」用户和用户组实训
  • 雷达使用的MSOP端口和DIFOP端口是什么意思
  • Spring-狂神说
  • Claude4、GPT4、Kimi K2、Gemini2.5、DeepSeek R1、Code Llama等2025主流AI编程大模型多维度对比分析报告
  • 【PZ-ZU7EV-KFB】——ZYNQ UltraScale + ZU7EV开发板ARM/FPGA异构计算开发平台,赋能多域智能硬件创新