什么要对接口压测呢?
- 压力测试可以用来验证软件系统的稳定性和可靠性,在压力下测试系统的性能和稳定性,发现并解决潜在的问题,确保系统在高负载情况下不会崩溃。
- 压力测试可以用来评估软件系统的容量和性能,通过模拟高负载情况下的用户访问量和数据量,测试系统的处理能力和响应速度,找出系统的瓶颈和性能弱点,并进行优化和改进。
- 压力测试可以用来确认软件系统的可用性和可用性,通过模拟用户的不同操作场景和异常情况,测试系统的稳定性、响应速度、错误处理能力和容错能力,确保系统能够在不同条件下正常运行,满足用户的需求。
- 压力测试可以用来研究新的技术和算法,在高负载情况下测试新的软件系统和技术的性能和稳定性,找出性能瓶颈和优化点,为软件系统的优化和改进提供依据。
相关说明
技术栈: 采用Nginx + Springboot + redis + JMeter 对接口进行压力测试:
1、Nginx: 做负载均衡 、Nginx会负载到 8080 8081 这两个服务上去 。
2、Springboot : 后台启动两个实例 8080 和 8081 。
3、redis: 设置key value 商品库存值为600 。
4、JMeter: 对商品接口进行压测。
注意: 使用Jmeter对商品接口进行压测、重点是使用JMeter压测工具、其他不是重点那就开始吧。
JMeter创建压测计划
1、第一步肯定是先打开压测工具了。
2、创建线程组
选中测试计划右击添加线程组 Add → Threads(Users) → Thread Group
2、设置线程数和循环次数。我这里设置线程数为200,在一秒执行完200个线程,循环一次
这图什么意思呢? 就是说JMeter启动200个线程在一秒内,同时往后台商品接口发送请求。
3、创建Http请求
选中线程组 右击 Add → Samlper →HTTP Request
4、输入协议、IP地址及端口号、选择请求方法、输入路径,内容编码一般为utf-8,输入请求参数
我这里就使用HTTP直接压了, 输入请求类型get 或 post 然后输入请求地址
5、在压测开始之前 需要添加一个聚合报告
选中HTTP Request 右击 Add → Listener → Aggregate Repor
Aggregate Repor:聚合报告 View Results Tree:结果树
添加完聚合报告和结果树后 ,开始启动运行!
开始
你会发现弹框了, 这是询问是否要保存这次压测计划,也就是说下次还可以接着复用。
聚合报告
执行完毕的聚合报告, 1秒压完200个请求 刚开始结束了!
后台商品扣减日志
8080服务后台的日志
8081服务后台的日志
总结: 通过JMeter 压测模拟出 商品接口超卖问题, 上图可以看出 我8080服务 已经扣减了库存,在看8081服务 也有相同扣减的数量 。 说明什么问题? 是不是测出了接口存在并发问题。这就相当于我有很用户来抢东西 ,这接口明显就是没有做分布式锁,导致所有线程都来抢导致超卖,所以说JMeter 就是来验证软件系统的稳定性和可靠性。