ETL 测试教程
⚡ 智能摘要
ETL 测试验证数据如何从源系统经由转换逻辑流入目标数据仓库,从而确认数据的准确性、完整性和可靠性。本资源解释了初级和中级测试人员需要了解的流程阶段、测试类型、常见缺陷类别、自动化方法和实用最佳实践。

什么是ETL?
ETL 代表 提取-转换-加载它描述了数据如何从源系统迁移到数据仓库。数据从联机事务处理 (OLTP) 数据库中提取,转换以匹配数据仓库模式,然后加载到仓库数据库中。许多数据仓库还整合了来自非 OLTP 系统的数据,例如文本文件、旧版应用程序和电子表格。
例如,一家零售商店可能设有销售、市场营销和物流等独立部门。每个部门独立处理客户信息,并且各自存储数据的方式也不同。销售部门可能按客户姓名存储记录,而市场营销部门则使用客户ID。
如果业务团队想要查看客户在不同营销活动中的完整购买历史记录,由于数据分散,这项工作非常繁琐。解决方案是使用…… 数据仓库 使用 ETL 将来自不同来源的信息以统一的结构存储。ETL 可以将不同的数据集转换为统一的结构,以便 BI 工具后续可以从中提取有意义的洞察并生成报告。
下图展示了 ETL 测试流程以及您将在本指南中用到的核心概念:
1)提取物
- 从一个或多个源系统中提取相关数据。
2) 变换
- 将数据转换为 DW(数据仓库)格式。
- 构建键:键是一个或多个数据属性,用于唯一标识一个实体。 键的类型 键包括主键、备用键、外键、复合键和代理键。数据仓库拥有这些键的所有权,并且不允许任何其他实体分配它们。
- 数据清洗:数据提取后,将进入清洗和规范化阶段。清洗阶段修复遗漏并识别错误。规范化阶段解决不兼容数据集之间的冲突,使其能够在企业数据仓库中使用。系统还会创建元数据,帮助诊断源系统问题并提高数据质量。
3)负载
- 将数据加载到数据仓库(DW)中。
- 构建聚合:聚合汇总并存储来自以下方面的数据: 事实表 提高终端用户查询的性能。
什么是 ETL 测试?
ETL 测试旨在确保数据从源端加载到目标端,经过业务转换后,其准确性得到保证。它还包括对源端和目标端之间各个中间阶段的数据进行验证。由于 ETL 代表提取、转换和加载 (Extract-Transform-Load),因此 ETL 测试涵盖这三个阶段以及数据在它们之间转换的所有环节。
为什么 ETL 测试很重要?
了解了 ETL 测试是什么之后,下一个问题就是:为什么企业要投入如此多的精力?业务决策依赖于正确、完整且可信的数据,因此,任何一个转换错误都可能对财务报告、客户分析和监管披露产生连锁反应。
以下几点说明了强大的 ETL 测试的实际价值:
- 数据准确性: 它证实,经业务规则转换后的值与文档中记录的映射相匹配。ping 规范,防止隐性腐败。
- 可靠的报道: 仪表盘和 BI 工具依赖于数据仓库,因此经过验证的 ETL 管道可以保护每个下游报告和 KPI。
- 法规遵从性: 银行业、医疗保健业和保险业等行业必须证明数据沿袭性和完整性能够得到端到端的维护。
- 减少返工: 在较低环境中发现缺陷可以避免代价高昂的生产重新加载、人工核对和面向客户的错误。
- 性能保证: ETL 测试用于衡量加载窗口、吞吐量和瓶颈,以便数据仓库能够随着数据量的增长而持续扩展。
明确了这些动机之后,下一节将介绍 ETL 测试人员在实际项目中遵循的结构化流程。
ETL测试流程
与其他测试流程类似,ETL 测试也分为不同的阶段。ETL 测试流程的各个阶段如下:
ETL 测试分五个阶段进行:
- 确定数据来源和要求
- 数据采集
- 实现业务逻辑和维度建模
- 构建并填充数据
- 生成报告
了解了总体流程之后,让我们来看看适合此生命周期的具体测试类型。
ETL 测试的类型
- 生产验证测试
测试过程: 这种类型的 ETL 测试也称为“表平衡”或“生产数据核对”,是在数据进入生产系统后执行的。为了支持业务决策,生产数据必须保持正确的顺序。 Informatica的 数据验证选项提供 ETL 测试自动化和管理功能,以防止生产系统因错误数据而受到损害。 - 来源 Target 测试(验证测试)
测试过程: 这种类型的测试可以验证转换后的数据值是否与预期目标值相符。 - 应用领域 Upgrades
测试过程: 这种类型的 ETL 测试可以自动生成,从而节省大量测试开发时间。它会检查从旧应用程序或存储库中提取的数据是否与新应用程序或存储库中的数据匹配。 - 元数据测试
测试过程: 元数据测试包括数据类型检查、数据长度检查以及索引或约束检查。 - 数据完整性测试
测试过程: 数据完整性测试用于验证所有预期数据是否已从源加载到目标。常见的测试包括:在数据转换简单或未进行转换的情况下,比较和验证源列和目标列之间的记录计数、聚合值和实际数据。 - 数据准确性测试
测试过程: 此测试旨在确保数据能够按预期准确加载和转换。 - 数据转换测试
测试过程: 测试数据转换通常无法仅通过单一数据源完成。 SQL 查询和输出比较。可能需要对每一行数据进行多次 SQL 查询,以验证转换规则。 - 数据质量测试
测试过程:数据质量测试包括语法测试和引用测试。它们可以防止因日期或订单号错误而导致的业务流程错误。
语法测试会根据无效字符、字符模式以及大小写顺序错误等情况报告脏数据。
参考测试会将数据与数据模型进行比对。例如:客户 ID。
数据质量测试还包括数字检查、日期检查、精度检查、数据检查和空值检查。
- 增量ETL测试
测试过程: 此测试检查新数据加入后新旧数据的完整性。增量测试验证在增量 ETL 过程中,插入和更新操作是否按预期处理。 - GUI/导航测试
测试过程: 此测试检查前端报告的导航和图形用户界面方面。
如何创建 ETL 测试用例
ETL 测试是一个可以应用于信息管理行业中不同工具和数据库的概念。 ETL 测试的目标是确保从源加载到目标的数据在业务转换后是准确的。 它还涉及对源和目标之间各个中间阶段的数据进行验证。
在执行 ETL 测试时,ETL 测试人员始终会使用两个文档:
- ETL 地图ping 床单: ETL图ping 该表格包含源表和目标表的所有信息,包括每一列及其在参考表中的查找关系。ETL 测试人员必须熟悉 SQL 查询,因为 ETL 测试可能涉及编写包含多个连接的大型查询,以在任何阶段验证数据。ETL 映射ping 表格在编写数据验证查询时能提供很大的帮助。
- 源数据库和目标数据库的数据库模式: 应该妥善保管此图,以便随时核实地图上的任何细节。ping 床单。
ETL 测试场景和测试用例
- 地图ping 文档验证
测试用例: 请验证映射表中是否提供了相应的 ETL 信息。ping 文档。每个映射都应该维护一个变更日志。ping 博士。 - 验证
测试用例:1) 根据相应的映射验证源表和目标表的结构。ping 博士。
2)源数据类型和目标数据类型应该相同。
3)源数据和目标数据的长度应该相等。
4)确认已指定数据字段类型和格式。
5) 源数据类型长度不应小于目标数据类型长度。
6) 根据映射表验证表中的列名。ping 博士。 - 约束验证
测试用例: 确保已按预期为特定表定义约束条件。 - 数据一致性问题
测试用例:1) 即使语义定义相同,特定属性的数据类型和长度在不同的文件或表中也可能有所不同。
2)滥用完整性约束。 - 完整性问题
测试用例:1)确保所有预期数据都已加载到目标表中。
2)比较源和目标之间的记录数。
3)检查是否有被拒绝的记录。
4)检查目标表的列中数据是否被截断。
5)检查边界值分析。
6) 比较加载到仓库中的数据和源数据中关键字段的唯一值。 - 正确性问题
测试用例:1)拼写错误或记录不准确的数据。
2) 空值、非唯一值或超出范围的数据。 - 转型
测试用例: 验证映射中的每个业务规则和转换逻辑ping 文档在到达目标之前已正确应用于源数据。 - 数据质量
测试用例:1)数字检查:验证数字格式和值。
2)日期检查:日期必须遵循统一的格式,并且在所有记录中保持一致。
3)精度检查。
4)数据检查。
5)空值检查。 - 空值验证
测试用例: 验证指定列中“非空”选项是否存在空值。 - 重复检查
测试用例:1)验证唯一键、主键以及根据业务要求应为唯一的任何其他列,以确认没有重复行。
2) 检查从多个源列提取并合并到一列中的任何列中是否存在重复值。
3)根据客户要求,确保目标中多列组合中不存在重复项。 - 日期验证
测试用例: 日期值在ETL开发的许多领域都有应用:1) 了解行创建日期。
2) 从 ETL 开发的角度识别活动记录。
3)从业务需求角度确定活动记录。
4)有时,根据日期值,会生成更新和插入操作。 - 完成数据验证
测试用例:1)使用减法查询作为最佳解决方案,验证源表和目标表中的完整数据集。
2)你需要进行源值减目标值和目标值减源值的计算。
3) 如果减法查询返回任何值,则应将这些行视为不匹配。
4) 使用 intersect 语句匹配源和目标之间的行。
5) intersect 返回的计数应该与源表和目标表的各个计数相符。
6) 如果减法查询返回行,并且交集计数小于源计数或目标计数,则存在重复行。 - 数据清洁度
测试用例: 在加载到暂存区之前,应该删除不必要的列。
ETL 错误的类型
即使有了完善的测试用例,ETL 管道仍然可能以各种方式出现故障。下图总结了您应该注意的错误类别,后面的表格则对每一种错误进行了详细描述。
| 错误类型 | 描述 |
|---|---|
| 用户界面错误/外观错误 |
• 与应用程序的 GUI 相关 • 字体样式、字号、颜色、对齐方式、拼写错误、导航等等 |
| 边界值分析(BVA)相关错误 | • 最小值和最大值 |
| 等价类划分 (ECP) 相关错误 | • 有效和无效类型 |
| 输入/输出错误 |
• 有效值不被接受 • 接受无效值 |
| 计算错误 |
• 数学错误 • 最终输出错误 |
| 加载条件错误 |
• 不允许多用户 • 不允许客户预期的负载 |
| 竞争条件错误 |
系统崩溃和死机 • 系统无法运行客户端平台 |
| 版本控制错误 |
• 没有徽标匹配 • 没有可用的版本信息 • 通常发生在 迭代测试 |
| 硬件错误 | • 设备没有响应应用程序 |
| 帮助源错误 | • 帮助文档中的错误 |
数据仓库测试
数据仓库测试 数据仓库测试是一种测试方法,用于检验数据仓库内部数据的完整性、可靠性、准确性和一致性,以确保其符合公司的数据框架。数据仓库测试的主要目的是确保仓库内集成的数据足够可靠,以便公司做出决策。ETL 测试侧重于数据移动,而数据仓库测试则涵盖了 ETL 最终所服务的更广泛的存储和报表层。
数据库测试和 ETL 测试之间的区别
虽然这两个学科都处理结构化数据,但它们回答的问题却不同。下表突出了二者之间的实际区别:
| ETL测试 | 数据库测试 |
|---|---|
| 验证数据是否按预期移动。 | 主要目标是检查数据是否符合数据模型中定义的规则和标准。 |
| 验证源数据和目标数据中的计数是否匹配,以及转换后的数据是否符合预期。 | 验证是否存在孤立记录,以及是否维护了外键主键关系。 |
| 验证 ETL 过程中外键主键关系是否得到保留。 | 验证是否存在冗余表,以及数据库是否已进行最佳规范化。 |
| 检查已加载数据中是否存在重复项。 | 检查所需列中是否存在数据缺失。 |
ETL 中的性能测试
ETL 中的性能测试 ETL 测试技术旨在确保 ETL 系统能够处理多个用户和事务的负载。ETL 的主要目标是确保 ETL 系统能够处理多个用户和事务的负载。 性能测试 旨在通过识别和消除性能瓶颈来优化和提升会话性能。源数据库和目标数据库映射。ping会话、系统本身都可能存在瓶颈。
Informatica 是用于性能测试和调优的最佳工具之一。
ETL 测试人员的职责
ETL测试人员的主要职责分为三类:
- 舞台桌/SFS 或 MFS
- 应用业务转型逻辑
- Target 从暂存文件或应用转换后的表加载表
ETL测试人员的一些日常职责包括:
- 测试 ETL 软件
- ETL 数据仓库的测试组件
- 执行后端数据驱动测试
- 创建、设计和执行 测试用例测试计划和测试框架
- 找出问题并针对潜在问题提供解决方案
- 批准需求和设计规范
- 验证数据传输并测试平面文件
- 编写适用于各种场景(例如计数测试)的 SQL 查询
ETL 测试自动化
ETL 测试的常用方法是使用 SQL 脚本或通过目测来查看数据。这些方法耗时、容易出错,而且很少能提供完整的测试结果。 测试覆盖率为了加快执行速度、提高覆盖率、降低成本并改进 缺陷 在生产和开发环境中进行检测,自动化已成为当务之急。Informatica 就是这样一款工具。
现代团队还将传统自动化与人工智能辅助工具相结合,这些工具可以建议转换测试、生成合成源数据并标记模式漂移,从而使测试人员能够专注于复杂的业务逻辑,而不是重复的脚本维护。
ETL 测试的最佳实践
- 请确保数据转换正确。
- 预测数据应无损无截断地加载到数据仓库中。
- 确保 ETL 应用程序能够正确拒绝无效数据,并在适用时将其替换为默认值,并进行报告。
- 确认数据在规定的预期时间内加载到数据仓库中,以验证其可扩展性和性能。
- 无论方法是否可见,所有方法都应该有相应的单元测试。
- 为了衡量其有效性,所有单元测试都应该使用适当的覆盖技术。
- 力求每个测试用例只包含一个断言。
- 创建 单元测试 针对异常情况。
查看 - ETL 测试面试问题与答案





