前几天上线的需求,测出了一个非常难发现的bug...
业务背景:下游系统会通过mq并发回调通知我所测系统,当这些并发回调请求同时来了,导致数据库更新字段异常。
原因:开发使用了乐观锁,执行sql的同时其他请求进来默认不会被执行,导致出现bug,
当两个并发线程(thread1和thread2)访问同一个对象(syncThread)中的synchronized代码块时,在同一时刻只能有一个线程得到执行,另一个线程受阻塞,必须等待当前线程执行完这个代码块以后才能执行该代码块。Thread1和thread2是互斥的,因为在执行synchronized代码块时会锁定当前的对象,只有执行完该代码块才能释放该对象锁。
解决办法:开发更改了锁的使用方法,在接收到请求的同时单独启动另一个线程去执行sql。bug修复
测试:for循环本地构造参数通知回调地址。测试通过
思考:测试本地系统的同时要考虑下游传递报文的方式,如遇到并发需要考虑模拟并发场景。使测试用例覆盖更有效
原文:https://www.cnblogs.com/hongweitester/p/12083796.html