概述
在我们学习ETL测试之前,先了解下business intelligence(即BI)和数据仓库。
BI(Business Intelligence)即商务智能,它是一套完整的解决方案,用来将企业中现有的数据(原始数据或商业数据或业务数据等)进行有效的整合,快速准确地提供报表并提出决策依据,帮助企业做出明智的业务经营决策。
原始数据记录了企业日常事务,例如与客户交互的信息、财务信息,员工相关记录等等。
这些数据可以用于汇报、分析、挖掘、数据质量、交互、预测分析等等
数据仓库是为查询和分析而不是事务处理而设计的数据库。
数据仓库是通过整合不同的异构数据源而构建起来的。
数据仓库的存在使得企业或组织能够将整合、分析数据工作与事务处理工作分离。
数据能够被转换、整合为更高质量的信息来满足企业级用户不同层次的需求。
ETL是Extract-Transform-Load的缩写(提取-转换-载入),是一个完整的从源系统提取数据,进行转换处理,载入至数据仓库的过程。
我们从联机事务数据库中提取数据,进行转换处理,匹配数据仓库模式,然后载入至数据仓库数据库中。
在通常情况下,大多数的数据仓库要整合非联机事务数据库系统的数据,例如来源文本文件、日志、电子表格等等。
下面我们一起看看ETL是怎么工作的。
例如一个公司,有关于其不同部门的数据记录,销售、市场、物流等等。每个部门所处理的客户信息是独立的,而且存储的数据也是相对不同的,假如销售团队有存储客户的姓名,而物流团队存储的是用户 的ID。
现在我们想要去检查客户的历史数据,并且想要了解他/她在不同的营销活动中购买的不同产品是什么。这将是一项非常枯燥的工作。
该解决方案就是使用数据仓库应用统一的结构来存储经过ETL处理过的不同源的数据。
ETL能够转换不同结构/类型的数据集为统一的结构,以便后续使用BI工具生成有意义的分析和表报。
下面我们看一下ETL过程完整的流程图:
ETLProcess.png
ETL测试是为了确保从源到目的地数据经过业务转换完成后是准确的。
同时它还涉及数据的验证,即从源到目的地数据各个不同阶段验证数据。
ETL是Extract-Transform-Load的缩写。
与其他测试过程类似,ETL也需要经历不同的测试阶段。其流程如下:
ETLTestingProcess.png
ETL测试过程主要分为以下五大阶段:
ETL测试是一个可以应用于信息管理领域中不同工具和数据库的概念。
ETL测试的目的是确保在业务转换完成后从源加载到目的地的数据是正确无误的。
ETL测试同样还涉及在源和目的地之间转换时的各个阶段的数据的验证。
在从事ETL测试时,有两份文档是ELT测试人员实时使用的:
序号 | 测试场景 | 测试用例 |
---|---|---|
1 | Mapping Doc Validation(映射文件验证) | 验证映射文件是否提供了响应的ETL信息,且每个映射文档的更新日志有记录 |
2 | Validatioin(验证) | 1. 根据对应的映射文件验证源与目的地数据仓库的表结构2. 验证源和目标数据的类型一致3. 验证源和目标数据的长度一致4. 验证数据字段类型和格式是指定的类型5. 验证源的数据类型长度不应小于目标数据类型长度6. 针对映射表对数据表的列的名称进行验证 |
3 | 约束验证 | 验证目标表中的约束关系满足我们的期望设计 |
4 | 数据一致性问题 | 1. 要防止语义定义相同,但特定属性的数据类型和长度不一致的问题2. 防止完整性约束滥用 |
5 | 完整性问题 | 1. 要确保所有期望的数据都已经完整的加载到目标表中2. 要比较源和目标数据的个数(即确保计数上的完整)3. 检查出现的任何不合格的记录4. 检查目标表列中的数据没出现被截断的情况5. 对边界值进行分析检查6. 要检查比较目标数据仓库和源数据的关键字段的唯一性 |
6 | 正确性问题 | 1. 数据要没有拼写错误或不准确的记录2. 无null、非惟一或超出范围的数据记录存在 |
7 | 转换 | 验证转换逻辑的正确性 |
8 | 数据质量 | 1. 数值型验证,验证是否为数值类型2. 日期型验证,验证是否为日期格式,并且在所有日期类型数据的格式应该统一3. 精度验证,小数点的精度要满足期望的精度4. 数据检查:检查数据的正确性,完整性5. null检查 |
9 | 拷贝验证 | 1. 验证目标表中业务要求所有惟一性指标均正确的实现(例如主键、惟一标识的键、或其他任一惟一表示的列)2. 验证从源数据多列合并而成的数据是正确的3. 验证仅仅根据客户要求对源数据进行了多列合并至目标表中 |
10 | 日期验证 | 日期是ETL开发过程中常用的数据,主要用于:1. 了解数据行创建的日期2. 用于识别活动记录3. 根据业务需求透视表确定活动记录4. 便于基于时间插入、更新记录 |
11 | 数据完整性验证 | 在验证源和目标表中的数据集的完整性时,我们需要用到交集运算,以确定目标数据的完整性 |
12 | 数据清理 | 对于不需要的列在载入至数据仓库前应该进行删除 |
序号 | bug类型 | 描述说明 |
---|---|---|
1 | 用户接口bug | 1. 主要涉及应用的GUI2.字体、样式、颜色、对齐、拼写错误、导航等等 |
2 | 边界值bug | 数据的边界值范围 |
3 | 等价类划分bug | 有效和无效类 |
4 | 输出/输出bug | 1.未接受的有效值2. 无效的值被接受 |
5 | 计算类bug | 1. 数学计算错误2. 最终输出错误 |
6 | 载入条件bug | 1. 不运行多用户操作2. 不运行用户载入期望的数据 |
7 | 崩溃bug | 1. 系统宕机或挂起2. 系统无法运行在用户的平台上 |
8 | 版本控制bug | 1. 无匹配标识2. 没有可用的版本信息3. 一般版本控制bug发生在回归测试时 |
9 | 硬件问题 | 一般发生在应用程序不兼容设备 |
10 | 文档错误bug | 错误的帮助文档信息 |
序号 | ETL测试 | 数据库测试 |
---|---|---|
1 | 验证数据是否按照预期进行了移动 | 主要验证数据是否遵循了设计预定的数据模式规则或标准 |
2 | 验证数据经过业务转换后是否满足预定的转换逻辑以及验证源和目标数据计算是否一致 | 主要表的主、外键等越苏是否正常 |
3 | 验证ETL过程数据表的主外键关系是否保存 | 验证没有冗余表,数据库最佳化 |
4 | 验证已载入的数据拷贝是否满足预期 | 验证需要的是否缺少数据 |
对于一个ETL测试工程师而言,其关键的责任有三大类:
其他有:
等等其他工作内容