杰瑞科技汇

Jmeter并发测试怎么操作?

JMeter 并发测试完整教程

本教程将涵盖以下内容:

Jmeter并发测试怎么操作?-图1
(图片来源网络,侵删)
  1. 准备工作:安装和配置 JMeter。
  2. 核心概念:理解线程组、控制器、元件等基本概念。
  3. 实战步骤:创建一个完整的并发测试计划,以一个简单的登录接口为例。
  4. 高级配置:参数化、断言、关联、结果分析。
  5. 最佳实践与注意事项:如何生成专业的测试报告。

第一部分:准备工作

下载与安装

  • 下载:访问 Apache JMeter 官网 下载最新版本的 Binary Zip 包。
  • 安装
    • 解压下载的 ZIP 文件到你想要的目录(D:\apache-jmeter-5.6)。
    • 重要:JMeter 是绿色软件,无需安装,解压即可使用。
  • 环境变量(可选但推荐)
    • 将 JMeter 的 bin 目录(D:\apache-jmeter-5.6\bin)添加到系统的 PATH 环境变量中,这样你就可以在任何位置通过命令行启动 JMeter。

启动 JMeter

  • 图形界面启动
    • 进入 JMeter 的 bin 目录,双击 jmeter.bat (Windows) 或在终端运行 ./jmeter.sh (macOS/Linux)。
    • 启动后,你会看到一个空的 JMeter 界面。

第二部分:核心概念

在开始创建测试计划前,你需要了解 JMeter 的几个核心组件,它们就像搭积木一样,共同构成了你的测试计划。

  • 测试计划:这是你所有测试的顶层容器,一个 JMeter 文件就是一个测试计划。
  • 线程组:这是负载测试的核心,它定义了你的并发用户如何行为。
    • 线程数:模拟的虚拟用户数量,设置为 100,就表示 100 个用户并发。
    • Ramp-Up Period (秒):所有虚拟用户启动所需的时间,线程数=100,Ramp-Up=10,表示 JMeter 会在 10 秒内均匀地启动这 100 个用户,每秒钟启动 10 个用户,如果设置为 0,则所有用户会瞬间同时启动。
    • 循环次数:每个线程重复执行测试计划的次数,设置为 1 表示每个用户只执行一次;设置为 100 表示每个用户执行 100 次,勾选“永远”则会无限循环。
  • 控制器:决定请求的执行逻辑。
    • 逻辑控制器:控制其下元件的执行顺序或逻辑,如 循环控制器如果控制器事务控制器
    • 采样器:发出一个请求,向服务器发送数据,这是测试的“动作”。HTTP请求JDBC请求
  • 配置元件:配置采样器需要的数据,通常在采样器之前执行。
    • HTTP请求默认值:设置通用的 HTTP 请求参数,如服务器名称/IP、端口、协议,避免在每个请求中重复填写。
    • 用户定义的变量:定义全局变量,如环境、URL 等。
    • CSV 数据集配置:从 CSV 文件中读取数据,用于参数化。
  • 监听器:收集、展示和保存测试结果。
    • 查看结果树:可以查看每个请求的详细请求和响应信息,非常利于调试,但性能开销大,生产环境测试时建议关闭。
    • 聚合报告:最重要的报告之一,展示吞吐量、平均响应时间、错误率等关键指标。
    • 图形结果:以图表形式展示响应时间分布。
    • 用例结果:以表格形式展示每个请求的详细信息。

第三部分:实战步骤 - 创建第一个并发测试

假设我们要对一个用户登录接口进行并发测试,接口信息如下:

  • URL: http://example.com/api/login
  • 方法: POST
  • 参数: usernamepassword

步骤 1:创建测试计划

  1. 启动 JMeter。
  2. 在左侧的 "测试计划" 上右键,选择 添加 -> Threads (Users) -> 线程组

步骤 2:配置线程组

  1. 在右侧的 "线程组" 面板中,进行如下配置:
    • 线程数: 50 (模拟 50 个并发用户)
    • Ramp-Up Period (秒): 5 (5 秒内启动完所有 50 个用户)
    • 循环次数: 1 (每个用户只登录一次)

步骤 3:添加 HTTP 请求默认值

为了避免在每个请求中都输入服务器地址,我们可以使用默认值。

  1. 在 "测试计划" 或 "线程组" 上右键,选择 添加 -> Config Element -> HTTP请求默认值
  2. 在右侧面板配置:
    • 服务器名称或 IP: example.com
    • 协议: http
    • 端口: 80 (HTTP 默认端口)

步骤 4:添加 HTTP 请求采样器

现在添加具体的登录请求。

Jmeter并发测试怎么操作?-图2
(图片来源网络,侵删)
  1. 在 "线程组" 上右键,选择 添加 -> Sampler -> HTTP请求
  2. 在右侧面板配置:
    • 路径: /api/login (因为服务器名已在默认值中配置)
    • 方法: POST
    • Body Data: username=testuser&password=123456 (这是 POST 请求的参数)

步骤 5:添加监听器查看结果

为了看到测试结果,我们需要添加监听器。

  1. 在 "线程组" 上右键,选择 添加 -> Listener -> 聚合报告
  2. 再次右键,选择 添加 -> Listener -> 查看结果树 (调试用)。

步骤 6:保存与运行

  1. 点击菜单栏的 文件 -> 保存测试计划...,将你的计划保存为 Login_Test.jmx
  2. 点击工具栏上的 启动 按钮(绿色三角形)开始执行测试。

步骤 7:查看分析结果

测试运行完毕后,查看监听器中的数据。

  • 聚合报告:这是最重要的分析窗口。

    • 样本:总请求数量。
    • 平均:平均响应时间。
    • 吞吐量:系统每秒能处理的请求数,这是衡量系统性能的关键指标。
    • 错误 %:请求失败的百分比,如果这个值不为 0,说明系统在高并发下可能存在问题。
  • 查看结果树:可以点击 "请求" 或 "响应" 标签页,查看具体的 HTTP 请求内容和服务器返回的详细信息,方便定位问题。


第四部分:高级配置

参数化 - 使用 CSV 文件

真实场景中,用户名和密码应该是不同的,我们可以使用 CSV 文件来参数化。

  1. 准备 CSV 文件:创建一个 users.csv 文件,内容如下:
    username,password
    user1,pass1
    user2,pass2
    user3,pass3
    ...
  2. 添加 CSV 数据集配置
    • 在 "线程组" 上右键,添加 -> Config Element -> CSV 数据集配置
    • 文件名: 填写你的 users.csv 的绝对路径或相对路径(推荐将 CSV 文件放在 JMeter 的 bin 目录下,然后只写文件名)。
    • 变量名: username,password (与 CSV 文件的列名一致)。
  3. 修改 HTTP 请求
    • 在 "HTTP 请求" 的 "Body Data" 中,将原来的值替换为 JMeter 变量: username=${username}&password=${password}

每个用户在登录时都会从 CSV 文件中读取不同的用户名和密码。

关联 - 处理动态数据

很多应用(如电商、社交)的接口会返回动态数据(如 Session ID, Token),后续请求需要用到这些数据,这需要通过“关联”来实现。

  • 示例:登录成功后,服务器返回的 JSON 中包含一个 token,后续的 API 请求需要在 Header 中带上这个 token
  1. 在登录请求的响应中提取 Token
    • 在 "登录" HTTP 请求之后,添加一个 后置处理器 -> JSON 提取器
    • 变量名: auth_token
    • JSON 路径表达式: $.data.token (根据实际返回的 JSON 结构填写)
  2. 在后续请求中使用 Token
    • 添加一个新的 "HTTP 请求"(获取用户信息)。
    • 在该请求的 HTTP 信息头管理器 中(需要先添加这个元件),添加一个头:
      • 名称: Authorization
      • : Bearer ${auth_token}

命令行运行 (非 GUI 模式)

当并发用户数很大时(如 1000+),JMeter 的 GUI 模式会消耗大量资源,影响测试准确性,推荐使用非 GUI 模式在服务器上运行。

  1. 生成 JMeter 命令行脚本

    • 在 JMeter GUI 中,点击 文件 -> 生成 JMeter 命令行脚本...
    • 保存为 test_commands.cmd (Windows) 或 test_commands.sh (Linux/macOS)。
  2. 执行脚本

    • 打开命令行,切换到 JMeter 的 bin 目录。

    • 运行生成的脚本:

      # Windows
      test_commands.cmd
      # Linux/macOS
      ./test_commands.sh
    • 常用参数

      • -n: 非 GUI 模式
      • -t: 指定测试计划文件路径
      • -l: 指定结果日志文件路径(如 results.jtl
      • -e: 在测试结束后生成一个 HTML 格式的测试报告
      • -o: 指定生成报告的输出目录

    手动命令示例

    jmeter -n -t D:/tests/Login_Test.jmx -l D:/results/results.jtl -e -o D:/results/report

    运行后,D:/results/report 目录下会生成一个可以直接在浏览器中打开的 HTML 报告。


第五部分:最佳实践与注意事项

  1. 先做单用户测试:在并发测试前,先用 1-2 个用户跑通整个业务流程,确保所有请求、参数、关联都正确。
  2. 合理设置 Ramp-Up:Ramp-Up 时间不宜过短,避免瞬间对服务器造成巨大冲击;也不宜过长,导致测试不真实,通常建议 Ramp-Up 时间 = 线程数 / 10 (根据服务器性能调整)。
  3. 监控服务器资源:JMeter 只能模拟用户行为,不能告诉你服务器为什么性能瓶颈,必须同时监控服务器的 CPU、内存、磁盘 I/O、网络 使用情况,可以使用 top (Linux), Task Manager (Windows) 或专业的监控工具如 Prometheus + Grafana。
  4. 关注错误率:错误率是衡量系统稳定性的关键,如果错误率上升,需要结合服务器日志和 JMeter 的“查看结果树”来分析原因。
  5. 使用非 GUI 模式:对于任何负载测试,尤其是生产环境的预演,务必使用 -n 命令行模式运行。
  6. 测试环境独立:确保你的测试环境与生产环境隔离,避免测试流量影响真实用户。
  7. 测试计划清晰:给测试计划、线程组、请求等元件起一个有意义的名字,方便管理和维护。

通过以上步骤,你已经掌握了使用 JMeter 进行并发测试的全过程,从简单的请求到复杂的业务流程,再到专业的性能分析,JMeter 是一个强大而灵活的工具,多加练习,你就能成为一名出色的性能测试工程师。

分享:
扫描分享到社交APP
上一篇
下一篇