浅谈数据校验

软件测试过程中, 数据校验环节是最考验基本功的一环.随着软件架构更演, 数据的导入方式多种多样. 高可用以及性能综合考量, 强一致性以及最终一致性的抉择, 数据体量都决定了我们数据校验的选择. 但是万变不离其宗, 本文浅谈一下本人数据校验一些想法, 抛砖引玉与大家求同存异.

数据不一致性问题归类

数据不一致问题大致有以下几类,数据字段缺失, 类型不符, 数值错误

需要做数据校验的阶段

从数据校验阶段, 我们可以简单划分为导入阶段数据校验, 以及查询阶段数据校验. 这两个阶段都会产生数据问题.

数据导入阶段

虽然在当下有离线同步, 有实时同步. 数据格式层出不穷. 但是本质还是校验原始数据是否都能如预期进入到系统里.作为数据校验者, 也不用纠结是强一致性还是最终一致性, 我们要做的就是确保当同步完成时候, 数据是一致的. 本质就是校验源数据与最终结果是一致的.

数据查询阶段

当下越发复杂的系统架构,存在读写分离, 预计算, 查询时计算等等复杂逻辑, 给我们数据校验带来很多困难. 我们要做的就是分而治之, 解藕复杂度. 在查询阶段校验,不用纠结当时数据库里的数据是否正确,那是在导入阶段做的事情.我们要做的就是在数据没有变化的前提下同样的查询每次的结果都是一致的.

数据校验方法

我经常用的数据校验方法有, 快照校验, 有条件的快照校验, 对比校验.

快照校验

快照校验就是基于在数据没有变化的前提下,同样的查询每次的结果都是一致的.所以,提前准备一份标准答案,在校验数据时候,参考答案进行校对数据,就能验证这次查询结构是否正确.快照校验优点就是,数据校验精准性高,能发现所有类型的错误,应用场景也能覆盖所有需要做数据校验的地方.缺点就是维护成本高,需要有定时更新脚本支持, 查询条件单一.

有条件的快照校验

有条件的快照校验是基于快照校验基础上, 对快照数据做一些加工后再进行校验. 主要应用场景是, 每次返回数据虽然是一样的, 但是顺序不一致, 或者某些字段顺序不一致, 亦或者数据字段跟查询时间有关, 再或者每次查询都生成一个uuid, 需要对数据进行过滤. 这时候就需要对预期以及实际结果,进行同样的数据清洗加工后,再进行数据校验.

对比校验

对比校验是一种轻量的数值校验方式, 做法就是针对系统里不同地方有相同的查询指标, 来对比校对数据的准确性. 对比校验的实用场景比较有限, 但是维护成本低, 不需要定期更新快照, 可以进行随机校验, 能发现系统中偶发的数据的问题.

数据校验断言

首选就是绝对值就行校验, 就是通过预期结果,来对比实际结果对不对.

其次,可以做定性的检查,比如结果不为0, 结果大于10, 可以看到结果,多用于ui自动化

最次,需要对数据返回做完备性检查, 检查是否所有预期的字段都有返回.

总结 软件架构复杂度不断上升,但是数据校验的本质与手段没有变.我们需要做的就是对症下药,找到适合自己的方式方法.