元数据的一致性测试解决方案与设计策略

元数据是什么

在大数据治理、应用的背景下,数据即资产,简单的说元数据实现了对数据资产的统一的标准化管理。它实现了数据、结构、关系的数据血缘可视化。为数据治理与数据应用提供了统一标准和支撑。同时,元数据管理不当,信息错乱丢失,会影响甚至破坏产品整体价值,进而使用户失去产品信心,因此元数据测试显得尤为重要。

元数据一致性测试场景有哪些

场景1:元数据迁移

在数据迁移中,一般包含数据(表)、结构(字段)、关系(表与表、表与字段、字段与字段)的一致性验证,以及确保数据的完整性和唯一性,如果迁移过程可能涉及某些数据的变更,那么还需验证变更的准确性。

场景2:元数据版本变更

在元数据元数据版本变更中,一般包含新增或变更数据(表)、结构(字段)、关系(表与表、表与字段、字段与字段)。

场景3:元数据的回归测试

在元数据测试过程中,经常涉及到元数据回归测试,那么需要考虑如何验证修复某些问题的同时是否引入其他的问题。

元数据一致性测试策略

元数据一致性测试可以简单理解为期望数据与实际数据的一致性校验,其中验证内容包含

数据(表)、结构(字段)、关系(表与表、表与字段、字段与字段)三个方面。

我们将期望、实际元数据抽象为期望态元数据、实际态元数据,同时期望态元数据又包含设计态、历史态,如下图。

元数据的一致性测试解决方案与设计策略

由图可见,元数据的一致性校验主要是将设计文档(新增或变动时,需依据设计文档)或测试通过的历史版本作为期望结果与待测版本进行校验。

具体不同场景的校验流程如下:

元数据的一致性测试解决方案与设计策略

核心步骤为动态Sql的生成,如何保证动态Sql生成的准确性是整体设计的难点,解决思路如下:

假如在元数据版本变更场景下,设计态数据存储在Execl中如下,表名为Student_info,数据如下。

元数据的一致性测试解决方案与设计策略

如何根据设计态元数据生成动态Sql:

1.读取Execl;

2.拼接Sql,拼接原则为"唯一性拼接",即保证执行结果条数为1,比如我们知道数据库中不应存在完全重复的数据,则可以将字段值拼接值WHERE语句后面,来不断通过添加where过滤实现数据sql执行结果条数为1,例如,拼接为

Select count(*) From Student_info Where name='Tom' and age='12' and sex='1' and class='203'

Python开发设计

作为数据一致性校验的统一测试框架,仅满足上面提到的简单需求还是不够的,因此我们还考虑以下几点:

  1. 复杂的数据映射,如,对不同表不同字段的映射关系的一致性校验,比如A库的table1表与B库的table2表存在数据的一致性关系,进一步table1表的name字段与table2表的person_name字段是存在映射关系的。
  2. 数据的特殊处理,如满足映射条件的同时,还需要考虑是否存在一些特殊处理,比如table1表name字段+编号才能与table2表的person_name字段一致;
  3. 多表的数据关联,如需要构建多表关联查询才能够保证数据的一致性。

基于这种思路,开发了X-R数据测试框架(暂未开源),大体框架设计如下:

  1. 测试用例与代码分离,采用Yaml文件的形式描述测试场景,便利的用例组织形式,同时有效的避免重复开发。
  2. 支持自由扩展插件,满足不同场景的定制化需求
  3. 支持数据驱动
  4. 支持Skip、优先级、快速回归等运行机制
  5. 支持Execl、Mysql、Oralce等数据媒介

YAML用例组织结构

元数据的一致性测试解决方案与设计策略

公共配置部分

元数据的一致性测试解决方案与设计策略


分享到:


相關文章: