📚 导读

有一年双十一,我在客户现场看到一个让我记忆深刻的场景:一个电商平台零点到来的短短几分钟内,服务器CPU飙到100%,数据库连接池耗尽,订单系统直接崩溃。整整四个小时无法下单,损失超5000万元。

事后复盘的时候,我问运维同事:”你们测试环境最高跑过多少并发?”他们回答得很声胆:”500并发,内存就给咱扭了。”

这并不是个例。据我观察,80% 的线上的故障,都可以通过上线前的性能测试提前发现。性能测试不是”锦上添花”,而是生产环境的最后一道防线。

所以今天这篇文章,我想带你从零开始,用 2 小时完成人生第一个10 万并发压力测试。

🔍 为什么不用JMeter?

JMeter 当然能用,但它有一个根本问题——同步阻塞线程模型。

理解这个概念很简单:JMeter 模拟每个虚拟用户时,会创建一个线程(Thread),这个线程会一直占用内存等待网络响应。

当你需要模拟 10 万并发时:

结果:很多测试人员用 JMeter 测到 3000 并发就卡死了——不是被测系统的问题,是 JMeter 自己的瓶颈。

✅ Gatling的解决方案

而 Gatling 用的是 Akka Actor 模型 + Netty 异步基石(NIO),单线程事件驱动,等效 10 万并发,内存占用从 JMeter 的 16GB 降到 2GB,差距就是这么大。

更关键的是,现在有了 TRAE AI,你不需要学 Scala 语法有多深,只需要会复制粘贴提示词,AI 就能帮你生成完整的 Gatling 测试脚本。

本文的价值:不跳步、每一步都有说明、代码完整可运行。不管你是手动测试转岗,还是刚入行的应毕业生,只要跟着做,2 小时后你就能独立完成一次真正的并发压测。

⚠️ 阅读前提醒:建议在电脑前边看边操作。光看不练 = 光说不做。本文实际上是一个手把手教程,而不是一篇伫语故事。




一、为什么性能测试必须做?

1.1 真实事故:一次崩溃万万千的故事

让我先讲一个真实发生的故事。

四大核心性能指标关系图TPS(每秒事务数)TPS = 并发用户数 / 平均响应时间并发用户数:100人由 rampUsers(100) 控制平均响应时间:420msP95 < 1000ms 为绿色

📈 图1:性能测试四大核心指标关系图 – TPS = 并发 / 响应时间

2022 年双十一前夕,某知名电商平台技术团队既筹资金又资人,做了多轮功能测试。但在测试环境中,最高并发只有 500 人,因为测试班的人说:”我们资源有限,没必要测那么高。”

双十一当天,零点到来的短短几分钟内:

事后排查报告显刀:如果上线前能做一次负载测试,就能发现连接池设置过小,进而在大量访问来临前就做调整,不至于全线崩溃。

🔴 重要教训:测试环境的并发量必须负负负负超过生产环境的预期席位,而不是就测平时负载。

1.2 性能测试四大核心指标

测试性能的时候,我们主耍关注四个指标:

指标
含义
类比
良好值
TPS
每秒处理事务数(Transactions Per Second)
餐厅每秒能上几道菜
超过50 req/s
响应时间
用户发出请求到收到响应的时间
点菜到上菜用了多久
平均 < 500ms
并发用户数
同时在系统里的用户数量
餐厅里同时坐着多少人
达到设计容量
吞吐量
单位时间处理的数据量(bytes/s)
一小时翻台几次
超过10 MB/s

👁 记住这个公式:吞吐量(TPS)= 并发用户数 ÷ 平均响应时间。例如:1000 人并发、平均 100ms 响应,TPS = 1000 ÷ 0.1s = 10000 req/s。

1.3 四种测试类型怎么选?

基准测试(Benchmark):类似于”测重”——用单一负载测试,建立性能基准值。这是所有后续测试的参照物,没有基准值,加压再多也是瞎测。

负载测试(Load Testing):正常负载下的测试,治性性增加并发,找到系统容量上限。从 100 人加到 10000 人,观察 TPS 曲线什么时候开始负载。

压力测试(Stress Testing):超过设计负载,测系统的极限和容错能力。比如设计上限是 10000 并发,就测 15000、20000,看看系统是”优雅降级”还是”直接崩溃”。

稳定性测试(Soak Testing):用正常负载跑 8 小时甚至 24 小时,观察内存是否持续增长、连接池是否慢慢耗尽。很多内存泄漏,只有长时间运行才会暴露。


二、Gatling深度解析——为什么10万并发首选它?

2.1 传统工具的困境

JMeter:同步阻塞线程模型,每个拟虚拟用户占一个线程,线程创建、切换、销毁本身就有巨大开销。模拟 10万并发时,JMeter 光线程管理就要消耗大量 CPU,实际可用于发请求的资源所剩无几。优点:GUI 界面直观,录制器好用。

Gatling Actor模型 vs JMeter线程模型JMeter:每个用户 = 一个线程线程1: 用户1线程2: 用户2线程3线程N… (内存不足)100 用户 ~ 150MB 内存10万用户需要 150GBGatling:Actor 模型(事件驱动)Actor 1Actor 2Actor 3Actor 4同一 Actor 处理 10000+ 用户内存 100MB 可支撑 10万并发

⚙ 图2:Gatling Actor模型 vs JMeter线程模型 – 内存效率差异巨大

Locust:基于 Python,川异步程模拟并发,资源占用比 JMeter 低。但 Python 有 GIL(全局解释器锁),CPU 密集型任务无法真正并行。在高并发下,Python 协程调度器的开销也会显现。更重要的是,Locust 的 HTML 报告功能较弱,分析数据不够直观。

k6:近年来表现不错的工具,基于 Go 语言,支持 JavaScript 脚本,单机并发能力比 JMeter 强。但 k6 的脚本需要一定 JS 基础,生态没有 Gatling 成熟,报告可视化也不如 Gatling 精致。

2.2 Gatling的核心优势

Gatling 之所以在高并发场景下表现出色,核心在于 Akka 框架的 Actor 模型。

简单类比:JMeter 像餐厅里每个顾客占一个服务员全程等待上菜;Gatling 像一个服务员同时接侍 1000 个顾客——服务员先把订单投到后厨,在等待的过程中去接待其他顾客,菜好了再回来上菜。这种”同时接侍”的能力,就是异步非阻塞的核心。

具体来说:

💰 关键数据对比:同等的 10 万并发压测,JMeter 需要约 16 GB 内存,Gatling 只需约 2 GB,差距 8 倍。

2.3 四大工具全面对比

对比维度
JMeter
Locust
k6
Gatling ⭐
编程语言
Java
Python
Go
Scala/JVM
资源占用
高
中
低
极低
单机并发上限
~5,000
~3,000
~10,000
50,000+
脚本可读性
XML/GUI
Python
JS简洁
Scala简洁
学习曲线
中
低
低
中(Scala基础)
报告质量
一般
一般
好
优秀HTML
AI友好度
低
高
高
高

2.4 Gatling适用场景

非常适合:

不太适合:

2.5 开源版 vs 商业版

Gatling 有两个版本:



三、开发工具准备——VS Code + 三大插件

3.1 为什么选 VS Code?

VS Code(Visual Studio Code)是微软出品的免费代码编辑器,在全球拥有数千万开发者使用。相比 IntelliJ IDEA 和 Eclipse,它有以下优势:

VS Code + 三大插件安装流程步骤1VS Code 官网下载安装步骤2Ctrl+Shift+X 扩展商店步骤3安装三大插件Metals (Scala语言服务)语法补全、错误检查Scala Syntax语法高亮TRAE AIAI代码生成、报错修复

🔧 图3:VS Code及三大插件安装流程

3.2 VS Code 安装(手把手步骤)

第一步:下载安装包

打开浏览器,访问官方下载地址:
👉 https://code.visualstudio.com/

页面会自动检测你的操作系统(Windows),点击页面中央的大绿色按钮 “Download for Windows“,下载安装包(约 100 MB)。

第二步:运行安装向导

下载完成后,双击安装包(.exe 文件),启动安装向导:

第三步:启动并配置中文界面

安装完成后,VS Code 会自动启动(如果没有,手动双击桌面或开始菜单中的 VS Code 图标)。

首次启动后,如果界面是英文,按以下步骤切换为中文:

  1. 按 Ctrl + Shift + P,会弹出一个输入框
  2. 在输入框中输入 “display language“,会看到 “Configure Display Language” 选项
  3. 点击它,会打开语言选择面板
  4. 选择 “Chinese (Simplified) (中文简体)”
  5. VS Code 会提示你安装语言包,点击 “Install and Restart”(安装并重启)
  6. 等待 VS Code 自动重启,界面就变成中文了

⚠️ 常见错误:如果在命令行里输入 code 提示”不是内部或外部命令”,说明安装时没有勾选”Add to PATH”。解决方法:控制面板 → 系统 → 高级系统设置 → 环境变量 → 编辑 PATH → 添加 C:\Program Files\Microsoft VS Codein

3.3 第一个插件:Scala (Metals)

这个插件是做什么的?

Metals 是 Scala 的语言服务器(LSP),它会在你编写 Scala 代码时提供:语法高亮、代码自动补全、错误提示、跳转到定义等功能。没有这个插件,你的 Scala 代码会像记事本一样,没有颜色、没有提示、错误也不知道在哪里。

安装步骤(详细):

  1. 在 VS Code 中,按 Ctrl + Shift + X 打开扩展面板(左侧边栏有一个方形图标)
  2. 在扩展搜索框中输入 “metals“(注意:输入时不需要引号)
  3. 在搜索结果中,找到 “Scala (Metals)“,发布者为 “Scalameta“(不是其他同名插件)
  4. 点击该插件卡片上的 “Install” 按钮
  5. 等待安装完成(会显示”重新加载”按钮)
  6. 点击 “重新加载窗口” 以激活插件

安装完成后,VS Code 底部状态栏会显示 “Metals” 字样,表示 Scala 语言服务已启动。如果提示需要安装 JDK,按照下一节的步骤安装即可。

3.4 第二个插件:Scala Syntax(语法高亮)

这个插件是做什么的?

Metals 只提供语言服务,不提供语法高亮。Scala Syntax 插件为 .scala 文件提供专业的语法着色,让代码更容易阅读。这个插件很轻量,和 Metals 配合使用效果最好。

安装步骤:

  1. 按 Ctrl + Shift + X 打开扩展面板
  2. 搜索 “scala syntax“
  3. 找到 “Scala Syntax“(通常显示为官方或相关插件)
  4. 点击 “Install“

3.5 第三个插件:TRAE AI Coding Assistant(重点⭐)

这个插件是做什么的?

这是本文的核心工具!TRAE AI 是 AI 编程助手,可以在 VS Code 中直接和 AI 对话。你只需要描述你想实现的功能,AI 就能帮你生成 Gatling Scala 脚本。你不需要懂 Scala 语法,只需要会复制粘贴提示词。

安装步骤(详细):

  1. 按 Ctrl + Shift + X 打开扩展面板
  2. 在搜索框中输入 “trae” 或 “AI coding assistant“
  3. 在结果中找到 “Coding Assistant by TRAE“,图标是一只狗头(🐶),发布者为 TRAE AI
  4. 点击 “Install” 按钮
  5. 安装完成后,VS Code 左侧边栏会出现 TRAE 的图标(狗头)
  6. 点击该图标,会提示你登录(GitHub / Google / 邮箱均可)
  7. 登录后,选择模型:推荐选择 Claude 3.5 Sonnet(性价比最高,效果好)

如何打开 TRAE AI 面板?

按 Ctrl + Shift + Y,TRAE AI 面板会在右侧打开。或者直接点击左侧边栏的狗头图标。

TRAE AI 可以做什么?(5个高频使用场景)

免费额度说明:

TRAE AI 有免费额度(新用户赠送一定数量的消息),用完之后可以购买订阅或配置自己的 API Key(Claude / OpenAI 均可)。设置方法:Ctrl + , 打开设置 → 搜索 “TRAE” → 找到 “API Key” 输入框 → 填入你的密钥。

3.6 三个工具组合的威力

这三个工具组合在一起,形成了一个完整的高效开发闭环:

日常工作流示例:

  1. 你在 VS Code 中编写 Gatling 脚本
  2. Metals 检测到语法错误,在代码下面显示红色波浪线
  3. 你把鼠标悬停在错误上,看到报错信息 “not found: value csv”
  4. 按 Ctrl + Shift + Y 打开 TRAE AI,输入:”这个报错是什么意思?怎么修复?”
  5. AI 回复:”缺少 import 语句,请在文件顶部添加:import io.gatling.core.Predef._”
  6. 你复制代码,粘贴到文件顶部,红色波浪线消失

💡 记住这个组合:VS Code(编辑器)+ Metals(语法检查)+ TRAE AI(代码生成)= 零基础也能写 Gatling 脚本。



四、前置环境安装——JDK + Maven + 创建项目

4.1 工具选择:Maven 项目版 vs 独立版

Gatling 有两种使用方式:

Maven项目结构 and Gatling数据流向gatling-demo/src/test/scala/ <- .scalasrc/test/resources/ <- CSVpom.xml 依赖管理results/ HTML报告数据流向1 CSV -> login_users.csv2 Scenario: feed()+exec()3 Setup: inject()->报告

📁 图4:Maven项目目录结构和Gatling数据流向

本文选择 Maven 项目版,因为我们要用 VS Code + Metals 开发,Maven 项目是这类工具的最佳拍档。

4.2 安装 JDK(详细步骤)

第一步:先检查是否已安装 JDK

打开 CMD 命令行窗口(按 Win + R,输入 cmd,回车),输入以下命令:

# 检查 Java 版本java -version
如果显示类似以下内容,说明 JDK 已经安装,可以跳过安装步骤:
openjdk version "21.0.3" 2024-01-16 LTSOpenJDK Runtime Environment (Temurin-21+35) (build 21.0.3+9-LTS)OpenJDK 64-Bit Server VM (build 21.0.3+9-LTS, mixed mode, sharing)

如果提示 “‘java’ 不是内部或外部命令”,请继续安装。

第二步:下载 JDK 安装包

推荐使用 Eclipse Temurin(原 AdoptOpenJDK),免费、无需登录。

浏览器打开:👉 https://adoptium.net/

点击页面上的 “Latest release” 按钮(会自动下载最新 LTS 版本,JDK 21 或 JDK 17)。如果想要特定版本,点击 “Other platforms” 手动选择:

第三步:运行安装向导

下载完成后,双击 .msi 安装包:

  1. 点 “Next“
  2. 选择安装目录(默认 C:\Program Files\Eclipse Adoptium\jdk-21.x.x-hotspot\,建议不改)
  3. ⭐ 重要:确保安装界面中有 “Set JAVA_HOME” 或 “Add to PATH” 选项并勾选(大多数版本默认勾选)
  4. 点 “Install“,等待安装完成(约 1-2 分钟)
  5. 点 “Finish“

第四步:验证安装

重要:必须打开一个新的 CMD 窗口(之前的窗口不会刷新环境变量),输入:

# 必须在新窗口中执行java -version

应该看到类似 “openjdk version “21.x.x” 或 “17.x.x” 的输出。

⚠️ 如果 java -version 还是不行:控制面板 → 系统 → 高级系统设置 → 环境变量 → 在”系统变量”中检查:
① 是否有 JAVA_HOME,值应为 C:\Program Files\Eclipse Adoptium\jdk-21.x.x-hotspot
② PATH 中是否有 %JAVA_HOME%in
如果没有,手动添加后重启 CMD。

4.3 安装 Maven(详细步骤)

第一步:下载 Maven

打开浏览器,访问 Maven 下载页面:👉 https://maven.apache.org/download.cgi

滚动到 “Files” 部分,找到 “Binary zip archive”,点击下载 apache-maven-3.9.9-bin.zip(或最新的 3.9.x 版本,约 10 MB)。

🔴 重要提醒:Maven 安装路径中不要有空格和中文。不要装到”Program Files”或”下载”文件夹里。建议放在 D: oolspache-maven-3.9.9 或 C:\mavenpache-maven-3.9.9。

第二步:解压到指定目录

下载完成后:

  1. 在 D 盘根目录(或 C 盘)创建一个文件夹 tools
  2. 将 ZIP 文件解压到 D: ools\,最终目录结构为:D: oolspache-maven-3.9.9\
  3. 确认 bin 目录:D: oolspache-maven-3.9.9in

第三步:配置环境变量

  1. 控制面板 → 系统 → 高级系统设置 → 环境变量
  2. 在”系统变量”区域,点击”新建“:
    • 变量名:MAVEN_HOME
    • 变量值:D: oolspache-maven-3.9.9
  3. 找到”系统变量”中的 PATH,双击编辑,点击”新建“,添加:%MAVEN_HOME%in
  4. 点击确定保存

第四步:验证 Maven 安装

必须打开一个新的 CMD 窗口,输入:

mvn -version
应该看到类似输出:
微信公众号二维码图片引自微信公众号,扫码关注阅读原文

✅ 环境验证清单:运行以下两个命令,两个都成功才能继续:
① java -version → 显示 Java 版本
② mvn -version → 显示 Maven 版本 + Java 版本

4.4 一键创建 Gatling Maven 项目(详细步骤)

第一步:创建项目文件夹

在 D 盘创建一个 projects 文件夹(如果你想统一管理项目),然后在里面创建 gatling-demo 项目文件夹:

# 创建项目目录D:\projects> mkdir gatling-demoD:\projects> cd gatling-demo

第二步:运行 Maven 命令创建项目

在 gatling-demo 目录下,运行以下命令(整个命令是一行,可以复制到记事本去掉换行后复制):

mvn archetype:generate -DarchetypeGroupId=io.gatling -DarchetypeArtifactId=gatling-highcharts-maven-archetype -DarchetypeVersion=3.9.5 -DgroupId=com.perftest -DartifactId=gatling-demo -DinteractiveMode=false

参数说明:

第三步:等待 Maven 下载依赖(1-3 分钟)

首次运行 Maven 会自动下载 Scala 库、Gatling 核心、Netty、Maven 插件等大量依赖。耐心等待,看到 “BUILD SUCCESS” 表示成功。

第四步:验证项目结构

命令执行成功后,在 gatling-demo 目录下输入以下命令查看结构:

gatling-demo> dir /s /b

正确生成的项目结构应该包含:

💡 小提示:打开 VS Code,选择”文件 → 打开文件夹”,选择 D:\projects\gatling-demo,VS Code 会自动识别这是一个 Maven 项目,左侧会显示项目目录结构。你可以在 src/test/scala/ 下看到示例 Simulation 文件(可以删除或重命名)。



五、AI辅助编写Gatling脚本——核心章节(超详细)

5.0 开始前的心理建设

在正式开始之前,我想告诉你三句话:

Gatling压测流程图0s10s40sRamp-Up 加压阶段持续压测阶段用户从 0 -> 100 均匀增加100 用户同时在线压测用户数100人

⏰ 图5:Gatling压测流程 – Ramp-Up + 持续压测阶段

本章会用到两个 AI 提示词,我用橙色背景标注。复制后直接粘贴到 TRAE AI 即可。

5.1 实战案例背景

我们选择 httpbin.org 作为被测目标。这是一个公开的免费 API 服务,专门用于测试 HTTP 请求。它收到什么就返回什么,非常适合作为压测练习的目标。

我们的测试需求:

5.2 第一步——用 TRAE AI 生成 CSV 测试数据

详细操作步骤:

  1. 打开 VS Code
  2. 按 Ctrl + Shift + Y,打开 TRAE AI 面板
  3. 在底部的输入框中,复制粘贴以下内容(可直接复制下面的全部内容):

请帮我生成100个测试用户名,格式为CSV,包含三列:username, email, password
– username格式:testuser001 到 testuser100
– email格式:test001@example.com 到 test100@example.com
– password统一为:TestPass123
– 第一行为表头
– 用英文逗号分隔,不要加引号

  1. 按 Enter 或点击「发送」按钮,等待 AI 生成(5-15 秒)
  2. AI 生成完成后,点击输出框右侧的「复制」按钮
  3. 在 VS Code 中,按 Ctrl + N 新建文件
  4. 按 Ctrl + V 粘贴内容
  5. 按 Ctrl + Shift + S(另存为),导航到:
    D:\projects\gatling-demo\user-files\data\
    文件名输入:login_users.csv,编码选择 UTF-8,点保存
  6. 在 VS Code 左侧资源管理器中,展开 user-files/data/,确认 login_users.csv 文件存在
  7. 打开文件,确认格式正确(第一行是表头:username,email,password)

✅ CSV 文件格式示例(应该是这样的):
username,email,password
testuser001,test001@example.com,TestPass123
testuser002,test002@example.com,TestPass123
…(共 100 行)

5.3 第二步——用 TRAE AI 生成 Gatling 脚本(核心)

详细操作步骤:

  1. 按 Ctrl + Shift + Y,重新打开(或确保)TRAE AI 面板
  2. 在输入框中,复制粘贴以下完整提示词(可直接复制下面的全部内容):

请帮我生成一个Gatling Scala压测脚本,需求如下:

被测信息:
– 接口URL:POST https://httpbin.org/post
– Content-Type: application/x-www-form-urlencoded
– 请求参数:username(从CSV读取,字段名username),password(固定值TestPass123)

压测需求:
– 虚拟用户数:100人
– 加压方式:10秒内从0均匀加到100人
– 测试持续时间:30秒
– 断言条件:95分位响应时间小于1000毫秒,成功率大于99%

请生成完整的Simulation.scala文件代码,每个代码段都要加上详细的中文注释,注释要解释「为什么要这样写」而不是只说「这是什么」。

  1. 按 Enter 或点击发送,等待 AI 生成(10-30 秒,取决于模型速度)
  2. AI 生成完成后,点击输出框右侧的「复制」按钮
  3. 在 VS Code 左侧资源管理器中,右键点击 src/test/scala/ 文件夹
  4. 选择「新建文件」,文件名输入:LoginSimulation.scala
  5. 按 Ctrl + V 粘贴代码
  6. 按 Ctrl + S 保存文件

5.4 脚本逐行解析——让你真正理解代码

生成的脚本大概长这样。下面我把它拆分成若干个部分,逐段解释。每一段都附上了详细的中文注释,确保你不仅知道「怎么写」,更知道「为什么这样写」。

第一部分:包声明和导入

// 第一部分:包声明和导入package computerdatabase// import 语句从指定包导入类/函数,_ 是通配符,导入所有内容import io.gatling.core.Predef._ // Gatling 核心库,几乎所有脚本都要导入import io.gatling.http.Predef._ // HTTP 请求功能,发 GET/POST 请求全靠它import scala.concurrent.duration._ // 时间单位支持,有了它才能写 .seconds

为什么要这样写?

package computerdatabase 是 Maven 模板默认的包名,保持不变即可。三个 import 是 Gatling 的「标准开场白」:核心库提供基础功能,HTTP 库提供网络请求能力,时间库让你能写 `.during(10.seconds)` 这种人类可读的写法。

第二部分:HTTP 协议配置

// 第二部分:HTTP 协议配置val httpProtocol = http.baseUrl("https://httpbin.org") // 所有请求的根地址.acceptHeader("application/json") // 告诉服务器:我们期望返回 JSON.contentTypeHeader("application/x-www-form-urlencoded") // 请求体格式

为什么要这样写?

baseUrl 设置后,后面写 `.post(“/post”)` 就等于 POST https://httpbin.org/post。如果要切换到生产环境,只需要改这一行,所有请求地址自动更新。acceptHeader 和 contentTypeHeader 是 HTTP 请求头,告诉服务器我们发送和接收的数据格式。

第三部分:CSV 数据源配置

// 第三部分:CSV Feeder 数据源配置val csvFeeder = csv("user-files/data/login_users.csv").circular// csv() 读取 CSV 文件// .circular 模式:数据用完后从头循环再用(100 用户,50 行数据,第 51 个用户复用第 1 行)// .queue 模式:数据用完测试停止(不推荐,容易莫名其妙结束)// .random 模式:每次随机选一行(适合模拟真实用户多样性)
第四部分:场景(Scenario)定义
// 第四部分:Scenario 场景定义(描述一个用户会做什么)val loginScenario = scenario("登录场景")// feed(csvFeeder):从 CSV 取数据,每次取一行.feed(csvFeeder)// exec() 执行一个 HTTP 请求.exec(http("登录请求").post("/post")// ${username} 中的 $ 表示「引用变量」,花括号内是变量名(来自 CSV 表头).formParam("username", "${username}").formParam("password", "TestPass123")// status.is(200) 断言:期望返回 HTTP 200 才算成功.check(status.is(200))))
第五部分:SetUp 配置(最关键)
// 第五部分:SetUp 配置(控制虚拟用户如何到达)setUp(loginScenario// inject() 控制虚拟用户如何注入:rampUsers(100).during(10.seconds)// 意思是:在 10 秒内均匀加压到 100 人,第 1 秒约 10 人,第 5 秒约 50 人.inject(rampUsers(100).during(10.seconds))// protocols() 引用前面定义的 HTTP 协议配置.protocols(httpProtocol)// maxDuration() 整个测试的最长运行时间,防止意外无限运行.maxDuration(30.seconds))
第六部分:断言(Assertions)
// 第六部分:断言(满足条件测试才算通过).assertions(// global.responseTime.percentile(95) 表示「95 分位响应时间」// 即:95% 的请求必须在多少毫秒内完成// .lt(1000) 表示必须小于 1000 毫秒(lt = less than)global.responseTime.percentile(95).lt(1000),// global.successfulRequests.percent.gt(99) 表示成功率必须大于 99%(gt = greater than)global.successfulRequests.percent.gt(99))

5.5 保存并检查语法错误

脚本保存后,观察 VS Code 窗口:

⚠️ 常见报错速查:
not found: value csv → 缺少 import,在文件顶部加一行:import io.gatling.core.Predef._
type mismatch → 数据类型错误,检查 ${} 变量引用是否正确
value ${username} → 少了美元符号,检查是否为 ${username}

5.6 小流量验证——先跑 1 个用户确认脚本正确

这是最关键的一步!在跑 100 个用户之前,必须先用 1 个用户验证脚本是否正确。

操作步骤:

  1. 在 VS Code 中打开 LoginSimulation.scala
  2. 找到 rampUsers(100),临时改为 rampUsers(1)
  3. 找到 during(10.seconds),临时改为 during(1.seconds)
  4. 按 Ctrl + S 保存
  5. 打开 CMD,进入项目目录:cd /d D:\projects\gatling-demo
  6. 执行命令:
mvn test -Dgatling.simulationClass=computerdatabase.LoginSimulation
  1. 观察输出:5 秒内看到 BUILD SUCCESS → 脚本没问题,可以跑正式测试
  2. 如果看到大量红色 ERROR → 把报错信息复制给 TRAE AI 修复
  3. 验证成功后,把 rampUsers(1) 改回 rampUsers(100),during(1.seconds) 改回 during(10.seconds),保存


六、正式执行测试——mvn test 全流程

6.1 为什么要用 mvn test 而不是 gatling.sh?

前面提到我们用的是 Maven 项目版,所以执行压测的方式也用 Maven 的标准命令:mvn test。

这比独立版的 gatling.sh 有几个优势:

6.2 执行命令详解

标准执行命令:

mvn test -Dgatling.simulationClass=computerdatabase.LoginSimulation

参数说明:

首次执行时会发生什么?

  1. Maven 检测到项目没有编译过,先执行 mvn compile
  2. 编译 Scala 源码(Scala 代码会被编译成 Java 字节码)
  3. Maven 启动 Gatling 测试引擎
  4. Gatling 按配置执行测试(10 秒加压 + 30 秒持续,共约 40 秒)
  5. 测试结束后,Gatling 在 results/ 目录下生成 HTML 报告

预计执行时间:首次约 2-3 分钟(编译),后续约 40-50 秒。

6.3 执行过程中的输出解读

测试执行过程中,命令行窗口会不断输出信息。下面是各阶段的解读:

# 阶段一:Maven 编译[INFO] --- scala-maven-plugin:4.8.1:compile (default-compile) @ gatling-demo ---[INFO] Compiling 1 Scala source to ... arget\classes ...[INFO] BUILD SUCCESS ← 编译成功!# 阶段二:Gatling 测试执行Select simulation script:0) computerdatabase.LoginSimulation ← 用数字选择(输入 0 回车)# 阶段三:实时输出================================================================================users: 0 / 100 ← 实时虚拟用户数量Active users: 87 ← 当前并发活跃用户Waiting users: 13 ← 等待中的用户Done: 0 ← 已完成请求数Requests tooltip: OK: 2450 KO: 0 ← 成功/失败请求数Response time tooltip: min: 245ms max: 890ms avg: 412ms ← 响应时间统计percentile 50: 389ms percentile 75: 467mspercentile 95: 678ms percentile 99: 789ms# 阶段四:测试结束================================================================================Simulation computerdatabase.LoginSimulation completed in 34 seconds---- Assertions Statistics -----------------------------------------------------[INFO] gatling assertion assertions.0 PASSED ← 断言通过![INFO] gatling assertion assertions.1 PASSED ← 断言通过![INFO] BUILD SUCCESS[INFO] Reports generated in: D:\projects\gatling-demo\results\...

当看到 BUILD SUCCESS 且两个断言都 PASSED 时,说明测试全部通过!

6.4 查看 HTML 报告

测试完成后,Gatling 会自动生成一份精美的 HTML 报告,打开方式:

HTML 报告包含以下内容,每一项都是超链接,可以点击进入详细视图:

6.5 七大核心指标解读

打开 HTML 报告后,关注以下七个核心指标:

指标
含义
良好值
危险信号
Total Requests
总请求数量
和预期匹配
明显偏少
Success Rate
请求成功率(成功数/总数)
大于 99%
低于 95%
TPS
每秒处理事务数
超过设计容量
远低于预期
Avg Response Time
平均响应时间
小于 500ms
超过 1 秒
P95 Response Time
95% 请求在此时限内完成
小于 1 秒
超过 2 秒
P99 Response Time
99% 请求在此时限内完成
小于 2 秒
超过 5 秒
Max Response Time
最慢请求的响应时间
小于 5 秒
超过 10 秒

6.6 AI 辅助分析报告

你可以把 Gatling 报告的关键数据复制给 TRAE AI,让 AI 帮你解读:

请帮我分析这份Gatling压测报告数据:
– 总请求数:3000
– 成功:2985 (99.5%)
– 失败:15 (0.5%)
– 平均响应时间:412ms
– P50:389ms
– P95:678ms
– P99:789ms
– 最大响应时间:890ms
– TPS峰值:85 req/s

请告诉我:1)整体性能评估(良好/一般/差);2)是否存在问题;3)改进建议。

6.7 升级挑战:把并发提升到 10000

完成第一次压测后,可以尝试更高的并发来挑战系统:

💡 10000 并发测试的意义:验证你的系统能否在 10 秒内从 0 平滑扩展到 1 万并发,观察系统是在哪个时间点开始出现性能拐点(响应时间开始飙升)。这个拐点就是系统的实际容量上限。



七、CI/CD集成与自动化

7.1 为什么要把压测加入CI/CD流水线?

手动运行压测的问题是:人可能会忘记、版本可能会遗漏。而把压测集成到 CI/CD 流水线中,可以实现:每次代码提交或合并时,自动运行压测,报告自动生成,数据自动对比。

如果压测结果不达标(成功率低于 99%,95 分位响应时间超过阈值),流水线自动失败,阻止部署到生产环境。这就是「质量门禁」的概念——性能不达标,代码不能合并。

7.2 Jenkins 集成示例

在 Jenkins 中创建一个新的 Pipeline 项目,配置如下:

pipeline {agent anystages {stage('Checkout') {steps {checkout scm}}stage('Gatling Performance Test') {steps {bat 'mvn test -Dgatling.simulationClass=computerdatabase.LoginSimulation'}}}post {always {archive 'results/**'publishHTML target: [allowMissing: false, alwaysLinkToLastBuild: true,reportDir: 'results', reportFiles: '**/index.html', reportName: 'Gatling Report']}}}

这个 Pipeline 的效果是:每次代码提交,Jenkins 自动运行压测,并在构建页面中直接展示 Gatling HTML 报告。

7.3 常见陷阱速查表

现象
可能原因
解决方法
无法连接目标服务器
防火墙阻断了 / 服务器宕机
检查网络、确认目标服务可用
100% 请求失败(KO=100%)
URL 错误 / 接口地址变更
检查 baseUrl 是否正确
TPS 极低(低于10)
被测系统本身慢 / 网络延迟过大
先用 postman 验证正常响应时间
95分位突然飙升
触发了数据库慢查询 / GC停顿
配合 APM 工具定位瓶颈
测试在预期时间前结束
CSV 数据太少(用 queue 模式提前耗尽)
改为 .circular 模式或增加 CSV 行数
报告文件夹为空
测试未运行 / 断言失败导致 Maven 非零退出
检查 Maven 输出日志


八、常见问题Q&A

Q1:提示「不是内部或外部命令」,java 或 mvn 无法识别怎么办?

A:环境变量没有配置正确。请检查 PATH 中是否包含 %JAVA_HOME%in 和 %MAVEN_HOME%in。具体操作:控制面板 → 系统 → 高级系统设置 → 环境变量 → 编辑 PATH。

Q2:Metals 插件一直显示「正在下载…」,无法启动怎么办?

A:可能是网络问题(需要访问境外服务器)。可以尝试配置 Maven 国内镜像,在 pom.xml 中添加阿里云镜像源。

Q3:生成的 CSV 文件是乱码怎么办?

A:保存文件时,确保编码选择 UTF-8(不是 ANSI 或 GBK)。VS Code 右下角会显示当前文件编码,如果显示的是 GBK,手动点击改成 UTF-8。

Q4:Trae AI 显示额度用完了怎么办?

A:可以购买订阅(月付约几十元),或者配置自己的 API Key(Claude / OpenAI 的 Key 均可)。

Q5:JMeter 能达到 10 万并发吗?

A:理论上可以通过分布式集群实现,但单机几乎不可能。JMeter 每 1000 并发约消耗 1.5 GB 内存,10 万并发需要约 150 GB 内存。

Q6:我想测试 HTTPS 接口,需要额外配置吗?

A:不需要。Gatling 原生支持 HTTPS,只需要把 baseUrl 从 http:// 改成 https:// 即可。

Q7:测试报告可以导出为 PDF 吗?

A:Gatling 原生不支持 PDF 导出,但可以在浏览器中打开 HTML 报告后,使用浏览器打印功能(Ctrl+P)导出为 PDF。

Q8:如何测试 WebSocket 接口?

A:Gatling 支持 WebSocket 协议,使用 ws() 方法即可。Trae AI 也可以帮你生成 WebSocket 测试脚本。


九、总结

回顾一下今天的学习路径:

第一步:安装工具

VS Code + Scala (Metals) + TRAE AI

第二步:AI生成脚本

TRAE AI 帮你写代码,你只需要复制粘贴

第三步:mvn test 执行

查看精美的 HTML 报告,读懂性能数据

这篇文章的核心观点是:在 AI 时代,写 Gatling 压测脚本不再是程序员的专利。只要你会复制粘贴提示词,你就可以完成专业的性能测试工作。

你现在拥有的技能:

这是测试工程师群体中非常稀缺的能力组合。持续练习,多尝试不同的场景,你会越来越熟练。