品牌活动调整
This commit is contained in:
@@ -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`。
|
||||
- 不提供自动删除报名数据的脚本,避免误删真实报名记录。
|
||||
Reference in New Issue
Block a user