关键信息 (1)变更数据后,再次查询找不到更改数据 (2)数据库架构存在主从模式
问题描述
自动化用例发现相同的用例,有时候能够正常运行,有时候不能正常运行。不能正常运行的原因是查询不到前面用例插入的数
据,导致下一步无法进行。
问题排查
(1)观察日志
发现更改数据的相关日志全部正常(显示的确插入了),查询的相关日志也全部正常(显示确实是SQL查询结果为空)
结论–不是代码的bug,猜想可能是插入与查询中间存在数据变更。
(2)查看数据库记录
猜想是插入与查询中间存在数据变更(比如一个新的请求把插入记录删除或者更新了几个字段导致不符合查询条件了),观察数据库记录发现
插入记录在插入后并未进行任何更改。
注意:这里可以发现,大家在进行表的设计时,可以预留两个字段creatTime以及updateTime,重要的数据表甚至可以设计一个history表
记录表的相关变更。这样会为后续的数据排查带来很大便利
结论—插入与查询中间不存在数据变更,应该是其他原因。
(3)定位问题
这个时候其实有些陷入僵局了,后面在同事提醒公司有些接口采用joinjdbc进行联表查询,如果先插入,再用joinjdbc对从库进行查询,
可能会存在主从延迟问题。
排查接口逻辑,发现在插入数据是直接插入到主库,后面查询是采用从库进行查询。如果插入数据与查询数据间隔时间过短,由于主从延迟的存在
,会导致查询不到插入的数据。
结论----查询从库时,主库插入的数据还未同步到从库,所以返回结果为空。
解决方法
让自动化用例在先更改后查询的请求之间,加上一个时间等待(视主从延迟的时间而定)。