美文网首页
Jmeter复现并发请求

Jmeter复现并发请求

作者: 不二不二熊 | 来源:发表于2020-07-28 20:08 被阅读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,简单实用。

    相关文章

      网友评论

          本文标题:Jmeter复现并发请求

          本文链接:https://www.haomeiwen.com/subject/zfsqrktx.html