ETL测试教程
在我们了解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应用程序适当地拒绝并使用默认值替换并报告无效数据
 - 需要确保在规定的预期时间范围内加载数据仓库的数据,以确认可扩展性和性能
 - 所有方法都应该有适当的单元测试,而不管可见性
 - 要测量其有效性,所有单元测试都应使用适当的覆盖率测试技术
 - 为每个测试用例争取一个断言
 - 创建针对异常的单元测试
 
作者:杰克家的猫
链接:https://www.jianshu.com/p/f56c808cd2c3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
ETL测试教程的更多相关文章
- MyCat安装与测试教程 超详细!
		
MyCat安装与测试教程 超详细! MyCat基础知识 一.什么是MYCAT? 1. 一个彻底开源的,面向企业应用开发的大数据库集群 2. 支持事务.ACID.可以替代MySQL的加强版数据库 3. ...
 - ETL测试
		
今天让我在休息之余给我的测试朋友介绍一个在我的测试沙龙上的需要和提升技能之一,例如ETL测试(Extract,Transform,and Load,中文名称为数据提取.转换和加载),这篇文章告诉你ET ...
 - [大数据测试]ETL测试或数据仓库测试入门
		
转载自: http://blog.csdn.net/zhusongziye/article/details/78633934 概述 在我们学习ETL测试之前,先了解下business intellig ...
 - ETL测试基本知识
		
转载自: https://www.cnblogs.com/clarke157/p/6383024.html 一.ETL测试的重要性: ETL(Extract-Transform-Load的缩写,即数据 ...
 - 大数据测试之ETL测试工具和面试常见的问题及答案
		
转载自: http://www.51testing.com/html/87/n-3722487.html 概述 商业信息和数据对于任何一个企业而言都是至关重要的.现在很多公司都投入了大量的人力.资金和 ...
 - Kail Linux渗透测试教程之免杀Payload生成工具Veil
		
Kail Linux渗透测试教程之免杀Payload生成工具Veil 免杀Payload生成工具——Veil Kail Linux渗透测试教程之免杀Payload生成工具Veil,Veil是一款利用M ...
 - Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap
		
Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap 网络扫描和嗅探工具——Nmap Nmap也就网络映射器(Network Mapper),是一个免费开放的网络扫描和嗅探工具.该工具可以扫描 ...
 - ETL测试小结
		
一.ETL测试的重要性: ETL(Extract-Transform-Load的缩写,即数据抽取.转换.装载的过程)作为BI/DW(Business Intelligence)的核心和灵魂,能够按照统 ...
 - Mac环境下RabbitMq安装与测试教程
		
RabbitMq安装与测试教程 Installing on Mac I. 安装 123456789 brew install rabbitmq ## 进入安装目录cd /usr/local/Cella ...
 
随机推荐
- Java【第七篇】面向对象之类设计
			
Java类的继承 类继承语法规则 < 修饰符> class < 子类名称> [extends < 父类>] { <属性和方法的声明> } 类的继承 子 ...
 - Linux(1)-卸载挂载分区
			
> df -lh > fuser -m -v /dev/mapper/autovg-autolv > fuser -m -k -v /dev/mapper/autovg-autolv ...
 - HTML/CSS: 如何制作未读信息图标
			
最近公司项目中涉及到制作通讯界面中未读信息的带数字的红色圆点图标. 拿我目前的博客头像图片为例(其实就是谷歌图片中粗略挑了一张顺眼的图片),效果图如下: HTML代码如下: <img id=&q ...
 - 使用ZooKeeper协调多台Web Server的定时任务处理(方案1)
			
背景说明: 有一套Web服务程序, 为了保证HA, 需要在多台服务器上部署, 该服务程序有一些定时任务要执行, 现在要保证的是, 同一定时任务不会在多台机器上被同时执行. 方案1 --- 任务级的主备 ...
 - python学习03
			
字符串的基本使用 1.字符编码集 ASCII编码:外国人常用的大小写英文字母.数字和一些符号,一共127个字符,用1个字节(byte)可以涵盖完,也就是8个位,它将序列中的每个字节理解为一个字符. U ...
 - 013_RomanToInteger
			
#####solution1####faster#### def romanToInt(s): d={ 'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, ...
 - 2.10 while循环应用
			
while循环应用 1. 计算1~100的累积和(包含1和100) 参考代码如下: #encoding=utf-8 i = 1 sum = 0 while i <= 100: sum = sum ...
 - Django2.1配置xadmin2.0
			
系统:Ubuntu18.04 环境:py3.6, django2.17, xadmin-django2.0 xadmin-django2.0下载:xadmin2.0(进入github后,在Branch ...
 - day 16 - 2 内置函数(二)练习
			
内置函数(二)练习 1.用 map 来处理字符串列表,把列表中所有人都变成 sb,比方 alex_sbname=['alex','wupeiqi','yuanhao','nezha'] name=[' ...
 - 408 JavaScript 变量、数据类型、正则
			
JavaScript 特点 是一门解释性脚本语言 .基于对象脚本编程.简单性(弱类型).安全性.动态性.跨平台 作用: 初学js 引入方式 与html有相同之处 也是3种1 用JavaScript前缀 ...