翻译自原文:https://www.guru99.com/utlimate-guide-etl-datawarehouse-testing.html
在我们了解ETL测试之前,先了解有关商业智能和数据仓库的重要性。
让我们开始吧 -
什么是BI?
商业智能是收集原始数据或业务数据并将其转化为有用和更有意义的信息的过程。
原始数据是一个组织每日事务的记录,如与客户的互动,财务管理和员工管理等。
这些数据将用于“报告,分析,数据挖掘,数据质量和解释,预测分析”。
什么是数据仓库?
数据仓库是一个数据库,专为查询和分析而设计,而不是事务处理。
通过集成来自多个异构源的数据构建数据仓库,使公司或组织能够整合来自多个来源的数据,并将分析工作与事务工作分开。
数据转化为高质量信息,以满足各级用户的所有企业报告要求。
什么是ETL?
ETL代表Extract-Transform-Load,它是将数据从源系统加载到数据仓库的过程。
从OLTP(联机事务处理)数据库中提取数据,将其转换为与数据仓库模式匹配并加载到数据仓库数据库中。
许多数据仓库还包括非OLTP系统的数据,例如文本文件,遗留系统和电子表格。
看看它是如何工作的
例如,有零售公司有不同的部门,如销售,营销,物流等。他们每个都是独立处理客户信息,而且存储数据的方式是截然不同的。
销售部门按客户名称存储,营销部门按客户编号存储。
现在,如果他们想检查客户的历史,并想知道由于不同的营销活动,他/她购买的不同的产品?这将是非常困难的。
解决方案是使用数据仓库来使用ETL将来自不同来源的信息存储在统一的结构中。
ETL可以将不同的数据集转换为统一的结构。后来使用BI工具从这些数据中获得有意义的见解和报告。
下图给出了ETL过程的ROAD MAP
-
Extract
- 提取相关数据
-
Transform
将数据转换为DW(数据仓库)格式
构建键 - 键是唯一标识实体的一个或多个数据属性。
各种键是主键,备用键,外键,复合键,代理键。
数据仓库管理这些键,并且不允许再去分配给任何其他实体。清理数据:提取数据后,将进入下一个阶段,清理和规范数据。
清理在数据中排除以及识别和修复错误。
规范意味着解决那些不兼容的数据之间的冲突,以便它们可以在企业数据仓库中使用。
除此之外,该系统还创建了用于诊断源系统问题并提高数据质量的meta-data(元数据)。
-
加载
将数据加载到DW(数据仓库)
构建聚合 - 创建聚合是汇总和存储事实表中可用的数据,以便提高最终用户查询的性能。
什么是ETL测试?
完成ETL测试是为了确保经过业务转换后从源加载到目标的数据准确无误。
它还涉及在源和目标之间使用的各个中间阶段的数据的验证。
ETL测试流程
与其他测试过程类似,ETL也经过不同的阶段。
ETL测试过程的不同阶段如下
ETL测试分五个阶段进行
- 识别数据源和需求
- 数据采集
- 实现业务逻辑和维度建模
- 构建和填充分析的多维立方体
- 构建报告
ETL测试的类型
测试类型 | 测试过程 |
---|---|
生产验证测试 | “Table balancing”或“production reconciliation”这种类型的ETL测试是在数据移入生产系统时进行的。为了支持您的业务决策,生产系统中的数据必须按正确的顺序排列。 Informatica数据验证选项提供ETL测试自动化和管理功能,以确保生产系统不会受到数据的影响。 |
源到目标测试(验证测试) | 执行这种类型的测试是为了验证转换的数据值是否是符合预期。 |
应用升级 | 这种类型的ETL测试可以自动生成,节省了大量的测试开发时间。这种类型的测试检查从旧的应用程序或库提取的数据是否与库或新应用程序中的数据完全相同。 |
元数据测试 | 元数据测试包括数据类型检查,数据长度检查和索引/约束检查的测试。 |
数据完整性测试 | 要验证所有预期的数据是否从源中加载到目标中,则完成数据的完整性测试。其中一些测试可以运行去比较和验证源和目标之间的计数,聚合和实际数据的列,简单转换或不转换。 |
数据精度测试 | 这种测试是为了确保数据按预期精确地加载和转换。 |
数据转换测试 | 在许多情况下,测试数据转换不能通过编写一个源SQL查询并将输出与目标进行比较来实现。可能需要针对每一行运行多个SQL查询来验证转换规则。 |
数据质量检测 | 数据质量测试包括语法和引用测试。为了避免在业务流程期间由于日期或订单号等造成的任何错误。 语法测试:将根据无效字符,字符模式,大小写不正确等报告脏数据。 引用测试:将根据数据模型检查数据。例如:客户ID数据质量测试包括数字检查,日期检查,精确检查,数据检查,空检查等。 |
增量ETL测试 | 此测试是通过添加新数据来检查旧数据和新数据的数据完整性。增量测试验证插入和更新是否在增量ETL过程中按预期进行处理。 |
GUI /导航测试 | 这个测试是为了检查前端报告的导航或GUI方面。 |
如何创建ETL测试用例
ETL测试是一种可以应用于信息管理行业不同工具和数据库的概念。
ETL测试的目标是确保通过业务转换后从源到目标的数据准确无误。 它还涉及在源和目标之间各个中间阶段使用的数据的验证。
在执行ETL测试时,ETL测试仪将始终使用两个文档
ETL映射表: ETL映射表包含源表和目标表的所有信息,包括每个列以及它们在引用表中的引用。
ETL测试人员需要对SQL查询感到满意,因为ETL测试可能涉及用多种连接写大的查询语句以在ETL的任何阶段验证数据。
在编写数据验证查询时,ETL映射表提供了重要的帮助。源和目标的DB Schema:应该方便地验证映射表中的任何细节。
ETL测试场景和测试用例
测试场景 | 测试用例 |
---|---|
映射文档验证 | 验证映射文档是否提供相符的ETL信息。每次更改日志应保留在映射文档中。 |
验证 | 1. 根据相应的映射文档验证源表和目标表结构。 2. 源数据类型和目标数据类型应该相同 3. 源和目标数据类型的长度应相等 4. 验证是否指定了数据字段类型和格式 5. 源数据类型长度不应小于目标数据类型长度 6. 根据映射文档验证表中列的名称。 |
约束验证 | 确保按预期为特定表定义约束 |
数据一致性问题 | 1. 特定属性的数据类型和长度可能在文件或表中不同,但语义定义相同。 2. 滥用完整性约束 |
完整性问题 | 1. 确保所有预期的数据都加载到目标表中。 2. 比较源和目标之间的记录计数。 3. 检查任何被拒绝的记录 4. 检查数据不应在目标表的列中被截断 5. 检查边界值分析 6. 比较加载到仓库的数据和源数据之间的关键字段的唯一值 |
正确性问题 | 1. 数据拼写错误或记录错误 2. 空,非唯一或超出范围的数据 |
转换 | 转换 |
数据质量 | 1. 数字检查:需要数字检查和验证 2. 日期检查:他们必须遵循日期格式,它应该在所有记录中相同 3. 精度检查 4. 数据检查 5. 空检查 |
空验证 | 为指定“Not Null”的特定列验证空值。 |
重复检查 | 1. 需要验证唯一键,主键和任何其他列应该是唯一的,如果业务需求具有任何重复的行 检查从源中的多个列提取并组合成一列的任何列中是否存在任何重复值 根据客户端要求,需要确保仅在目标中的多个列的组合不会重复 |
日期验证 | 日期值用在ETL开发中使用许多领域 1. 获取行创建日期 2. 根据ETL开发视角识别活动记录 3. 根据业务需求视角确定活动记录 4. 有时根据日期值生成更新和插入。 |
数据完整性验证 | 1. 验证源表和目标表中的完整数据集减去最佳解决方案中的查询 2. 我们需要源减去目标和目标减去源 3. 如果减法查询返回任何值,那么这些值应被视为不匹配行 4.使用intersect语句在源和目标之间相交返回的计数,应与源表和目标表的单独的计数相匹配 5. 如果行的查询返回的行和计数相交小于源计数或目标表,那么我们可以考虑重复的行存在。 |
数据清理 | 在加载到暂存区域之前,应删除不必要的列。 |
ETL错误的类型
错误类型 | 描述 |
---|---|
用户界面错误bug | * 与应用程序的GUI相关 * 字体样式,字体大小,颜色,对齐方式,拼写错误,导航等 |
边界值分析(BVA)相关的bug | 最小值和最大值 |
等价类分类(ECP)相关的bug | 有效和无效的类型 |
输入/输出bug | * 有效值不被接受 * 无效值被接受 |
计算bug | * 精度错误 * 最终输出错误 |
加载条件错误 | * 不允许多个用户 * 不允许客户预期的加载 |
Race Condition错误 | * 系统崩溃和挂起 * 系统无法运行客户端平台 |
版本控制错误 | * 没有标志匹配 没有版本信息可用 这通常发生在回归测试中 |
H / W错误 | 设备没有响应应用程序 |
帮助源错误 | 帮助文件中的错误 |
错误类型 | 描述 |
---|---|
用户界面错误bug | * 与应用程序的GUI相关 * 字体样式,字体大小,颜色,对齐方式,拼写错误,导航等 |
边界值分析(BVA)相关的bug | 最小值和最大值 |
等价类分类(ECP)相关的bug | 有效和无效的类型 |
输入/输出bug | * 有效值不被接受 * 无效值被接受 |
计算bug | * 精度错误 * 最终输出错误 |
加载条件错误 | * 不允许多个用户 * 不允许客户预期的加载 |
Race Condition错误 | * 系统崩溃和挂起 * 系统无法运行客户端平台 |
版本控制错误 | * 没有标志匹配 没有版本信息可用 这通常发生在回归测试中 |
H / W错误 | 设备没有响应应用程序 |
帮助源错误 | 帮助文件中的错误 |
数据库测试与ETL测试的区别
ETL测试 | 数据库测试 |
---|---|
验证数据是否按预期移动 | 主要目标是检查数据是否遵循数据模型中定义的规则/标准 |
验证源和目标中的计数是否匹配 验证数据转换是否符合预期 |
验证没有孤立记录和维护外主键关系 |
验证ETL期间外部主键关系是否保留 | 验证没有冗余表,数据库被最佳地标准化 |
验证是否重复的加载数据中 | 验证是否在需要的列中丢失数据 |
ETL测试的职责
ETL测试的主要职责分为三类
- 阶段表/ SFS或MFS
- 业务转型逻辑应用
- 应用转换后,从阶段文件或表格中加载目标表。
ETL测试的一些职责是
- 测试ETL软件
- 测试ETL数据仓库的组件
- 执行后端数据驱动测试
- 创建,设计和执行测试用例,测试计划和测试工具
- 确定问题并为潜在问题提供解决方案
- 审核需求和设计规范
- 数据传输和测试平面文件
- 编写SQL查询用于各种场景,如计数测试
ETL性能测试和调优
ETL 性能测试是确保ETL系统能够处理多个用户和事务负载的确认测试。
性能调优的目标是通过消除性能瓶颈来优化会话性能。
要调整或提高会话的性能,您必须找出性能瓶颈并将其消除。
在源和目标数据库,映射,会话和系统中可以找到性能瓶颈。
用于性能测试的最佳工具之一是Informatica。
ETL测试自动化
ETL测试的一般方法是使用SQL脚本或做数据的“ eyeballing”。这些ETL测试方法耗时,容易出错,很少提供完整的测试覆盖。
加快,提高覆盖率,降低成本,提高
生产和开发环境中ETL测试的缺陷发现率,自动化是需要的时间。一个这样的工具是Informatica。
ETL测试的最佳实践
- 确保数据正确转换
- 没有任何数据丢失和截断,数据应该被加载到数据仓库中
- 确保ETL应用程序适当地拒绝并使用默认值替换并报告无效数据
- 需要确保在规定的预期时间范围内加载数据仓库的数据,以确认可扩展性和性能
- 所有方法都应该有适当的单元测试,而不管可见性
- 要测量其有效性,所有单元测试都应使用适当的覆盖率测试技术
- 为每个测试用例争取一个断言
- 创建针对异常的单元测试