昨天,我在测试数据导入,从 Oracle 数据库中将符合条件的数据导入到 PostgreSQL 数据库。
具体流程是这样的:在 Oracle 中插入数据,点击管理页面上的一个按钮,将新插入的数据导入到 PostgreSQL 数据库中。
但是,在测试的过程中发现了一个很奇怪的问题:有时候,同一条数据会被插入 2 次。注意是“有时候”
。
我不知道什么情况下会出现这个问题,我做了很多次尝试,都没有发现这个 BUG 出现的规律,它就是偶然出现的,没有任何征兆,我无法复现这个 BUG。
这个问题出现的频率并不低,让我无法忽视这个问题,生怕是个什么严重的 BUG。
我决定在今天尝试找到稳定复现的方法。
我告诉了研发,他们没找到原因,在商量着如何处理这个问题,防止问题发生,讨论研究了半天。
后来,研发稍微做了一些改动,不允许插入重复数据,数据重复时会报错(但这并没有从本质上找到为什么会插入 2 条重复数据的问题)。
过了一会儿,研发让我再测一测。刚执行了几条数据,这个问题又出现了。
这时,在界面上弹出了报错窗口。研发也恰好在看日志,询问我是不是刚刚在导入数据。
研发 A:那段代码被调用了两次,SQL 语句被执行了两次。
研发 B:但如果双击了按钮的话,第二次应该是导入不成功的吧?因为第二次点击的时候,这条数据的时间已经不比第一次插入的时间新了,不会被导入的(这是导入数据的判断条件)。
啊,听到这里,我突然想到了什么!!
我:那是不是说,如果双击了两次,而且这两次时间间隔非常短,第一次请求还没完成或者还没有返回,就已经发起第二次请求了,就有可能会出现执行两次的情况?
研发 B:对。
我:那我知道了,可能是我鼠标的原因,我鼠标有问题,它有时候会自动双击。。。
研发 A:(晕倒 ing)...
为了验证我的说法,我们换了不同的鼠标和我的鼠标做对比,研发查看日志,我查看页面按钮的请求情况,反复验证。
最后,发现真的是我鼠标的自动双击导致的,而且它自动双击的速度实在太快了!!
其实,在我尝试寻找原因的时候双击过鼠标,但我手动双击的速度远远比不上它。。。
行吧。。。
最后,同事说:这鼠标得留着啊~
后来,他们戏称我的鼠标为 测试专用鼠标
啊哈哈~