前阵子在博客中总结了关于ETL测试的来龙去脉,简单粗浅地明确了ETL测试是做什么的,以及为什么需要ETL测试的问题。今天我们再来讲讲ETL测试怎么做,以及怎么做会比较好,效率高。
首先,谈到了测试,通俗讲无外乎就是通过设计一定的输入、经过被测对象的运算之后,对生成的输出数据的正确性进行校验。如果发现所有的测试输入,得到的测试输出,都和预期的一致,那么测试就是通过的。否则就是被测对象的逻辑出现了问题,就是我们说的发现了bug。
那么对于ETL测试来讲,输入是什么呢?如何设计输入数据才能充分地测试被测对象呢?
一、测试数据的构造:
如果你记性好,一定还记得在软件工程课程中,讲到针对某个功能如何设计测试用例的逻辑吧。
我们知道,测试数据讲求逻辑的覆盖,而覆盖又分为什么分支覆盖、条件覆盖什么的。
对于一个分支,我们需要设置两种数据分别来是的这个分支为真和为假来测试分支逻辑是否正确。
只不过对于像java这样的语言,分支都是一个个if
而对于SQL分支就是一整个where子句。
而每个分子中可能有很多个条件,比如if(A && B && C)等,A、B、C就是这个分支的条件。为了测试各个条件,我们需要是的每个条件都出现一次为真或为假的覆盖,这就是通常说的条件覆盖(应该是这样的,呵呵)。而在SQL中,所谓的条件覆盖想必你已经清楚了,就是是的一个where子句中的每个条件都有一次为真和为假的机会。
那我们在设计测试输入数据的时候就要遵循这样的原则。 (其实还有一种条件组合覆盖,更加负责,我认为一般没必要哈哈 )
当然这只是我们在设计数据时候的原则,有时候我们也会使用真实的业务数据来进行测试。真实的业务数据有个好处是:1,数据量大;2,存在真实业务环境中的各种数据情况。
一般来讲,我们会结合两种方式进行数据准备:以真实数据为主,结合构造数据的方式。 数据的构造可以通过修改真实数据和完全构造业务数据两种方式实现。
二、执行被测逻辑,生成测试输出数据。
这一步很简单,就是将开发提测的代码在准备的数据环境中执行,会生成相应的输出数据。而这个输出数据就是我们要进行验证的。
SQL和其他语言的区别在于,如果是Java,每一条测试数据、每一个测试用例都要单独执行。每条测试输入数据会生成对应的测试输出数据。而对于SQL,如果你用过SQL的话一定明白,它一下子就能处理了你所构造的所有的数据,它是一种从数据集到数据集的操作。有时候,这个数据集的大小回事万级、也可能时百万级、千万级。
三、测试输出数据的校验
这个是测试执行中的核心步骤,在传统的测试中,一个输入数据——>一个输出数据,验证该输出数据 ,这就构成了一个测试用例,即我们说的TestCase。对应与ETL测试中,是数据集到数据集的行为,而且数据量很大,因此一条一条测数据的思路并不可取。我们只能通过验证一个数据集是否正确来决定测试用例是否执行成功以及测试是否可以通过。
可以想到的一个简单的思路是,我们也构造一个输出结果的数据集,成为预期结果集,然后和实际输出结果集进行比对。一致则OK,不一致则bug。
但是这样有一个问题就是,这个预期结果集的构造比较麻烦,而且对于测试人员来讲,完全够造这么一个测试集工作量和风险都很大,得不偿失。
因此,我们采取另外一种策略:我们不会构造一个完整的预期输出结果集,而是对实际输出结果集的一些维度进行分别测试 ,这些维度一般来讲是简单的,容易度量和生成预期值的。
- 比如说,我们检查实际结果集的数据量(count)是否和预期一致,构造完整的预期结果集困难,但是预期的数据量(count)构造则很容易。
- 在比如说,唯一性,通过分析,我们得到结果集中某几个维度,或某些个维度是唯一键。我们就可以针对实际结果集进行检查,看这些维度是否满足唯一性。
这些都是对结果集的特征属性进行校验,这些特征属性是结果集正确的必要条件。
对于结果集的值校验,我们也不必要构造完全的预期结果集进行比对,我们可以将结果集按照字段进行分类,
- 将容易计算的,逻辑简单的字段分在一起,我们写一些简单的,不容易出错的SQL生成这几个字段的结果集,和实际结果集进行比较。
- 对于计算逻辑复杂的字段,我们采取单个处理,各个击破的策略搞定
俗话说,大事化小、小事化了就是这个道理,哈哈。
这第三点可以说是ETL测试与传统过程是程序测试的本质区别所在。
传统的测试逻辑是以设计输入为主的,即一个测试用例主要是考虑:该用例的输入数据对于程序逻辑的覆盖程度,而起结果验证则是相对简单的 。我这里姑且称之为:单维度导向的测试 。
而ETL测试,则多加了一个方面,对输出数据的验证逻辑也同样需要合理的设计 ,否则就无法准确判断输出结果是否正确,也就谈不上正确测试了。既需要考虑输入数据的逻辑覆盖情况,有需要合理设计输出数据的验证逻辑 。我这里姑且称之为:双维度导向的测试 。
讲到这里,ETL测试逻辑基本上就清楚了。
接下来我们需要讲讲实际操作的问题了,实际操作主要面临两个问题:
- 数据构造
- 结果集验证
分别对应上述的第一、三点。
对于数据构造,我们在第一点中已经说明,以真实数据为主,结合构造数据的方式。 数据的构造可以通过修改真实数据和完全构造业务数据两种方式实现。
对于结果集的验证 ,我们需要针对设计的结果集的各个验证维度上分别编写两个SQL。一个SQL从输入数据中计算该维度的预期值,例如数据量等。另一个SQL从实际结果集中计算该维度上实际结果集的值 。然后将这两个SQL的结果进行比较,一致,则测试用例通过,不一致则Bug。
有时候一个复杂的结果集可能会有很多个验证维度。那就意味着需要写很多个SQL,那这些SQL如何保存,如何执行。有没有一种简单、方便、高效的方式进行管理。以及这些SQL的执行是手动将SQL写到数据库里执行,手工比对结果呢?还是有其他的方法,可以自动化的批量执行和自动比对?
这就是我们下一篇该主题的博客要讲的,ETL测试的自动化执行 。
相关推荐
在进行ETL测试时,我们关注的是数据从源系统到目标系统流动过程中的完整性和准确性。以下是一些在ETL测试中需要注意的重要问题: 1. **数据校验控件的问题**: 在ETL过程中,数据校验是确保数据质量的重要步骤。...
"主流ETL工具测试比较" ETL(Extract、Transform、Load)是一种常用的数据integration工具,用于从多个数据源中提取数据,转换为一种格式,然后加载到目标系统中。在实际应用中,选择合适的ETL工具是非常重要的。...
基于云技术的电信ETL方案+IBM刀片性能测试报告.pdf 如何使用ETL_技术.pdf 数据仓库ETl工具箱3.pdf 数据仓库ETl工具箱5.pdf 数据仓库ETl工具箱6.pdf 数据仓库ETl工具箱7.pdf 数据仓库ETl工具箱8.pdf 数据仓库...
ETL,全称为Extract, Transform, Load,是数据仓库领域中的关键过程,用于从不同的数据源提取数据(Extract),经过清洗、转换(Transform)后,加载(Load)到目标系统,如数据仓库或大数据平台。这个过程对于数据...
ETL测试确保数据的正确性和完整性,包括源系统验证、转换规则验证、目标系统验证和性能测试。 9. **监控和调度**: ETL过程的监控和调度是保证ETL流程稳定运行的关键。工具如Airflow、Azkaban和Control-M可以帮助...
ETL(Extract, Transform, Load)是数据仓库领域中的关键过程,用于从各种源系统抽取数据,转换数据以满足特定需求,然后加载到目标数据库或数据仓库中。在这个主题中,我们将深入探讨ETL工具的开源特性以及配置使用...
解决这些问题需要对业务理解深入,选择合适的ETL工具,并进行精心设计和测试。 总结来说,ETL是数据仓库建设的核心部分,它将复杂的业务数据转化为有价值的分析信息,为企业决策提供支持。通过ETL工具,企业能够从...
3. 测试:进行单元测试、集成测试和性能测试,确保ETL流程的正确性和稳定性。 4. 监控:设置监控机制,跟踪ETL任务的运行状态,及时发现并解决问题。 5. 部署与维护:将ETL流程部署到生产环境,并进行持续的维护和...
3. **测试**:验证ETL流程的正确性和性能,确保数据的准确无误。 **应用案例** XX集团利用DTS(SSIS的前一版本)处理来自用友、外部Excel等不同数据源的数据,实现BI系统的ETL功能。另一个案例中,XX集团整合了SAP...
在ETL过程中,步骤通常是数据处理任务的最小单元,比如数据清洗、数据转换、数据加载等。"TemplateStepPlugin"可能包含了一个基本的插件类定义、示例实现以及相关的配置文件,开发者可以通过修改这些内容来创建自己...
ETL工具如Kettle提供了丰富的功能,包括连接功能、平台独立性、数据规模支持、设计灵活性、复用性、扩展性、数据转换、测试和调试、血统与影响分析、以及日志和审计等。这些功能使得ETL工具能够高效地处理各种数据...
文档还涵盖了开发规范和测试管理,为ETL开发人员提供了一套标准化的工作流程,从而确保ETL系统的稳定性和数据的准确性。同时,也提到了上线管理,指导如何在新的ETL作业或更新后确保系统平稳过渡。 总体架构部分...
9. **ETL测试**:为了确保ETL流程的正确性,需要编写测试用例,模拟不同场景进行测试。这可能包括单元测试、集成测试和系统测试。 10. **监控与报警**:ETL流程运行过程中,需要实时监控性能指标和错误,设置适当的...
常见网站日志生成过程业务详解 企业数据采集方案介绍 Flume拦截器、channel选择器、sink 处理器回顾 Flume实现日志采集到HDFS并自动分区 定时调度Shell脚本实现日志数据分区上传HDFS ...ETL程序打包测试
3. **验证与测试**:确保数据库连接有效并测试连接,生成的数据库链接字符串将用于后续的数据抽取过程。 #### ETL脚本函数:灵活操控数据流 QlikView的数据脚本不仅支持数据抽取,还提供了丰富的脚本函数,用于...
包括定期进行数据质量检查、实现灵活的ETL设计以适应变化、监控和日志记录以追踪问题、以及自动化测试等。 9. **大数据与ETL** 在大数据环境下,传统的ETL可能无法满足高并发、大规模数据处理的需求,因此出现了...
4. **测试**:在生产环境之外验证ETL流程,确保数据质量和准确性。 5. **部署**:将ETL作业上线,定期运行以保持数据仓库的更新。 6. **监控**:持续监控ETL性能,及时发现并解决问题。 总之,"ETL工具箱 中文版"是...
4. 编写和测试ETL脚本,确保数据转换正确无误。 5. 配置调度,决定ETL任务何时运行。 6. 监控ETL执行,记录日志,处理异常和错误。 7. 对加载到目标系统后的数据进行验证,确保数据质量。 了解并熟练掌握ETL,对于...
在数据处理领域,ETL(Extract, Transform, Load)工具被广泛应用于数据集成过程中,用于从不同的数据源提取数据、转换数据格式以及加载到目标系统中。本文将详细介绍如何利用ETL工具将Excel文件中的数据导入MySQL...