背景
生产环境压测验证某段链路或组件的新建连接数能力时,往往需要设置很高的并发,但这种操作存在一定风险和问题,若系统设置限流值,高并发场景下容易触发限流导致接口错误率升高,同时也存在将生产环境打挂的风险;本文主要说明如何通过Jmeter脚本避免以上问题
脚本编写步骤
- 新建jmeter脚本,添加测试计划、线程组及需要测试的接口
- 在测试接口中,右键添加->定时器->同步定时器(Synchronizing Timer),注意:模拟用户组数量需要与线程组中的线程数保持一致
同步计时器工作原理:比如设置100个线程、超时时间10000ms,从定时器工作开始计时,时间从0开始,在超时时间内第1个线程达到,则计时器重置为0;等待第2个线程,在超时时间内第2个线程达到,计时器重置为0;等待第3个线程... 只要相邻两个线程之间等待时间间隔没有超过10000ms,就会等待全部100线程后全部释放,否则就会停止等待立即释放。
同步计时器的两个参数设置及作用:
参数名 | 作用及设置 |
---|---|
模拟用户组的数量(Number of Simulated Users to Group by) | 与线程组中的线程数保持一致即可,相当于指定的同时释放线程数量 |
超时时间已毫秒为单位(Timeout in milliseconds) | 多少毫秒后同时释放指定的线程数 |
- 测试接口的连接超时与响应事时间设置,连接超时5s,响应超时10s
验证
- 百度首页接口100并发添加同步计时器前
- 百度首页接口100并发添加同步计时器后
案例
某项目需要验证waf新建连接数能力,需要不断加压,但为了避免过高并发将接口压挂,需要在脚本中添加同步定时器
- 3000并发测试单接口,脚本中未添加同步定时器,可以看到QPS2.2w左右
3000并发waf新建连接数1000左右
- 12000并发测试单接口,脚本中添加同步定时器,QPS1.2w
12000并发waf新建连接数1800左右
从上面两次压测可以看到,并发数远远与用户并发量对不上,所以waf设备存在一定瓶颈,更换waf设备后继续复压验证
- 更换waf设备后,12000并发测试单接口,脚本中添加同步定时器
12000并发waf新建连接数基本与并发数对应,新waf有6台机器,平均单台机器新建连接数2k
总结
可以看到,添加同步计时器前后,相同并发下QPS还是存在一定差距。压测场景如果不支持将QPS压到极限,但需要较高并发验证链路中组件的某些能力时,添加同步计时器效果最佳。