ETL测试模型(早期)

1、什么是ETL

E-T-L代表Extract-Transform-Load。用来描述将数据从来源端经过抽取、转换、加载至目的端的过程;(数据清洗)

Extract为提取相关数据;Transform根据规则对数据进行处理与转换;Load为将数据加载到对应的仓库。

2、什么是ETL测试

保证经过E T L全过程后,从源加载到目标仓库的的数据准确无误且符合目标需求。

3、ETL测试点

围绕ETL的实现过程和分层测试的思想,ETL测试重心包括:数据源测试、转换规则测试、加载测试。为了确保需求驱动,我们还额外设置了集成统一测试。

根据软件测试左移的思想,我们需要尽量将一些可以前置的测试事情提前完成,以达到缩短工期、减小成本的目的。

因此我们将针对不同的测试阶段进行不同的测试。

需求测试

如果不想看详细说明就看这张表:

阶段测试场景测试指标详细说明

需求阶段需求测试清洗规则是否符合原始需求按照清洗规则是否可以得到原始需求需要的数据

是否过多--未过滤无效数据

是否过少--少考虑某些业务场景

清洗目标是否符合上下游要求清洗目标字段定义、值定义是否符合上下游要求

清洗规则是各种项目、业务通用清洗规则服务所有项目,但各个项目数据源格式、业务规则不同。

清洗规则是否清晰数据源,转换规则,load定义

数据源测试数据源设置是否清晰,全面。各个项目数据源格式是否符合清洗规则预期

根据语法测试数据源是否存在脏数据根据无效字符,字符模式,大小写不正确等报告脏数据

根据数据模型检查数据是否符合预期根据清洗规则建立数据模型,数据应该具备什么特点(数字检查、日期检查、精度检查、空检查)

需求阶段,即在需求确认提出阶段,测试就可以开展的工作。

ETL的需求一般由三个重要部分组成:数据源 、  清洗规则 与 清洗目标。整体的ETL需求测试也是围绕着这三个方向来完成。

1、数据源需求测试

1)数据源设置是否清晰,全面。

在需求中,关于数据源的描述务必清晰准确。注意不可含糊不清,不可出现二义性。指定的数据源也需要确保可靠与全面。

eg:在某ETL需求中,数据源指向某个数据库的某张表。我们继续调查这张表的来源,是来自另一个ETL程序,那么我们就需要结合上一个程序的逻辑来考虑数据源的稳定性与风险。

eg:在某ETL需求中,一个基础数据要求得到用户持有的所有资源,在需求的数据源设定中,仅要求获取用户背包资源,但是在不同游戏项目中,资源的存放地多种多样,而不仅仅存放在背包中。

2)根据语法测试数据源是否存在脏数据

程序上对于脏数据的处理通常是容错然后丢弃。虽然在后续测试中会涵盖脏数据的兼容测试,但是在需求提出时我们就需要对脏数据进行调查。评估脏数据的大概量级和出现的可能性也作为后续的测试参考。

我们根据无效字符,大小写不正确、空字符等报告脏数据。

3)根据数据模型检查数据是否符合预期

当我们拿到清洗规则时,可以根据清洗规则建立数据模型(这里的数据模型指数据源所具备的统一结构特征,例如:数字检查、日期检查、精度检查、空检查、数据含义检查),去调研当前数据源下有没有不符合该数据模型的数据或者存在非法数据的可能性。

后期甚至需要进行持续的监测。

eg:某ETL需求中,要求从“ 超级牛逼-EN-换预览图 - 副本 (23842702728410179)”这样的一个数据结构中取出后面的数字串。那么我们需要调查当前数据源中是否所有数据都匹配这种数据结构

eg:例如delete字段为1表示已经被删除的记录,那么在后续规则清洗的时候需要过滤这部分记录。

2、清洗规则需求测试

继承上方数据源需求测试得到的信息后,我们开始清洗规则需求测试。

1)清洗规则是否符合原始需求预期

原始需求指需求提出方希望通过使用我们的数据产品得到数据。我们需要评审我们的产品(这里指的是策划角色)产出的清洗规则的最终产物是否符合原始需求的要求。这要求测试人员能够充分了解原始需求,而原始需求往往具备较强的业务性。

我们可以通过了解行业统一指标、使用对应类比竞品、了解用户使用场景来提高自己的业务理解能力。

例如:某原始需求是希望可以得到用户历史付费最高额度,清洗规则中简单的说明了通过数据源中的price字段值group by uid后取出max(price)。但是在实际的业务场景中,部分付费信息日志是由测试人员通过特殊渠道测试产生,需要进行过滤。(这部分需要结合上方的数据源调查才得以发现)

2)清洗规则是各种项目、业务通用

3)清洗规则是否清晰

这两个部分的测试同理数据源测试

3、清洗目标需求测试

1)清洗目标是否符合上下游要求

在完整的数据产品中,不是ETL产生了结果,就结束了,往往会伴有后续的业务逻辑,对这些产出的数据进行处理。因此对清洗目标的考察还需要考虑她是否符合上下游业务的要求。

例如在一些BI报表类应用中,该报表期望展示的是一个具体的项目名称“xx项目”,但是我们在清洗结果中仅仅提供了项目ID.那么没有做好约定的话就会出现中间断层

开发设计测试:

如果不想看详细说明就看这表:

阶段测试场景测试指标详细说明

开发阶段结构测试根据清洗规则验证源表和目标表结构(类型、长度、名称)监测目标表字段定义类型、数值长度

约束验证确保按预期为特定表定义约束主键、外键、检查、默认、唯一、非空约束

设计评审分析设计漏洞

了解程序路径

1)目标表结构验证

通常在清洗开始之前,需要对目标加载的仓库进行建表。根据清洗规则验证源表和目标表结构(类型、长度、名称),通过源目标数据结构+清洗规则我们可以得出目标表结构要求结论,因此可以对目标表和源表做个结构上的对比验证。

例如:某原始需求是希望可以得到用户历史付费最高额度,清洗规则中简单的说明了通过数据源中的price字段值group by uid后取出max(price),可以推断出price字段未进行任何加工,所以目标表结构中price字段的定义应该和源表一致。

2)目标表约束验证

同理上方。确保按预期为特定表定义约束,包括:主键、外键、检查、默认、唯一、非空约束。

3)开发设计测试分析

了解开发脚本设计思路,评估是否符合需求规则实现,通过数据源分析、需求分析收集到的异常数据、脏数据进行开发设计漏洞寻找。

同时通过了解程序路径,进行异常、正向场景数据流设计,提供给后续测试使用。

例如:上文所述的源数据数据模型分析,在数据源表扫描过程中发现id出现重复,那么需要程序增加进行去重处理。

4)调度策略设计分析

关于测试脚本如何调度,清洗规则需求中通常不会明确说明。因此需要充分评估调度策略是否符合需求,时间差需求是否接受。

模块测试、

阶段测试场景测试指标详细说明

模块测试

一致性验证特定属性的数据类型和长度可能在文件或表中不同,但语义定义相同。业务正常流:口径一致,逻辑正确

业务异常流:考虑业务中存在的异常场景

完整性验证数据从条数、长度、大小上都不应缺失。1、比较源和目标之间的记录计数。

2、检查任何被拒绝的记录

3、检查数据不应在目标表的列中被截断

4、检查边界值分析

转换转换规则正确

数据精度正确

按照清洗规则实现了转换规则

数据清理在加载到暂存区域之前,应删除不必要的列临时数据及时清理

重复检查检查从源中的多个列提取并组合成一列的任何列中是否存在任何重复值

异常测试设计异常数据、场景覆盖测试对象根据业务需求设计异常数据

根据程序实现设计异常数据

增量ETL此测试是通过添加新数据来检查旧数据和新数据的数据完整性。增量测试验证插入和更新是否在增量ETL过程中按预期进行处理。

数据表现分析评测清洗结果的数据表现,来评判系统的好坏数据趋势要趋于平稳,波动具备规律,波动范围在设定的阈值之间

加载规则加载策略的合理性清空重置、覆盖更新

模块测试指的是独立的ETL任务测试。这部分的测试思路主要可以分为两个部分。

1、面向过程的测试思路

1)数据源的测试

指定正确,正确的按照需求实现了源数据的抓取。

抓取策略合理,通过增量/全量策略来抓取。验证插入和更新是否在增量ETL过程中按预期进行处理。

异常测试,通过输入开发设计阶段分析、需求评审阶段产生的数据流,验证程序的容错性。

2)转换规则测试。

数据精度处理正确,正确的按照需求实现了转换规则。

转换规则正确,通过输入正向的业务数据流来验证规则的正确性。

3)目标数据加载测试。

数据加载正确,正确的按照需求加载处理的结果到指定数据仓库中。

加载策略合理。使用了正确的加载策略,例如部分指标的加载策略应该是清空表重置加载数据,部分指标则需要覆盖更新部分即可。

2、面向结果的测试思路

1)一致性验证

部分字段的数据类型和长度可能在不同表中不同,但口径一致/逻辑正确。

口径一致:在不同的两个仓库中同个用户拥有的资产应该一致。

逻辑正确:例如清洗结果中的周报表与月报表具备逻辑上的关系,可以用来加以验证(比如有些业务 周报表相加=月报表)

2)完整性验证

将整个ETL过程黑盒看待,经过这个过程后,数据从条数、长度、大小上都不应缺失。

比较源和目标之间的记录计数。

检查任何被拒绝的记录

检查数据不应在目标表的列中被截断

检查边界值分析

3)重复检查

检查从源中的多个列提取并组合成一列的任何列中是否存在任何重复值

4)数据表现

分析评测清洗结果的数据表现,来评判系统的好坏。例如根据用户清洗结果数据趋势来判断结果的正确性,举个比较粗暴的例子:用户拥有资产在过去的七天都是日均一万。今日突然为0.则大概率有问题。

集成测试

阶段测试场景测试指标详细说明

集成测试

脚本运行策略时间差分析

脚本初始化支持

脚本冲突分析

脚本依赖分析

资源分配分析

部分脚本上线需要进行初始化支持

部分脚本依赖其他脚本清洗结果。需要再调度策略上予以满足

脚本运行稳定性观察长时间调度运行观察

仿真数据模拟测试

异常容灾

 持续性调度情况观察,这里可以采用上述的数据表现监控手段进行测试。

   仿真数据模拟,在仿真数据环境进行脚本运行情况监控。

   异常容灾: 脏数据处理、数据源库连接失败重试策略、数据仓库写入失败重试、备份策略

1)脚本运行策略

时间差分析

脚本初始化支持:部分脚本上线需要进行初始化支持

脚本冲突分析

脚本依赖分析:部分脚本依赖其他脚本清洗结果。需要再调度策略上予以满足

资源分配分析

2)脚本运行稳定性观察

   持续性调度情况观察,这里可以采用上述的数据表现监控手段进行测试。

   仿真数据模拟,在仿真数据环境进行脚本运行情况监控。

   异常容灾: 脏数据处理、数据源库连接失败重试策略、数据仓库写入失败重试、备份策略

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容