品牌活动调整

This commit is contained in:
2026-11-03 17:57:19 +08:00
parent a3c6c77d6b
commit d8313d7822
37 changed files with 3044 additions and 466 deletions
+90
View File
@@ -0,0 +1,90 @@
# 登山活动 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`。
- 不提供自动删除报名数据的脚本,避免误删真实报名记录。