CN102981946B - Etl冒烟测试方法 - Google Patents

Etl冒烟测试方法 Download PDF

Info

Publication number
CN102981946B
CN102981946B CN201110263581.4A CN201110263581A CN102981946B CN 102981946 B CN102981946 B CN 102981946B CN 201110263581 A CN201110263581 A CN 201110263581A CN 102981946 B CN102981946 B CN 102981946B
Authority
CN
China
Prior art keywords
etl
smoke test
test
smoke
field
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201110263581.4A
Other languages
English (en)
Other versions
CN102981946A (zh
Inventor
刘健男
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201110263581.4A priority Critical patent/CN102981946B/zh
Publication of CN102981946A publication Critical patent/CN102981946A/zh
Priority to HK13104708.0A priority patent/HK1177293A1/zh
Application granted granted Critical
Publication of CN102981946B publication Critical patent/CN102981946B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

一种ETL冒烟测试方法,所述方法包括:通过数据库连接程序获取用于调用目标测试表的调用指令;所述数据库连接程序根据所获取的调用指令调用ETL冒烟测试存储过程;所述ETL冒烟测试存储过程对所述目标测试表进行冒烟测试,然后向所述数据库连接程序返回测试结果;以及所述数据库连接程序将所述测试结果整理成ETL冒烟测试报表,并输出所述ETL冒烟测试报表。本申请还提出了相应的ETL冒烟测试装置。本申请将ETL测试人员在不同项目中需要重复去做的工作抽取出来自动批量完成,节省了ETL测试人员的测试时间,也避免了测试人员在做枯燥的重复工作时犯低级错误。很快地对项目的整体质量有一个把握,保证了整个项目的进度顺利进行。

Description

ETL冒烟测试方法
技术领域
本申请涉及ETL(即,数据提取、转换和加载)测试方法,尤其涉及在数据仓库应用中的ETL测试方法。
背景技术
数据库已经在信息技术领域有了广泛的应用,我们社会生活的各个部门,几乎都有各种各样的数据库保存着与我们的生活息息相关的各种数据。
作为数据库的一个分支,数据仓库通常是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,它用于对管理决策过程的支持。数据仓库中的信息不是从各个业务系统中简单抽取出来的,而是经过一系列加工、整理和汇总的过程。
ETL负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。相对于关系数据库,数据仓库技术没有严格的数学理论基础,它更面向实际工程应用。所以从工程应用的角度来考虑,按照物理数据模型的要求加载数据并对数据进行一些系列处理,处理过程与经验直接相关,同时这部分的工作直接关系到数据仓库中数据的质量,从而影响到联机分析处理和数据挖掘结果的质量。
ETL是数据抽取(Extract)、转换(Transform)、装载(Load)的过程,是构建数据仓库的重要一环。用户从数据源抽取出所需的数据,经过数据清洗、转换,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。为了快速地构建可用的数据仓库,需要开发各自的ETL工具和相关应用。这些ETL工具和相关应用在正式投入使用之前需要进行测试,即ETL测试,这项工作往往需要大量的测试人员花费大量的时间才能完成。
ETL测试是一个新兴的测试领域,在业界还没有较统一的测试方法。目前ETL测试人员在测试不同的项目时,要做很多重复的测试工作。同时ETL测试人员在接手一个项目时,不能很快地对整个项目的质量有一个整体的把握,往往因为在测试过程中发现项目存在的问题太多而不得不将整个项目退回给开发部门进行大幅度修改,这样就严重耽误了整个项目的进度,是造成项目发布延迟的一个主要原因。
在现有技术的一种解决方案中,针对ETL测试的每一个指标写一段SQL(结构化查询语言)语句,将所有的SQL语句保存在一份文件中。当要测试新的项目时,打开该文件,将对应SQL语句中相应的表名和字段名做一下替换再放到数据库中执行,然后等待查看执行结果。这种解决方案的缺点是:
1.仍然需要很多人工操作,在替换SQL语句的过程中有可能出错。
2.针对每个指标执行一段SQL语句,会重复地读取数据库表,不但测试执行的效率低,而且对数据库和服务器造成的压力也大。
3.产出物全部是SQL语句的执行结果,拿给非ETL测试人员看很难做分析,不直观。
在现有技术的另一种解决方案中,将所有通用的测试用例放到同一个存储过程或方法中。虽然免去了很多人工操作,然而存储过程中每个测试用例是独立的,没有进行整个优化,这样每执行一个测试用例就要对被测试表进行一次全表扫描,产生了大量不必要的I/O(输入/输出),执行性能差,对数据库和服务器的压力大。
发明内容
通常,软件在制作过程中需要编译出多个中间测试版本,根据项目开发计划,只有有限的几个测试版本需要执行正式测试。这些测试版本在刚刚编译出来之后,需要进行一些基本性能确认测试,例如是否可以正确安装/卸载,主要功能是否实现,是否存在严重死机或数据严重丢失等缺陷。如果测试版本通过了这样的基本性能确认测试,就可以根据正式测试文档对该测试版本进行正式测试,否则,就需要重新修改和编译该测试版本。这样的基本性能确认测试一般称之为冒烟测试。
也就是说,冒烟测试这一术语描述的是在将代码更改嵌入到产品的源树(即源代码树)中之前对这些更改进行验证的过程。在检查代码时,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。
在本发明提出之前,在ETL测试领域没有像一般软件开发过程中测试领域那样在投入全面测试之前有一个验证项目当前是否达到全面测试标准的冒烟测试,即,如果冒烟测试不通过,则直接将代码由测试人员退回给开发人员修复代码,提高项目整体质量,使之达到全面测试的标准。这样,如果一个项目的质量很差就提交给测试人员进行全面测试,随便一测就发现很多问题,必定会影响测试进度,浪费测试人员的测试资源。
为此,本申请将上面所述的一般软件开发过程中使用的冒烟测试的概念引入到了ETL测试中,以便提高ETL测试的速度和质量。为此,本申请提出了一种ETL冒烟测试方法,所述方法包括:通过数据库连接程序获取用于调用目标测试表的调用指令;所述数据库连接程序根据所获取的调用指令调用ETL冒烟测试存储过程;所述ETL冒烟测试存储过程对所述目标测试表进行冒烟测试,然后向所述数据库连接程序返回测试结果;以及所述数据库连接程序将所述测试结果整理成ETL冒烟测试报表,并输出所述ETL冒烟测试报表。
本申请还提出了一种ETL冒烟测试装置,所述装置包括获取模块、调用模块、冒烟测试及返回模块、整理及输出模块,其中:所述获取模块用于获取调用目标测试表的调用指令;所述调用模块用于根据所获取的调用指令调用所述冒烟测试及返回模块;所述冒烟测试及返回模块用于对所述目标测试表进行冒烟测试,然后输出测试结果;以及所述整理及输出模块用于接收所述测试结果,将其整理成ETL冒烟测试报表,并输出所述ETL冒烟测试报表。
本申请的ETL冒烟测试方法引用了功能测试中冒烟测试的概念,将ETL测试人员在测试不同ETL项目中需要重复去做的工作抽取出来自动批量完成,大大节省了ETL测试人员的测试时间,也避免了测试人员在做枯燥的重复工作时犯一些低级错误。同时,使用ETL冒烟测试方法可以像功能测试中的冒烟测试一样,很快地对项目的整体质量有一个把握,如果ETL冒烟测试执行产生的报告中很多指标都存在问题,那可以直接退回给开发人员修改,保证了整个项目的进度顺利进行。
通过以下参照附图对本申请实施例的说明,本申请的上述以及其它目的、特征和优点将更加明显。
附图说明
下面将参照所附附图来描述本申请的实施例,其中:
图1示例性示出了本申请的ETL冒烟测试方法的示意图;
图2示例性示出了本申请的ETL冒烟测试方法的一个实施例的示意图;
图3示例性示出了本申请的ETL冒烟测试方法所使用的存储过程的流程图;
图4示例性示出了本申请的ETL冒烟测试方法所使用的存储过程的一个实施例的流程图;以及
图5示例性示出了本申请的ETL冒烟测试装置的示意图。
具体实施方式
ETL冒烟测试方法想要达到的目的与功能测试中的冒烟测试方法基本一致,都是为了验证项目是否达到了全面测试的标准。但是它们的具体实现是完全不一样的。功能测试中的冒烟测试的每一个冒烟测试点均是由测试人员人工指定的,并且冒烟测试也是由测试人员人工测试的。而本发明的ETL冒烟测试是自动的,测试人员所需要做的只是对最终生成的ETL冒烟测试报告的各项指标进行分析。
另外,ETL冒烟测试指标的选取是至关重要的,这是因为,在技术上可以计算得到的指标非常多,可以说是成百上千,不可能全部都放到ETL冒烟测试报告中,因为那样既影响设备性能,也加重了测试人员分析报告的工作负担。因此ETL测试的一个关键是选取最重要的指标,并且要考虑到指标之间的搭配,这是因为,很多情况下是要分析多个指标之间值的一个相对关系才能发现ETL项目中潜在的问题。选取指标还要考虑与具体ETL项目的业务逻辑的低耦合,即考虑到大部分ETL项目的通用业务逻辑,这样才可以避免不同ETL项目不同业务逻辑对ETL冒烟测试带来的影响。
下面将结合图1-图5详细描述本发明的上述精神和实质。
通常,ETL项目的整体构建工作是编写新的代码以及从数据仓库已存在的若干数据表中生成出若干新的数据表。这些新的数据表是ETL项目的最终产出物,它们用来提供给其它上层应用使用。而ETL测试的测试对象就是这些新生成的数据表,即,目标测试表。
图1示例性示出了本申请的ETL冒烟测试方法的示意图,用于说明本申请的基本工作流程。如图1中所示,本申请的ETL冒烟测试方法在数据库连接程序10的控制下进行。只需要将调用指令输入到数据库连接程序10就可以启动ETL冒烟测试,其中,所述调用指令至少包括目标测试表的表名,还可包括用户名和/或分区名(可选)。
数据库连接程序10获取调用指令后,根据所获取的调用指令调用一个ETL冒烟测试存储过程20。本申请的ETL冒烟测试存储过程20可以用各种数据库连接语言编写,经编译后存储在数据库中,用于完成特定功能。作为一个实例,特定存储过程可以与特定的目标测试表相关联,从而可以自动执行,此时,调用指令只要指明该特定目标测试表的表名即可。作为另一个实例,用户通过指定存储过程的名称和参数(如果该存储过程带有参数)来执行存储过程,此时,调用指令还包括存储过程的名称和参数(参数可选)。这里,ETL冒烟测试存储过程20包含有执行ETL冒烟测试的具体程序,用于对目标测试表进行冒烟测试。ETL冒烟测试存储过程20被数据库连接程序10调用执行,并向数据库连接程序10返回结果。
数据库连接程序10将ETL冒烟测试存储过程20返回的测试结果进行适当整理,形成ETL冒烟测试报表30并将其输出。
图1仅仅示例性描述了本申请的基本流程。下面将结合图2对本申请的流程进行更进一步的具体描述,以便更好地理解本申请。
图2示例性示出了本申请的实现ETL冒烟测试方法的一个实施例的示意图。如图2中所示,本实施例中的数据库连接程序为JAVA(一种计算机语言)程序100。应当理解,除了JAVA,还可采用其它合适的计算机语言来编写数据库连接程序。
将用户名、表名或分区名(可选)输入到JAVA程序100就可以启动ETL冒烟测试。
JAVA程序100调用一个ETL冒烟测试存储过程20。本实施例中的ETL冒烟测试存储过程20可以是例如一组用于完成特定功能而编写的SQL语句集。利用例如SQLServer(SQL服务器)所提供的例如Transact-SQL语言(一种SQL语言)所编写的程序经编译后存储在数据库中。
ETL冒烟测试存储过程20被JAVA程序100调用执行,并生成指定的信息表,例如概况信息表40和详细信息表50其中之一或二者。
其中,概况信息表40中的概况信息视需要例如可以包括以下信息的各种组合:用户名、表名、是否分区、分区名、字段个数、有无全局索引、数据量、PCT_FREE(针对Oracle(一种数据库系统))等。
详细信息表50中的详细信息视需要例如可以包括以下信息的各种组合:列名、列类型、空值数量、空值比重、默认值数量、默认值比重、零值数量、零值比重、不同值数量、最大值、最小值、抽样值1、抽样值1数量、抽样值1比重、抽样值2、抽样值2数量、抽样值2比重、抽样值3、抽样值3数量、抽样值3比重、抽样值4、抽样值4数量、抽样值4比重、抽样值5、抽样值5数量、抽样值5比重、字符串长度(1-5位)或数值长度1位及占比、字符串长度(6-10位)或数值长度2位及占比、字符串长度(11-20位)或数值长度3位及占比、字符串长度(21-30位)或数值长度4位及占比、字符串长度(31-40位)或数值长度5位及占比、字符串长度(41位-最长)或数值长度6位-最长及占比、number类型长度警告(针对Oracle)、主键标识等。
概况信息表40和详细信息表50返回到JAVA程序100,被JAVA程序100进行整合,形成ETL冒烟测试报表30,并被输出。
下面将结合图3来描述本申请的ETL冒烟测试方法所使用的存储过程的示意流程图。
图3示例性示出了本申请所使用的存储过程的流程图,用于具体说明本申请是如何通过设置特定的存储过程来实现减少I/O数量、提高测试执行效率、以及减小数据库与服务器压力的目的。
在图3所示的ETL冒烟测试存储过程的示意流程图中,假设需要对一个名称为T的目标测试表(即数据表)中字段情况进行测试。
在步骤S100,存储过程启动并首先查询数据字典,读取表T的字段信息。其中,数据字典是数据库中对象及其关系的信息集合。举例如下,假设数据库连接程序接收表名、用户名、分区名3个参数,数据库连接程序就会将接收到的这3个参数传递给ETL冒烟测试存储过程。在这个存储过程内部,根据这3个参数访问数据库的某一个对应的数据字典,查询得到传入参数中指定的数据表的表类型,该数据表包含的全部字段名,以及每个字段的数据类型信息,以供后面的程序使用。这里,表T的字段信息是从数据库的与表T对应的那个数据字典中读取的表T中的所有字段(即,列(column))信息。
然后,在步骤S101,根据所读取的表T的字段信息,拼接查询语句,对表T执行所拼接的查询语句,生成结果字符串。应当理解,针对不同的数据库语言,实现拼接查询语句的方式可以不相同。由于查询语句是一种数据库可解释执行的代码,所以执行查询语句最终可以得到本申请所描述的ETL冒烟测试方法所需要得到的指标。由于可解释执行的代码在所使用的编码语言中用字符串表示,而这些字符串不是在程序中已经写好的。所以,本发明使用程序的循环、分支等控制执行流程动态拼接成表示这些代码的字符串。根据不同的程序输入参数,最终拼接出的字符串是不同的。所拼接的查询语句能够用来查询并得到前述的各种测试指标,即本申请所描述的ETL冒烟测试方法所需要得到的测试指标。这个查询所得到的指标是一种内部表示,想要最终展现出来还需要程序做进一步的解析。查询语句查询得到的内部表示就是经查询后所生成的结果字符串,只能被程序识别,而不能被最终用户识别,所以需要程序对结果字符串做进一步的解析。
然后,在步骤S102,存储过程再次查询数据字典,读取表T的字段信息。其中,步骤S102再次查询数据字典是和步骤S100查询完全相同的内容。因为表T的字段信息可能很多,而查询数据字典通常效率非常高,所以程序选择步骤S100和步骤S102查询两次数据字典得到相同的内容,而不是将步骤S100查询得到的内容存储起来供步骤S102所用。
然后,在步骤S103,根据在步骤S102中读取的表T的字段信息,解析在步骤S101中生成的结果字符串,拼接插入语句,并执行所拼接的插入语句,将得到的测试结果,即ETL冒烟测试指标直接插入到信息表中。也就是说,如前面所提及的那样,由于结果字符串中保存有ETL冒烟测试方法需要输出给最终用户的指标信息,但是结果字符串只是一种内部表示,只能由内部程序识别,所以,为了将测试结果展现给最终用户,还需要程序对结果字符串进行进一步解析,生成容易被最终用户识别的指标信息。同样如前面所提及的那样,这里程序所拼接的插入语句同样是一个数据库可解释执行的代码,同样是以字符串的形式来表示,这段代码要做的工作是将ETL冒烟测试方法将要展现给最终用户的所有指标信息插入到一张数据表中去,拼接插入语句的方法仍然是使用程序的循环、分支等控制执行流程来进行。下面将参考附图4对本申请的ETL冒烟测试方法所使用的存储过程的实施例进行更具体的描述,以便于更好地理解本发明。
图4示例性示出了本申请的ETL冒烟测试方法所使用的存储过程的一个实施例的流程图。图4以SQL语言为例,更具体地说明了本申请是如何通过设置特定的存储过程来实现减少I/O数量、提高测试执行效率、以及减小数据库与服务器压力的目的。
为便于说明,假设目标被测试表T有四个字段:col1,col2,col3,col4;以计算不同值数量、空值数量、默认值数量作为冒烟测试指标为例,常规的实现方法是分别执行下面四个SQL语句:
selectcount(distinctcol1)fromT;
selectcount(distinctcol2)fromT;
selectcount(distinctcol3)fromT;
selectcount(distinctcol4)fromT;
这种方法要对表T做4次全表扫描(不考虑索引的影响),如果表T有N个字段,则要对表T做N次全表扫描,因此,逻辑I/O数量非常大。
本申请的ETL冒烟测试存储过程使用的优化方法是:
首先,在步骤S100查询数据字典,读取到表T的所有字段信息。
然后,在步骤S104-S105执行一个循环(表T有多少个字段就循环多少次),在循环内进行字符串拼接,即SQL语句拼接。具体地,在步骤S104判断所读取的字段是否为最后一个字段,如果判断结果为不是最后一个字段就继续执行步骤S105,在步骤S105将读取到的字段拼接到SQL查询语句中。最终拼接成的SQL查询语句为:
select′/′||count(distinctcol1)||′/′
||count(distinctcol2)||′/′
||count(distinctcol3)||′/′
||count(distinctcol4)||′/′fromT;
然后,再在步骤S1010执行这个最终拼接成的SQL查询语句。
这样无论表T有多少字段,都只对表T做一次全表扫描,极大地减少了逻辑I/O的数量。因为在ETL冒烟测试中,最影响性能的因素就是数据库中的物理I/O和逻辑I/O,所以减少逻辑I/O的数量也就大大提升了ETL冒烟测试执行的效率。
执行这个拼接成的SQL查询语句所产生的结果是一个由特殊字符间隔开的结果字符串。例如,定义用′/′间隔不同值数量这个指标,用′#′间隔空值数量这个指标,用′′间隔默认值数量这个指标,由于先前假设表T有4个字段col1-col4,那么执行上面拼接的SQL语句产生的结果字符串样式例如为:
/75/116/21/97/#20#0#0#34#0134100。
其中,用′/′间隔的75表示col1字段的不同值的数量,116表示col2字段的不同值的数量。用′′间隔的4表示col3的默认值的数量,以此类推,可以理解其它数值的意义。该字符串可以用例如正则表达式来进行解析。
然后,在步骤S102,存储过程再次查询数据字典,读取表T的字段信息。
然后,在步骤S106-S107,根据在步骤S102中读取的表T的字段信息,再用循环的方式拼接出一个类似下面的SQL插入语句。具体地,在步骤S106判断所读取的字段是否为最后一个字段,如果判断结果为不是最后一个字段就继续执行步骤S107,在步骤S107使用例如正则表达式解析在步骤S1010中生成的结果字符串,将解析结果拼接到SQL插入语句(insertinto语句)中。以PS/SQL(一种SQL语言)为例,最终的结果可以为:
insertinto[详细信息表名]
(owner,table_name,column_name,value_cnt,nulls_cnt,defaults_cnt)
select[用户名],[表名],′col1′,75,20,0fromdual
union
select[用户名],[表名],′col2′,116,0,13fromdual
union
select[用户名],[表名],′col3′,21,0,4fromdual
union
select[用户名],[表名],′col4′,97,34,100fromdual;
最后,执行这个拼接后的SQL插入语句,将得到的ETL冒烟测试指标直接插入到信息表(例如语句中所提及的详细信息表)中。
图5示例性示出了实现本申请的ETL冒烟测试装置的示意图。图5所示的ETL冒烟测试装置1包括获取模块2、调用模块3、冒烟测试及返回模块4、整理及输出模块5,其中:所述获取模块2用于获取调用目标测试表的调用指令;所述调用模块3用于根据所获取的调用指令调用所述冒烟测试及返回模块;所述冒烟测试及返回模块4用于对所述目标测试表进行冒烟测试,然后输出测试结果;以及所述整理及输出模块5用于接收所述测试结果,将其整理成ETL冒烟测试报表,并输出所述ETL冒烟测试报表。
图5中所示的获取模块2、调用模块3、整理及输出模块5可以用JAVA实现,冒烟测试及返回模块4可以用SQL语言实现。
图5中所示的冒烟测试及返回模块还可以包括如下单元(未示出):查询单元,用于查询数据字典,读取所述目标测试表的字段信息;拼接单元,用于根据所述查询单元所读取的字段信息,拼接查询语句,对所述目标测试表执行所拼接的查询语句,生成结果字符串;插入单元,用于根据所述查询单元所读取的字段信息,解析所述拼接单元生成的结果字符串,拼接插入语句,并执行所拼接的插入语句,将得到的ETL冒烟测试指标插入到数据库表中。
其中,所述数据库表包括概况信息表与详细信息表其中之一或二者。
其中,在所述拼接单元中还包括第一循环组件,用于判断所读取的字段是否为最后一个字段,如果判断结果为不是最后一个字段就继续将读取到的字段拼接到所述查询语句中;以及在所述插入单元中还包括第二循环组件,用于判断所读取的字段是否为最后一个字段,如果判断结果为不是最后一个字段就继续解析在所述拼接单元中生成的结果字符串,将解析结果拼接到所述插入语句中。
其中,所述插入单元使用正则表达式解析在所述拼接单元中生成的结果字符串。
由于例如用户名、表名、是否分区、分区名、字段个数、有无全局索引、数据量、PCT_FREE、列名、列类型、空值数量、空值比重、默认值数量、默认值比重、零值数量、零值比重、不同值数量、最大值、最小值、抽样值1、抽样值1数量、抽样值1比重、抽样值2、抽样值2数量、抽样值2比重、抽样值3、抽样值3数量、抽样值3比重、抽样值4、抽样值4数量、抽样值4比重、抽样值5、抽样值5数量、抽样值5比重、字符串长度(1-5位)或数值长度1位及占比、字符串长度(6-10位)或数值长度2位及占比、字符串长度(11-20位)或数值长度3位及占比、字符串长度(21-30位)或数值长度4位及占比、字符串长度(31-40位)或数值长度5位及占比、字符串长度(41位-最长)或数值长度6位-最长及占比、number类型长度警告(针对Oracle)、主键标识等测试指标在不同的ETL项目中通常都需要分别单独编写和执行不同的代码(例如,多个查询语句)才能得到,所以ETL测试人员为了得到上述指标就需要进行大量的重复性工作。和现有技术相比,本申请的ETL冒烟测试方法通过将这些需要分别单独编写的代码自动拼接成一个复合的查询语句,并通过自动解析生成的结果字符串,进而自动拼接出一个复合的插入语句,最终一次性自动生成多个测试指标的测试结果,由于本发明的拼接、解析和插入过程均是一次性自动完成,从而免除了ETL测试人员为得到上述指标而进行的大量的重复性工作。
同时,通过本发明ETL冒烟测试方法,能够将多个测试指标拼接成一个通用的测试指标,这样,拼接后的指标就能够实现与具体ETL项目的业务逻辑的低耦合,即,便于考虑大部分ETL项目的通用业务逻辑,能够避免不同ETL项目不同业务逻辑对ETL冒烟测试带来的影响。
通过上面结合图1至图5对本申请的ETL冒烟测试方法的实施例的描述,可以看到,ETL冒烟测试方法将通用的数据库查询语句(例如,SQL语句)放到一个存储过程中,在测试执行过程中不需要人工参与。并且存储过程中的代码进行了巧妙的设计,针对同一个目标表只做一次全表扫描就能计算出所需要的所有指标,尽最大程度地减少了I/O数量,提高了测试执行的效率,也减小了数据库与服务器的压力。存储过程执行后将冒烟测试指标保存在数据库表(即概况信息表或详细信息表之类的信息表)中,即为测试结果,并通过前台数据库连接程序(例如,JAVA程序)读取数据库表而生成直观的ETL冒烟测试报表,从而易于对ETL产品进行分析。
也就是说,本申请的ETL冒烟测试方法引用了功能测试中冒烟测试的概念,将ETL测试人员在不同项目中需要重复去做的工作抽取出来自动批量完成,大大节省了ETL测试人员的测试时间,也避免了测试人员在做枯燥的重复工作时犯一些低级错误。同时,使用ETL冒烟测试方法可以像功能测试中的冒烟测试一样,很快地对项目的整体质量有一个把握,如果ETL冒烟测试执行产生的报告中很多指标都存在问题,那可以直接退回给开发人员修改,保证了整个项目的进度顺利进行。
根据本申请的ETL冒烟测试方法可以由具有运算处理能力的单个或多个处理设备,如单个或多个计算机,运行计算机可执行指令来实现。根据本申请的ETL冒烟测试装置可以为单个或多个处理设备,如单个或多个计算机,其中的各个模块或单元可以为该处理设备运行计算机可执行指令时具有相应功能的设备组件。根据本申请的一个实施例,可以使用JAVA、SQL等语言在linux、Windows等系统下来实现上述ETL冒烟测试方法和装置。
虽然已参照典型实施例描述了本申请,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本申请能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。

Claims (12)

1.一种ETL冒烟测试方法,所述方法包括:
通过数据库连接程序获取用于调用目标测试表的调用指令;
所述数据库连接程序根据所获取的调用指令调用ETL冒烟测试存储过程;
所述ETL冒烟测试存储过程对所述目标测试表进行冒烟测试,然后向所述数据库连接程序返回测试结果;以及
所述数据库连接程序将所述测试结果整理成ETL冒烟测试报表,并输出所述ETL冒烟测试报表;其中,
所述ETL冒烟测试存储过程对所述目标测试表进行冒烟测试包括如下步骤:
步骤1,查询数据字典,读取所述目标测试表的字段信息;
步骤2,根据所读取的字段信息,拼接查询语句,对所述目标测试表执行所拼接的查询语句,生成结果字符串;
步骤3,再次查询所述数据字典,读取所述目标测试表的字段信息;以及
步骤4,根据在步骤3中读取的字段信息,解析在步骤2中生成的结果字符串,拼接插入语句,并执行所拼接的插入语句,将得到的ETL冒烟测试指标插入到数据库表中。
2.根据权利要求1所述的方法,其中,
所述数据库连接程序用JAVA实现。
3.根据权利要求1所述的方法,其中,
所述数据库表包括概况信息表与详细信息表其中之一或二者。
4.根据权利要求1所述的方法,其中,
在所述步骤2中还包括第一循环步骤,判断所读取的字段是否为最后一个字段,如果判断结果为不是最后一个字段就继续将读取到的字段拼接到查询语句中;以及
在所述步骤4中还包括第二循环步骤,判断所读取的字段是否为最后一个字段,如果判断结果为不是最后一个字段就继续解析在步骤2中生成的结果字符串,将解析结果拼接到插入语句中。
5.根据权利要求1或4所述的方法,其中,
在所述步骤4中,使用正则表达式解析在步骤2中生成的结果字符串。
6.根据权利要求1-4中任一项中所述的方法,其中,
所述ETL冒烟测试存储过程用SQL语言实现。
7.一种ETL冒烟测试装置,所述装置包括获取模块、调用模块、冒烟测试及返回模块、整理及输出模块,其中:
所述获取模块用于获取调用目标测试表的调用指令;
所述调用模块用于根据所获取的调用指令调用所述冒烟测试及返回模块;
所述冒烟测试及返回模块用于对所述目标测试表进行冒烟测试,然后输出测试结果;以及
所述整理及输出模块用于接收所述测试结果,将其整理成ETL冒烟测试报表,并输出所述ETL冒烟测试报表;其中,
所述冒烟测试及返回模块包括:
查询单元,用于查询数据字典,读取所述目标测试表的字段信息;
拼接单元,用于根据所述查询单元所读取的字段信息,拼接查询语句,对所述目标测试表执行所拼接的查询语句,生成结果字符串;
插入单元,用于根据所述查询单元所读取的字段信息,解析所述拼接单元生成的结果字符串,拼接插入语句,并执行所拼接的插入语句,将得到的ETL冒烟测试指标插入到数据库表中。
8.根据权利要求7所述的装置,其中,
所述获取模块、所述调用模块、所述整理及输出模块用JAVA实现。
9.根据权利要求7所述的装置,其中,
所述数据库表包括概况信息表与详细信息表其中之一或二者。
10.根据权利要求7所述的装置,其中,
在所述拼接单元中包括第一循环组件,用于判断所读取的字段是否为最后一个字段,如果判断结果为不是最后一个字段就继续将读取到的字段拼接到所述查询语句中;以及
在所述插入单元中包括第二循环组件,用于判断所读取的字段是否为最后一个字段,如果判断结果为不是最后一个字段就继续解析在所述拼接单元中生成的结果字符串,将解析结果拼接到所述插入语句中。
11.根据权利要求7或10所述的装置,其中,
所述插入单元使用正则表达式解析在所述拼接单元中生成的结果字符串。
12.根据权利要求7-10中任一项中所述的装置,其中,
所述冒烟测试及返回模块用SQL语言实现。
CN201110263581.4A 2011-09-07 2011-09-07 Etl冒烟测试方法 Active CN102981946B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201110263581.4A CN102981946B (zh) 2011-09-07 2011-09-07 Etl冒烟测试方法
HK13104708.0A HK1177293A1 (zh) 2011-09-07 2013-04-18 冒烟測試方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110263581.4A CN102981946B (zh) 2011-09-07 2011-09-07 Etl冒烟测试方法

Publications (2)

Publication Number Publication Date
CN102981946A CN102981946A (zh) 2013-03-20
CN102981946B true CN102981946B (zh) 2015-12-16

Family

ID=47856001

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110263581.4A Active CN102981946B (zh) 2011-09-07 2011-09-07 Etl冒烟测试方法

Country Status (2)

Country Link
CN (1) CN102981946B (zh)
HK (1) HK1177293A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104572666A (zh) * 2013-10-15 2015-04-29 镇江雅迅软件有限责任公司 一种基于Jxl批量解析Excel并导入数据库的方法
CN106407100A (zh) * 2015-07-29 2017-02-15 中兴通讯股份有限公司 一种实现持续集成测试的方法及装置
CN105677996B (zh) * 2016-01-13 2018-10-23 浪潮集团有限公司 一种芯片验证中确定回归测试版本异常源头的方法
CN109240918A (zh) * 2018-08-20 2019-01-18 中国平安人寿保险股份有限公司 大数据冒烟测试方法、装置、计算机设备和存储介质
CN109542756B (zh) * 2018-09-29 2023-04-11 中国平安人寿保险股份有限公司 自动化配置脚本的方法、装置、电子设备及存储介质
CN113326206B (zh) * 2021-06-29 2023-11-21 中国农业银行股份有限公司 数据加工系统的测试方法、设备、存储介质及程序产品
CN113641572B (zh) * 2021-07-02 2023-06-13 多点生活(成都)科技有限公司 一种基于sql的海量大数据计算开发的调试方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
一种可靠的数据仓库中ETL策略与架构设计;尤玉林等;《计算机工程与应用》;20051031;第2005年卷(第10期);第172页到第174页及第229页 *
信息科技辑》.2007,(第6期),I138-375. *
刘镠.数据报文软件测试技术研究与应用.《中国硕士学位论文全文数据库&#8226 *
数据ETL研究综述;徐俊刚等;《计算机科学》;20110430;第38卷(第4期);第15页到第20页 *

Also Published As

Publication number Publication date
HK1177293A1 (zh) 2013-08-16
CN102981946A (zh) 2013-03-20

Similar Documents

Publication Publication Date Title
CN102981946B (zh) Etl冒烟测试方法
JP2020510925A (ja) テストケースを利用してテストを遂行する方法および装置
CN103678110B (zh) 提供修改相关信息的方法和装置
CN109918294B (zh) 一种混源软件自主可控性检测方法及系统
KR20170081239A (ko) 영향 분석
CN109189479B (zh) 一种用于处理器指令集的并行自动化验证方法
CN108345532A (zh) 一种自动化测试用例生成方法和装置
CN104965735A (zh) 用于生成升级sql脚本的装置
CN108446223B (zh) 一种基于动态编译的业务场景自动化测试方法
CN112364024B (zh) 一种表数据批量自动比对的控制方法及装置
CN113901083B (zh) 基于多解析器的异构数据源操作资源解析定位方法和设备
CN116661756B (zh) 一种基于低代码dsl的对象解析方法及装置
CN103955429B (zh) 确定回归测试范围的方法及装置
CN112765017A (zh) 基于MySQL数据库的数据查询性能测试方法和装置
CN108897678B (zh) 静态代码检测方法和静态代码检测系统、存储设备
Davidovsky et al. Instance migration between ontologies having structural differences
CN113434430A (zh) 一种sql查询语句性能检测方法和装置
Bayer Sqlalchemy documentation
CN114647439A (zh) 一种代码扫描的方法、代码迁移的方法及相关装置
US20120330878A1 (en) Conventions for inferring data models
Schüle et al. Blue Elephants Inspecting Pandas
US20160132297A1 (en) Method and computer program for generating or manipulating source code
CN115658548A (zh) 银行多系统间数据迁移的测试方法及装置
Li et al. FPGA software testing process management
De Ruvo et al. Equivalence-based selection of best-fit models to support wiki design

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1177293

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1177293

Country of ref document: HK

TR01 Transfer of patent right

Effective date of registration: 20200826

Address after: Building 8, No. 16, Zhuantang science and technology economic block, Xihu District, Hangzhou City, Zhejiang Province

Patentee after: ALIYUN COMPUTING Co.,Ltd.

Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, Cayman Islands

Patentee before: Alibaba Group Holding Ltd.

TR01 Transfer of patent right