使用jmeter实战测试
Jmeter安装教程
在Jmeter官网下载压缩文件(Apache JMeter - Download Apache JMeter),选择二进制下的.zip文件。
解压后双击bin\jmeter.bat运行程序,有需要也可以配置环境变量。
实战过程
我这里实战测试的是一个拼团业务抢占库存的工程,也就是经典的"防超卖"环节。
测试分为很多种类型,譬如功能测试,压力测试,这里先用10条数据进行功能测试,测试目标是防止“超卖”情况的发生。
Jmeter配置
配置Thread Group
1. Thread Group
先在线程组里设置并发:
- Number of Threads:比如 10
- Ramp-up Period:比如 10
- Loop Count:先填 1
如果你是压测,就后面再慢慢加到 50 / 100 / 200。
2. HTTP Request Defaults
右键 Thread Group -> Add -> Config Element -> HTTP Request Defaults
填:
- Protocol:http
- Server Name or IP:你的服务地址
- Port Number:你的服务端口
- Path:先空着
3. HTTP Header Manager
右键 Thread Group -> Add -> Config Element -> HTTP Header Manager
这里你只要加一条:
- Name:Content-Type
- Value:application/json
如果你有登录态,再加:
- Name:Authorization
- Value:Bearer ${token}
4. HTTP Request
右键 Thread Group -> Add -> Sampler -> HTTP Request
填写:
- Method:POST
- Path:/api/v1/gbm/trade/lock_market_pay_order
- Body Data:放 JSON
注:根据controller接收实体类指定JSON body
示例:
{ "userId": "${userId}", "teamId": "${teamId}", "activityId": ${activityId}, "goodsId": "${goodsId}", "source": "${source}", "channel": "${channel}", "outTradeNo": "${outTradeNo}", "notifyConfigVO": { "notifyType": "${notifyType}", "notifyUrl": "${notifyUrl}", "notifyMQ": "${notifyMQ}" } }配置CSV文件
以上过程中需要用到大量数据,因此需要通过csv文件一次性交给Jmeter处理,我直接用codex给我生成了一个csv文件。
CSV 和请求体的对应关系
你现在 CSV 里字段是:
- userId
- teamId
- activityId
- goodsId
- source
- channel
- outTradeNo
- notifyType
- notifyUrl
- notifyMQ
那就要保证 Body Data 里变量名和 CSV 完全一致。
csv config配置
- Filename:指向CSV这个文件
- Variable Names:
- userId,teamId,activityId,goodsId,source,channel,outTradeNo,notifyType,notifyUrl,notifyMQ
- Delimiter:,
- Recycle on EOF:
- 想循环压测就 True
- 想每行只用一次就 False
- Stop thread on EOF:
- 一般先 True
开始测试
启动你的springboot工程,
点击Jmeter启动按钮,
可以看到我这里丢出了cn.bugstack.types.exception.AppException: null异常,这个就是我的项目中出现库存库存抢占失败抛出的异常,也就是说成功了。
数据库中也成功了,只有6,7,8三个user成功组队,而9,10虽然配置的同一个team,但是没有入库。
