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

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

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

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

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

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

(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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值