昨天,我在测试数据导入,从 Oracle 数据库中将符合条件的数据导入到 PostgreSQL 数据库。

具体流程是这样的:在 Oracle 中插入数据,点击管理页面上的一个按钮,将新插入的数据导入到 PostgreSQL 数据库中。

但是,在测试的过程中发现了一个很奇怪的问题:有时候,同一条数据会被插入 2 次。注意是“有时候”

我不知道什么情况下会出现这个问题,我做了很多次尝试,都没有发现这个 BUG 出现的规律,它就是偶然出现的,没有任何征兆,我无法复现这个 BUG。

这个问题出现的频率并不低,让我无法忽视这个问题,生怕是个什么严重的 BUG。

我决定在今天尝试找到稳定复现的方法。

我告诉了研发,他们没找到原因,在商量着如何处理这个问题,防止问题发生,讨论研究了半天。

后来,研发稍微做了一些改动,不允许插入重复数据,数据重复时会报错(但这并没有从本质上找到为什么会插入 2 条重复数据的问题)。

过了一会儿,研发让我再测一测。刚执行了几条数据,这个问题又出现了。

这时,在界面上弹出了报错窗口。研发也恰好在看日志,询问我是不是刚刚在导入数据。

研发 A:那段代码被调用了两次,SQL 语句被执行了两次。

研发 B:但如果双击了按钮的话,第二次应该是导入不成功的吧?因为第二次点击的时候,这条数据的时间已经不比第一次插入的时间新了,不会被导入的(这是导入数据的判断条件)。

啊,听到这里,我突然想到了什么!!

我:那是不是说,如果双击了两次,而且这两次时间间隔非常短,第一次请求还没完成或者还没有返回,就已经发起第二次请求了,就有可能会出现执行两次的情况?

研发 B:对。

我:那我知道了,可能是我鼠标的原因,我鼠标有问题,它有时候会自动双击。。。

研发 A:(晕倒 ing)...

为了验证我的说法,我们换了不同的鼠标和我的鼠标做对比,研发查看日志,我查看页面按钮的请求情况,反复验证。

最后,发现真的是我鼠标的自动双击导致的,而且它自动双击的速度实在太快了!!

其实,在我尝试寻找原因的时候双击过鼠标,但我手动双击的速度远远比不上它。。。

行吧。。。

最后,同事说:这鼠标得留着啊~

后来,他们戏称我的鼠标为 测试专用鼠标 啊哈哈~

END

- END -