ETL测试或数据仓库测试入门
概述
在我们学习ETL测试之前,先了解下business intelligence(即BI)和数据仓库。
什么是BI?
BI(Business Intelligence)即商务智能,它是一套完整的解决方案,用来将企业中现有的数据(原始数据或商业数据或业务数据等)进行有效的整合,快速准确地提供报表并提出决策依据,帮助企业做出明智的业务经营决策。
原始数据记录了企业日常事务,例如与客户交互的信息、财务信息,员工相关记录等等。
这些数据可以用于汇报、分析、挖掘、数据质量、交互、预测分析等等
什么是数据仓库
数据仓库是为查询和分析而不是事务处理而设计的数据库。
数据仓库是通过整合不同的异构数据源而构建起来的。
数据仓库的存在使得企业或组织能够将整合、分析数据工作与事务处理工作分离。
数据能够被转换、整合为更高质量的信息来满足企业级用户不同层次的需求。
什么是ETL
ETL是Extract-Transform-Load的缩写(提取-转换-载入),是一个完整的从源系统提取数据,进行转换处理,载入至数据仓库的过程。
我们从联机事务数据库中提取数据,进行转换处理,匹配数据仓库模式,然后载入至数据仓库数据库中。
在通常情况下,大多数的数据仓库要整合非联机事务数据库系统的数据,例如来源文本文件、日志、电子表格等等。
下面我们一起看看ETL是怎么工作的。
例如一个公司,有关于其不同部门的数据记录,销售、市场、物流等等。每个部门所处理的客户信息是独立的,而且存储的数据也是相对不同的,假如销售团队有存储客户的姓名,而物流团队存储的是用户 的ID。
现在我们想要去检查客户的历史数据,并且想要了解他/她在不同的营销活动中购买的不同产品是什么。这将是一项非常枯燥的工作。
该解决方案就是使用数据仓库应用统一的结构来存储经过ETL处理过的不同源的数据。
ETL能够转换不同结构/类型的数据集为统一的结构,以便后续使用BI工具生成有意义的分析和表报。
下面我们看一下ETL过程完整的流程图:
ETLProcess.png
Extract
提取有效的数据Transform
将提取的数据转换为数据仓库模式/格式
构建keys:一个key是一个或多个数据属性的惟一标识实例,key的类型可以是主键(primary key)、外键(foreign key)、替代键(alternate key)、复合键(composite key)以及代理键(surrogate key)。这些key只允许数据仓库进行维护管理,且不允许其他任何实体进行分配。
数据清理:在提取好数据后,则进入下一个节点:数据清理。对提取的数据中的错误进行标识和修复。解决不同数据集之间的不兼容的冲突问题,使数据一致性,以便数据集能用于目标数据仓库。通常,通过转换系统的处理,我们能创建一些元数据(meta data)来解决源数据的问题,并改进数据的质量。
Load
将转换后的数据载入数据仓库
构建聚集:创建聚集对数据进行汇总并存储数据至表中,以改进终端用户的查询体验。
什么是ETL测试
ETL测试是为了确保从源到目的地数据经过业务转换完成后是准确的。
同时它还涉及数据的验证,即从源到目的地数据各个不同阶段验证数据。
ETL是Extract-Transform-Load的缩写。
ETL测试过程
与其他测试过程类似,ETL也需要经历不同的测试阶段。其流程如下:
ETLTestingProcess.png
ETL测试过程主要分为以下五大阶段:
分析需求、业务和源数据
获取数据
实现业务逻辑和维度建模
构建和填充数据
生成报告
ETL测试类型
Production Validation Testing
该类型的ETL测试是在数据迁移至生产系统时进行的。为了保证生产业务的正常运营,生产系统中的数据必须以正确的顺序进行排序。在该ETL测试类型中要注意从数据层面进行自动化测试和管理能力的植入。Source to Target Testing(Validation Testing)
该类型的测试主要元组转换的数据是否满足预期的转换目标Application Upgrades(升级测试)
该类型的ETL测试是可以自动生成的,能节省大量的测试开发时间。主要检查旧应用或存储库中提取的数据是否与新的应用或新的存储库中的数据完全相同。Metadata testing(元数据测试)
元数据测试包括数据类型检查、数据长度和索引/约束检查。Data Completeness Testing(数据完整性测试)
当把所有期望的数据从源加载到目标地时,就算完成了数据完整性测试。在数据完整性测试过程中,我们还可以进行一些简单的转换或无转换的源与目标之间的计数、聚合和实际数据比较和验证的测试。Data Accuracy Testing(数据准确性测试)
该类型测试验证数据正确的完成加载和按预期目标进行转换。Data Transformation Testing(数据转换测试)
测试数据转换是一个复杂的过程,并不是简单的写一个源SQL查询并与目标进行比较来实现的。可能需要为每个行运行多个SQL查询,来验证转换规则Data Quality Testing(数据质量测试)
数据质量测试包含语法和基准测试。为了避免在业务过程中由于日期或唯一编号(例如订单号)引起的错误,进行数据质量测试。
语法测试:根据无效字符、字符模式、不正确大小写、顺序等出具脏数据测试结果
基准测试:基于数据模型检查数据,例如客户ID数据质量测试,包含:数字检查、日期检查、精度检查、数据检查、零校验等等
Incremental ETL Testing(增量ETL测试)
该类型测试主要验证旧数据和新数据的完整性,并添加新数据。增量测试验在增量ETL过程中,插入和更新是否满足预期的要求。GUI/Navigation Testing
该类型测试主要检查生成的大数据报告的UI\导航方面是否正常
怎么创建ETL测试用例
ETL测试是一个可以应用于信息管理领域中不同工具和数据库的概念。
ETL测试的目的是确保在业务转换完成后从源加载到目的地的数据是正确无误的。
ETL测试同样还涉及在源和目的地之间转换时的各个阶段的数据的验证。
在从事ETL测试时,有两份文档是ELT测试人员实时使用的:
ETL映射表:一个ETL映射表包含源和目的地表的所有的信息,包括每个列及其引用表等约束关系。ETL测试人员需要更为优美的SQL查询语句,因为在ETL测试各阶段可能需要编写具有多个连接的大查询来验证数据。ETL映射表在为数据验证编写查询时提供大量的有用的信息。
源、目标数据库模式:该模式应该便于验证映射表中的所有细节。
ETL测试场景和测试用例
序号 | 测试场景 | 测试用例 |
---|---|---|
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 | 数据清理 | 对于不需要的列在载入至数据仓库前应该进行删除 |
ETL的bug类型
序号 | bug类型 | 描述说明 |
---|---|---|
1 | 用户接口bug | 1. 主要涉及应用的GUI 2.字体、样式、颜色、对齐、拼写错误、导航等等 |
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测试与数据库测试的不同
序号 | ETL测试 | 数据库测试 |
---|---|---|
1 | 验证数据是否按照预期进行了移动 | 主要验证数据是否遵循了设计预定的数据模式规则或标准 |
2 | 验证数据经过业务转换后是否满足预定的转换逻辑以及验证源和目标数据计算是否一致 | 主要表的主、外键等越苏是否正常 |
3 | 验证ETL过程数据表的主外键关系是否保存 | 验证没有冗余表,数据库最佳化 |
4 | 验证已载入的数据拷贝是否满足预期 | 验证需要的是否缺少数据 |
ETL测试工程师的主要责任
对于一个ETL测试工程师而言,其关键的责任有三大类:
源数据分析(数据库、文本等类型数据分析)
业务转换逻辑实现
将经过转换的数据载入至目标表
其他有:
掌握ETL测试软件
ETL数据仓库测试组件
在后端执行数据驱动测试
创建、设计、执行测试用例、计划等
标识问题、提供问题解决方案
梳理业务需求和设计测试策略
写SQL或数据库操作代码完成实现各种测试场景
等等其他工作内容。。。
ETL测试或数据仓库测试入门的更多相关文章
- [大数据测试]ETL测试或数据仓库测试入门
转载自: http://blog.csdn.net/zhusongziye/article/details/78633934 概述 在我们学习ETL测试之前,先了解下business intellig ...
- Android渗透测试Android渗透测试入门教程大学霸
Android渗透测试Android渗透测试入门教程大学霸 第1章 Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...
- Google C++测试框架系列:入门
Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...
- [原创] 浅谈ETL系统架构如何测试?
[原创] 浅谈ETL系统架构如何测试? 来新公司已入职3个月时间,由于公司所处于互联网基金行业,基金天然固有特点,基金业务复杂,基金数据信息众多,基金经理众多等,所以大家可想一下,基民要想赚钱真不容易 ...
- 【转】WEB测试到移动测试的转换
移动互联网的发展毋庸置疑是必然的趋势,我们曾经传统WEB互联网测试的同学,也必然走上移动测试的道路,移动测试与pc测试到底需要怎样的思维转变才能更快的进入移动节奏呢?对比下WEB与移动的测试不同点: ...
- web测试与app测试的区别
才开始做测试就接触的web端,后来也接触app端,所以在这里对于自己工作中所接触到的做一些总结(总要养成总结的好习惯). 对于web端和移动端app,功能方面的测试,例如测试设计方法这些都大同小异,都 ...
- (转)学习使用Jmeter做压力测试(一)--压力测试基本概念
一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- Android Testing学习01 介绍 测试测什么 测试的类型
Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...
随机推荐
- ps 证件照制作
自己制作证件照,再通过印鸽等服务打印邮寄,个人感觉还是比较方便实惠. 使用ps的定义图案和填充功能(ps精简版) 定义图案 1,打开1寸照片 2,图像=>图像大小,可选去掉约束比例 1寸:2.5 ...
- js获取整个屏幕的尺寸
原文 首先获取屏幕宽度:window.screen.width; //整个屏幕的宽度. 然后获取屏幕高度:window.screen.height; //整个屏幕的高度. 获取可用工作区 ...
- [BTS] BizTalk WCF-SQL Adapter 高级应用
9102年岁尾,41岁的我居然还在搞 BizTalk,感觉就是一种悲伤. 国内用户少之又少,能坚持一直在使用的“忠实”用户那就更少了. 不是它不好用,而是微软全线转向云服务,这个产品也已经快10年没有 ...
- MySQL 中<=>用法(长知识)
https://www.runoob.com/mysql/mysql-operator.html MySQL 运算符 本章节我们主要介绍 MySQL 的运算符及运算符的优先级. MySQL 主要有以下 ...
- [Jenkins]局域网内可访问配置方法 -windows
如果是把jenkins.war放在tomcat中运行,则当jenkins宿主机,启动tomcat服务之后,则直接可以通过局域网访问jenkins 下面这种情况是,直接通过jenkins.exe安装的 ...
- 007-Linux 查看端口
1.使用ss 查看 ss 一般用于转储套接字统计信息.它还可以显示所有类型的套接字统计信息,包括 PACKET.TCP.UDP.DCCP.RAW.Unix 域等. ss -lntpd | grep : ...
- tensorflow安装过程-(windows环境下)---详解
一, 前言:本次安装tensorflow是基于Python的,安装Python的过程不做说明(既然决定按,Python肯定要先了解啊):本次教程是windows下Anaconda安装Tensorflo ...
- 常见 Web 性能优化方式
这篇文章是我阅读 Web Performance 101 之后的进行的粗糙的翻译作为笔记,英语还行的童鞋可以直接看原文. 这篇文章主要介绍了现代 web 加载性能(注意不涉及代码算法等),学习为什么加 ...
- React Native创建项目等待时间长解决
1. 初始化工程 在终端输入命令 :react-native init AwesomeProject 从命令上看,看起来是初始化一个工程,于是, 1分钟...... 10分钟...... 1小时... ...
- socket --自己简单的理解
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...