Files
2026-11-03 17:57:19 +08:00

91 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 登山活动 1300 人并发报名压测
本目录用于本地或已明确授权的测试环境。JMeter 会真实调用登录和报名接口,并向报名表写入数据,禁止直接对生产环境执行。
## 文件说明
- `prepare-brand-activity-users.ps1`:从当前项目数据库导出活动范围内、未禁用且尚未报名的人员。
- `brand-activity-mountain-signup-1300.jmx`:每线程独立登录,所有线程到达报名步骤后同时提交。
- `data/brand-activity-users.csv`:运行准备脚本后生成,不包含密码、手机号、身份证号等敏感数据。
当前登山活动参数:
- 活动 ID:`11619eee67574256ad8ccc8a16630023`
- 子活动 ID:`986bf4d48a5948e1810857483f9e5af2`
- 容量:1500 人
## 1. 准备人员数据
在项目根目录执行:
```powershell
powershell -ExecutionPolicy Bypass -File .\jmeter\prepare-brand-activity-users.ps1 -UserCount 1300 -PermissionMode AllScope
```
`AllScope` 会导出1300名活动范围人员。根据当前数据库,约290名人员没有报名菜单权限,其报名请求会被权限校验拒绝。
如果只测试具备权限的人员:
```powershell
powershell -ExecutionPolicy Bypass -File .\jmeter\prepare-brand-activity-users.ps1 -UserCount 1010 -PermissionMode Authorized
```
当前数据库只有1010名“有报名权限且尚未报名”的人员,因此 `Authorized` 模式不能生成1300名不同人员。
## 2. 先进行10人试跑
启动本地项目,确认80端口和 Redis 6378 可访问,然后执行:
```powershell
jmeter -n -t .\jmeter\brand-activity-mountain-signup-1300.jmx `
-Jthreads=10 `
-JloginRampSeconds=10 `
-Jhost=127.0.0.1 `
-Jport=80 `
-JusersFile=jmeter/data/brand-activity-users.csv `
-l .\jmeter\result-smoke.jtl `
-j .\jmeter\jmeter-smoke.log
```
试跑会真实产生报名记录。再次运行前必须重新生成 CSV,以排除已经报名的人员。
## 3. 执行1300人并发
确认测试数据库已备份、应用和 Redis 正常、活动仍在报名时间内后执行:
```powershell
jmeter -n -t .\jmeter\brand-activity-mountain-signup-1300.jmx `
-Jthreads=1300 `
-JloginRampSeconds=60 `
-JsyncTimeoutMs=300000 `
-Jhost=127.0.0.1 `
-Jport=80 `
-JusersFile=jmeter/data/brand-activity-users.csv `
-l .\jmeter\result-1300.jtl `
-j .\jmeter\jmeter-1300.log
```
登录在60秒内逐步完成;所有仍在运行的线程会在“07-集合后并发提交登山活动报名”前等待,然后同时发送报名请求。
## 4. 生成结果报告
```powershell
jmeter -g .\jmeter\result-1300.jtl -o .\jmeter\report-1300
```
重点查看:
- `05-人员账号登录`:独立账号登录是否成功。
- `06-报名资格预校验`:活动范围、时间、重复报名和名额检查。
- `07-集合后并发提交登山活动报名`:真正的并发报名结果。
报名结果只有返回 `code=0` 且 `msg=报名成功` 才计为成功,避免后端异常分支返回成功状态码但消息为“报名失败”时被误判。
## 注意事项
- 登录验证码由应用写入本机 Redis,JMX 仅在授权测试环境中从 Redis 读取对应验证码答案。
- 当前 `cas.enable=false`。现有登录实现只在 CAS 模式开启时拒绝密码不匹配,因此 JMX 使用测试占位密码;该行为不应复制到生产环境。
- Controller 使用单 JVM `ReentrantLock`,单节点下报名请求会排队;多节点下该锁无法跨节点保证一致性。
- JMeter 1300线程会消耗较多内存。若出现堆内存不足,可在启动前提高 `HEAP`,例如 `-Xms2g -Xmx4g`。
- 不提供自动删除报名数据的脚本,避免误删真实报名记录。