当前位置:   article > 正文

Java秒杀系统(十二):JMeter压力测试重现秒杀场景中超卖等问题_jemeter测试超卖

jemeter测试超卖

摘要:本篇博文是“Java秒杀系统实战系列文章”的第十二篇,本篇博文我们将借助压力测试工具Jmeter重现秒杀场景(高并发场景)下出现的各种典型的问题,其中最为经典的当属“商品库存超卖”的问题,在本文我们重现这种问题,并对问题进行分析!

内容:一个正规的、声称能承受高并发请求的系统的背后应该经历了一些不为人知的经历,这个秒杀系统也是如此,一般而言,这些经历都是比较残酷的,在本文中我们将重现出这样的经历!即采用压力测试工具Jmeter压测这个秒杀系统的“秒杀接口”!

在进入秒杀压测环节前,我们将之前的“接收前端用户的秒杀请求对应的控制器方法”复制一份,用于给JMeter压测使用,即在KillController中复制出一个新的“执行秒杀请求”的方法,其代码如下所示:

  1. //商品秒杀核心业务逻辑-用于压力测试
  2. @RequestMapping(value = prefix+"/execute/lock",method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
  3. @ResponseBody
  4. public BaseResponse executeLock(@RequestBody @Validated KillDto dto, BindingResult result){
  5. if (result.hasErrors() || dto.getKillId()<=0){
  6. return new BaseResponse(StatusCode.InvalidParams);
  7. }
  8. BaseResponse response=new BaseResponse(StatusCode.Success);
  9. try {
  10. //不加分布式锁的前提
  11. Boolean res=killService.killItem(dto.getKillId(),dto.getUserId());
  12. if (!res){
  13. return new BaseResponse(StatusCode.Fail.getCode(),"不加分布式锁-哈哈~商品已抢购完毕或者不在抢购时间段哦!");
  14. }
  15. }catch (Exception e){
  16. response=new BaseResponse(StatusCode.Fail.getCode(),e.getMessage());
  17. }
  18. return response;
  19. }

之后,我们便可以开心的进入玩耍环节。

(1) 双击JMeter的启动脚本jmeter.sh,进入JMeter的主界面,新建一个测试计划,然后在该测试计划下新建一个线程组(设定1秒并发1000个线程,后续还可以调整线程数),紧接着是新建HTTP请求项以及CSV数据文件的读取配置等等,如下图所示:

其中,userId参数用于模拟参与秒杀~抢购的用户,其取值将来源于上图中的“CSV数据文件设置”选项的文件,在这里Debug设定了10个用户,如下图所示:  

值得一提的,“HTTP消息头管理器”选项是必需的,用于指定提交的数据的数据格式,即Content-Type的取值为application/json(因为我们的后端接口设置的就是 consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)。

更多请见:http://www.mark-to-win.com/tutorial/51051.html

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号