ETL 测试教程
什么是 ETL 测试?
ETL 测试的目的是确保从源加载到目标、经过业务转换后的数据是准确的。它还涉及验证源和目标之间使用的各个中间阶段的数据。ETL 是 Extract-Transform-Load(提取-转换-加载)的缩写。
数据仓库测试
数据仓库测试是一种测试方法,其中数据仓库内的数据的完整性、可靠性、准确性和一致性会经过测试,以确保符合公司的数据框架。数据仓库测试的主要目的是确保数据仓库中集成的数据足够可靠,以便公司能够据此做出决策。
什么是 ETL?
ETL 代表提取-转换-加载(Extract-Transform-Load),它是一个描述数据如何从源系统加载到数据仓库的过程。数据从 OLTP 数据库中提取,经过转换为匹配数据仓库的模式,然后加载到数据仓库数据库中。许多数据仓库还会整合来自非 OLTP 系统的数据,例如文本文件、旧有系统和电子表格。
让我们看看它是如何工作的
例如,有一家零售店,它有不同的部门,如销售、市场营销、物流等。每个部门都独立处理客户信息,并且他们存储数据的方式也大不相同。销售部门按客户姓名存储,而市场营销部门则按客户ID存储。
现在,如果他们想查询客户的历史记录,想知道他/她因为不同的营销活动购买了哪些不同的产品,这将非常繁琐。
解决方案是使用数据仓库,通过 ETL 以统一的结构存储来自不同来源的信息。ETL 可以将异构的数据集转换为统一的结构。之后,使用 BI 工具从这些数据中提取有意义的见解和报告。
这份 ETL 测试教程中的下图为您展示了 ETL 测试流程的路线图和各种 ETL 测试概念
1) 提取
- 提取相关数据
2) 转换
- 将数据转换为 DW(数据仓库)格式
- 构建键 – 键是唯一标识一个实体的一个或多个数据属性。各种键的类型包括主键、候选键、外键、复合键、代理键。数据仓库拥有这些键,并且绝不允许任何其他实体分配它们。
- 数据清洗:数据提取后,将进入下一阶段,即数据的清洗和整合。清洗包括删除数据中的遗漏,以及识别和修复错误。整合意味着解决那些不兼容数据之间的冲突,以便它们可以在企业数据仓库中使用。此外,该系统会创建元数据,用于诊断源系统问题并提高数据质量。
3) 加载
- 将数据加载到 DW(数据仓库)
- 构建聚合 – 创建聚合是指对事实表中可用的数据进行汇总和存储,以提高最终用户查询的性能。
ETL 测试流程
与其他测试流程类似,ETL 也经历不同的阶段。ETL 测试流程的不同阶段如下
ETL 测试分五个阶段进行
- 识别数据源和需求
- 数据采集
- 实施业务逻辑和维度建模
- 构建和填充数据
- 构建报告
ETL 测试的类型
- 生产验证测试
测试过程:“表平衡”或“生产对账”,这类 ETL 测试是在数据移入生产系统时进行的。为了支持您的业务决策,生产系统中的数据必须按正确的顺序排列。 Informatica 数据验证选项提供了 ETL 测试自动化和管理功能,以确保生产系统不会因数据而受到损害。 - 源到目标测试(验证测试)
测试过程:进行此类测试是为了验证转换后的数据值是否为预期的数据值。 - 应用程序升级
测试流程:这种类型的 ETL 测试可以自动生成,节省了大量的测试开发时间。这种测试会检查从旧应用程序或存储库中提取的数据是否与新存储库或新应用程序中的数据完全相同。 - 元数据测试
测试过程:元数据测试包括数据类型检查、数据长度检查和索引/约束检查。 - 数据完整性测试
测试过程:为验证所有预期数据是否都从源加载到目标,需要进行数据完整性测试。可以运行的一些测试包括:对于具有简单转换或无转换的列,比较和验证源和目标之间的计数、聚合和实际数据。 - 数据准确性测试
测试过程:进行此测试是为了确保数据按预期准确加载和转换。 - 数据转换测试
测试流程:进行数据转换测试是因为在许多情况下,无法通过编写一个源SQL查询并将输出与目标进行比较来实现。可能需要为每一行运行多个SQL查询来验证转换规则。 - 数据质量测试
测试流程数据质量测试包括语法测试和引用测试。为了避免在业务流程中因日期或订单号而产生任何错误,会进行数据质量测试。
语法测试:它将报告脏数据,基于无效字符、字符模式、不正确的大小写顺序等。
引用测试:它将根据数据模型检查数据。例如:客户ID。
数据质量测试包括数字检查、日期检查、精度检查、数据检查、空值检查等。
- 增量 ETL 测试
测试过程:此测试旨在检查在添加新数据后,旧数据和新数据的数据完整性。增量测试验证在增量 ETL 过程中,插入和更新是否按预期处理。 - GUI/导航测试
测试过程:此测试用于检查前端报告的导航或 GUI 方面。
如何创建 ETL 测试用例
ETL 测试是一个可以应用于信息管理行业中不同工具和数据库的概念。ETL 测试的目标是确保从源加载到目标、经过业务转换后的数据是准确的。它还涉及验证源和目标之间使用的各个中间阶段的数据。
在执行 ETL 测试时,ETL 测试人员将始终使用两个文档
- ETL 映射表:ETL 映射表包含源表和目标表的所有信息,包括每个列及其在参考表中的查找。ETL 测试人员需要熟练掌握 SQL 查询,因为 ETL 测试可能涉及编写包含多个连接的大型查询,以在 ETL 的任何阶段验证数据。ETL 映射表在编写用于数据验证的查询时提供了重要帮助。
- 源和目标的数据库模式:应随手备用,以验证映射表中的任何细节。
ETL 测试场景和测试用例
- 映射文档验证
测试用例:验证映射文档是否提供了相应的 ETL 信息。每个映射文档都应维护变更日志。 - 验证
测试用例1) 根据对应的映射文档验证源表和目标表的结构。
2) 源数据类型和目标数据类型应该相同
3) 源和目标中数据类型的长度应相等
4) 验证数据字段类型和格式是否已指定
5) 源数据类型长度不应小于目标数据类型长度
6) 根据映射文档验证表中的列名。 - 约束验证
测试用例:确保为特定表按预期定义了约束 - 数据一致性问题
测试用例1) 尽管语义定义相同,但特定属性的数据类型和长度可能在文件或表中有所不同。
2) 完整性约束的滥用 - 完整性问题
测试用例1) 确保所有预期数据都已加载到目标表中。
2) 比较源和目标之间的记录数。
3) 检查是否有任何被拒绝的记录
4) 检查数据在目标表的列中不应被截断
5) 检查边界值分析
6) 比较加载到数据仓库的数据和源数据之间关键字段的唯一值 - 正确性问题
测试用例1) 拼写错误或记录不准确的数据
2) 空值、非唯一或超出范围的数据 - 转换
测试用例:转换 - 数据质量
测试用例1) 数字检查:需要进行数字检查并验证
2) 日期检查:它们必须遵循日期格式,并且在所有记录中都应相同
3) 精度检查
4) 数据检查
5) 空值检查 - 空值验证
测试用例:验证特定列指定为“非空”的位置是否存在空值。 - 重复检查
测试用例1) 需要验证唯一键、主键以及根据业务需求应为唯一的任何其他列是否含有重复行
2) 检查从源中的多个列提取并合并到一个列中的任何列是否存在重复值
3) 根据客户要求,需要确保仅在目标内的多个列组合中没有重复项 - 日期验证
测试用例:日期值在ETL开发的许多领域被用于1) 了解行创建日期
2) 从 ETL 开发角度识别活动记录
3) 从业务需求角度识别活动记录
4) 有时基于日期值生成更新和插入。 - 完整数据验证
测试用例1) 要验证源表和目标表中的完整数据集,最好的解决方案是使用 MINUS 查询
2) 我们需要执行“源 minus 目标”和“目标 minus 源”
3) 如果 minus 查询返回任何值,这些值应被视为不匹配的行
4) 需要使用 intersect 语句匹配源和目标之间的行
5) intersect 返回的计数应与源表和目标表的单独计数相匹配
6) 如果 MINUS 查询返回行数,并且 INTERSECT 的计数小于源表或目标表的计数,那么我们可以认为存在重复行。 - 数据清理
测试用例:不必要的列应在加载到暂存区之前删除。
ETL 缺陷的类型
缺陷类型 | 描述 |
---|---|
用户界面缺陷/外观缺陷 | • 与应用程序的图形用户界面(GUI)相关 • 字体样式、字体大小、颜色、对齐方式、拼写错误、导航等等 |
边界值分析 (BVA) 相关缺陷 | • 最小值和最大值 |
等价类划分 (ECP) 相关缺陷 | • 有效和无效类型 |
输入/输出缺陷 | • 有效值不被接受 • 无效值被接受 |
计算缺陷 | • 数学错误 • 最终输出错误 |
负载条件缺陷 | • 不允许多个用户 • 不允许客户期望的负载 |
竞态条件缺陷 | • 系统崩溃和挂起 • 系统无法在客户端平台上运行 |
版本控制缺陷 | • 标志不匹配 • 没有可用的版本信息 • 这通常发生在回归测试中 |
硬件缺陷 | • 设备对应用程序没有响应 |
帮助源缺陷 | • 帮助文档中的错误 |
数据库测试与 ETL 测试的区别
ETL 测试 | 数据库测试 |
---|---|
验证数据是否按预期移动 | 主要目标是检查数据是否遵循数据模型中定义的规则/标准 |
验证源和目标中的计数是否匹配
验证转换后的数据是否符合预期 |
验证没有孤立记录并且外键-主键关系得到维护 |
验证外键-主键关系在ETL过程中是否得以保留 | 验证没有冗余的表,并且数据库已达到最佳规范化 |
验证加载的数据中是否有重复 | 验证在需要的列中数据是否缺失 |
ETL 测试人员的职责
ETL 测试人员的主要职责分为三类
- 暂存表/ SFS 或 MFS
- 应用了业务转换逻辑
- 应用转换后,从暂存文件或表加载目标表。
ETL 测试人员的一些职责是
- 测试 ETL 软件
- 测试 ETL 数据仓库的组件
- 执行后端数据驱动测试
- 创建、设计和执行测试用例、测试计划和测试工具
- 识别问题并为潜在问题提供解决方案
- 批准需求和设计规范
- 数据传输和测试平面文件
- 为各种场景(如计数测试)编写 SQL 查询
ETL 中的性能测试
ETL 中的性能测试是一种测试技术,用于确保 ETL 系统能够处理多个用户和事务的负载。ETL 性能测试的主要目标是通过识别和消除性能瓶颈来优化和提高会话性能。源数据库和目标数据库、映射、会话以及系统都可能存在性能瓶颈。
用于性能测试/调优的最佳工具之一是 Informatica。
ETL 测试的自动化
ETL 测试的通用方法是使用 SQL 脚本或对数据进行“目测检查”。这些 ETL 测试方法耗时、易出错,且很少能提供完整的测试覆盖率。为了加速、提高覆盖率、降低成本、提高在生产和开发环境中 ETL 测试的缺陷检测率,自动化已是当务之急。Informatica 就是这样一种工具。
ETL 测试的最佳实践
- 确保数据转换正确
- 预期数据应在没有任何数据丢失和截断的情况下加载到数据仓库中
- 确保 ETL 应用程序能适当地拒绝无效数据,并用默认值替换并报告
- 需要确保数据在规定和预期的时间框架内加载到数据仓库,以确认可扩展性和性能
- 无论可见性如何,所有方法都应有适当的单元测试
- 为了衡量其有效性,所有单元测试都应使用适当的覆盖技术
- 力求每个测试用例只有一个断言
- 创建针对异常的单元测试
查看 – ETL 测试面试问题与答案