Jmeter复现并发请求

2020-07-28  本文已影响0人  不二不二熊

在上周五的接口压力测试中,编写的一个查询课程详情出现了失败,查看后台日志发现是MybatisPlus报错,大致错误是:selectOne but found 2。老司机一看就明白是数据库包含有多条重复数据。

经过对数据库有针对性的排查,脏数据很快被清理出来了。但是问题来了,究竟是什么原因造成脏数据的呢?我仔细排查了接口的相关代码,大致逻辑为:首先从记录表查询课程记录,如果不存在,则插入,否则就更新。相关伪代码如下:

//查询是否存在课程记录
RecordDo recordDo = recordMapper.selectOne(...);
//如果记录不存在
if(recordDo!=null){
   //插入操作
   insert();
}
else{
   //更新操作
   updateById();
}

我相信很多同学在业务中都写过类似的代码,这是一个十分常见的case。在日常使用过程中也按照预期的运行了,然而bug总是悄悄的到来,不知不觉数据库中就莫名多了一条脏数据。最开始的时候以为是之前代码没有完善,导致脏数据没有清理,然而同样的情况在后期再次出现了。凭借直觉应该是并发造成的,但是手动模拟并发比较麻烦,而常用的接口测试工具postMan似乎也是串行,于是,jmeter出现在了我的视线中。

jmeter是依据Java编写的,而最新的要求JDK1.8。这条要求相信对于大家都是十分easy。

主体界面 添加并发线程/循环次数 设置http请求 添加分析报告,选项1&2

最后启动最上方绿色三角即可进行测试。

很快,bug无处遁形,我能清晰的观看到在简单的并发操作下,同时插入了两条一样的数据。当然,如果解决并发下重复提交的问题,这就涉及到分布式锁了,这并不在本章节的范围之类了。本次仅仅是通过jmeter模拟并发请求来复现bug,如果你的项目也需要用到并发测试,那么我强烈推荐你使用jmeter,简单实用。

上一篇下一篇

猜你喜欢

热点阅读