目录

ETL测试方法论ETL测试分层与持续集成

目录

ETL测试方法论(ETL测试分层与持续集成)

ETL

测试方法论(

ETL

测试分层与持续集成)

http://hi.csdn.net/attachment/201105/27/0_130648065789Zs.gif

根据

ETL

各个阶段的不同特点,可以将

ETL

测试分为:物理数据测试和逻辑数据测试。

物理数据测试:

是指纯粹从技术上保证数据的有效性,与业务无关。

逻辑数据测试:

是从业务逻辑上,对原始指标以及最终产出的业务指标之间的逻辑平衡性监控。通过这些监控,能让底层

etl

技术人员第一时间的发现数据问题并且解决问题,同时也能根据这些监控提前知道可能产生的结果,为后续产生的业务分析报告作出进一步的修正,从而保证数据仓库的数据的是有效的是能真正反应事实的。(引用

adolph

ETL

测试过程中,根据实际情况可以将

ETL

的这些环节拆分或组合成多个测试面,根据不同的测试面进行不同重点的测试。目前可以将

ETL

环节拆分成以下

4

个测试面:

源数据

->odl

odl->adl

idl->adl

、源数据

->adl

测试面,其中源数据

->bdl

侧重物理数据测试,

bdl->adl

侧重逻辑数据测试。

各个测试面的关注点如下:

第一面是源数据到

odl

的测试。

主要关注以下几个方面(侧重物理数据测试):

ETL

抽取方案的测试。

首先是抽取方案稳定性,如果源体系表结构有改变,需要保证

ETL

抽取方案不变或者微变。

其次数据传送接口方案合理性。源系统以何种形式把数据提供给目标系统,源系统推送或者目标系统主动抽取。数据日期、数据大小、记录数、增量

or

全量。

对于抽取策略的测试。

检测抽取策略的合理性。目前常用的抽取策略有全量抽取、增量抽取。对于增量抽取,捕捉变化的数据有如下几种:

采用快照方式。需要业务系统建立

insert,update,delete

触发器。

时间戳方式,在业务系统表建一个时间戳字段,一旦数据发生变化,则修改此字段。

全表删除插入方式,每次

ETL

操作先将目标表数据删除,然后抽取。

4)hash

比对,是全表比对的一个扩展,通过计算主要业务字段的

MD5

校验码存入

hash

维表,通过与

hash

维表的比对进行抽取。

日志表方式,跟进业务系统的日志表进行数据抽取。

6)oracle

变化数据捕捉,通过分析数据库自身日志判断变化的数据。

对转换规则的测试。

首先是数据格式的合法性。对于数据源中时间、数值、字符等数据的处理,是否符合数据仓库规则,是否进行统一的转换。

其次是值域的有效性。是否有超出维表或者业务值域的范围。

第三是空值的处理。是否捕获字段空值,或者需要对空值进行替换为其他含义值的处理。

第四是主键的有效性。主键是否唯一。

第五是乱码的检查。特殊符号或者乱码符号的护理规则。

第六是脏数据的处理。比如不符合业务逻辑的数据,数据孤岛。

加载策略的测试。

首先是加载策略的合理性。目前常用的加载策略有如下几种:

  1. trunctae and insert.

直接清空目标表,然后把新的数据加载进去。

  1. append.

先根据规则清除当天的记录,然后把当天的新数据追加进去。

  1. update and insert.

用新数据与目标表中的历史数据进行比较,有变化的则更新,新记录则直接插入到目标表中。

  1. keep history change.

保持历史的变化,通常是拉链记历史的方式实现。

第二面是

odl

adl

的测试。

主要关注以下几个方面(物理数据测试

逻辑数据测试):

对转换规则的测试。

首先是数据格式的合法性。对于数据源中时间、数值、字符等数据的处理,是否符合数据仓库规则,是否进行统一的转换。

其次是值域的有效性。是否有超出维表或者业务值域的范围。

第三是空值的处理。是否捕获字段空值,或者需要对空值进行替换为其他含义值的处理。

第四是主键的有效性。主键是否唯一。

第五是乱码的检查。特殊符号或者乱码符号的护理规则。

第六是脏数据的处理。比如不符合业务逻辑的数据,数据孤岛。

delta

测试。

Delta

记录的是变化的数据,通过今天与昨天数据的比对找出变化的记录。

对拉链历史测试。

主要是检查是否存在断链的记录,生命周期是否交叉。

对数据趋势测试。

首先是数据趋势要趋于平稳,,即波动是否有规律,且波动范围在设定的阀值之间。关于阀值的设定不同的业务指标有不同的标准。

对业务逻辑测试。

根据业务规则验证业务正常流。

指标口径的一致性,如对于有效

cookie

的定义是否统一口径。

如从行业维度考察各个行业的上架产品数,需要注意区分行业以及上架产品的概念。各行业的

LPV

,根据平台的情况,各个行业的

LPV

大致的区间范围。

各行业的

DPV

,根据平台的情况,各个行业的

DPV

大致的区间范围。理论上

LPV>DPV

根据业务规则验证业务异常流。

如上架产品数对于

produc_id

的异常处理,考虑行业不存在的情况等等。

程序编译是否通过,是否支持重复调度以及回滚。根据业务是否需要记历史。

验证记录平衡,从浏览明细表统计出的行业

LPV,DPV

根据业务是否平衡。

唯一性,目标表中行业维度是否唯一,是否存在重复性记录等等。

第三面是

idl

adl

的测试。

主要关注以下几个方面(物理数据测试

逻辑数据测试):

对业务逻辑测试。

根据业务规则验证业务正常流。

指标口径的一致性,如对于有效

cookie

的定义是否统一口径。

如从行业维度考察各个行业的上架产品数,需要注意区分行业以及上架产品的概念。各行业的

LPV

,根据平台的情况,各个行业的

LPV

大致的区间范围。

各行业的

DPV

,根据平台的情况,各个行业的

DPV

大致的区间范围。理论上

LPV>DPV

根据业务规则验证业务异常流。

比如上架产品数对于

produc_id

的异常处理,考虑行业不存在的情况等等。

程序编译是否通过,是否支持重复调度以及回滚。根据业务是否需要记历史。

验证记录平衡,从浏览明细表统计出的行业

LPV,DPV

根据业务是否平衡。

唯一性,目标表中行业维度是否唯一,是否存在重复性记录等等。

对数据趋势测试。

首先是数据趋势要趋于平稳,即波动是否有规律,且波动范围在设定的阀值之间。关于阀值的设定不同的业务指标有不同的标准。

第四面是源系统到

adl

的测试。

主要关注以下几个方面:

上述的综合

ETL

测试是一个持续的过程,数据仓库每天都会定时进行

ETL

的抽取,因此

ETL

测试并非是一次性的工作,必须要持续进行,才能保证数据的质量,因此

ETL

持续集成测试是有必要的。

ETL

测试分层

ETL

测试分层:针对

ETL

过程的特点,将

ETL

过程划分成不同的层级,针对层级特点来实施不同的测试方案,达到测试代码的复用以及提高测试效率的目的。

从图上可以看出,

ETL

过程存在很清晰的等级分层情况。在进行

ETL

测试的过程中,可以将

ETL

过程划分为:源数据

->odl

1

,odl->bdl

2

,bdl->idl

3

,idl->adl

4

4

个层级,

4

个层级分别是

4

个零件块,针对每个零件块进行测试代码的开发与维护,最终组合成一个整体。

在业务模型以及物理模型丰富的企业中,底层相对稳定,主题域的划分细致、明确,因此多数应用能通过

idl

主题域来进行实现,此时

ETL

测试工作的重点集中在第四零件块上,

针对第四零件块进行测试代码的开发与维护,通过调用第一零件块,第二零件块,第三零件块,从而达到整体测试。

在业务模型不丰富的企业中,一些应用的实现需要从最底层向上逐步刷取,此时

ETL

测试工作的重点分布在四个零件块上,需要进行第一,第二,第三,第四零件块的测试代码的开发与维护,通过相互调用达到整体测试。

在实际项目过程中,我们需要结合具体情况进行

ETL

过程拆分。将

ETL

分层测试与

ETL

持续集成结合起来,形成一套强有力的

ETL

测试体系。