《ETL冒烟测试方法.pdf》由会员分享,可在线阅读,更多相关《ETL冒烟测试方法.pdf(15页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102981946 A (43)申请公布日 2013.03.20 CN 102981946 A *CN102981946A* (21)申请号 201110263581.4 (22)申请日 2011.09.07 G06F 11/36(2006.01) (71)申请人 阿里巴巴集团控股有限公司 地址 开曼群岛大开曼资本大厦一座四层 847 号邮箱 (72)发明人 刘健男 (74)专利代理机构 隆天国际知识产权代理有限 公司 72003 代理人 张浴月 张龙哺 (54) 发明名称 ETL 冒烟测试方法 (57) 摘要 一种 ETL 冒烟测试方法, 所述方法包括 : 通过 数。
2、据库连接程序获取用于调用目标测试表的调用 指令 ; 所述数据库连接程序根据所获取的调用指 令调用 ETL 冒烟测试存储过程 ; 所述 ETL 冒烟测 试存储过程对所述目标测试表进行冒烟测试, 然 后向所述数据库连接程序返回测试结果 ; 以及所 述数据库连接程序将所述测试结果整理成 ETL 冒 烟测试报表, 并输出所述ETL冒烟测试报表。 本申 请还提出了相应的 ETL 冒烟测试装置。本申请将 ETL 测试人员在不同项目中需要重复去做的工作 抽取出来自动批量完成, 节省了 ETL 测试人员的 测试时间, 也避免了测试人员在做枯燥的重复工 作时犯低级错误。很快地对项目的整体质量有一 个把握, 保证。
3、了整个项目的进度顺利进行。 (51)Int.Cl. 权利要求书 2 页 说明书 8 页 附图 4 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 2 页 说明书 8 页 附图 4 页 1/2 页 2 1. 一种 ETL 冒烟测试方法, 所述方法包括 : 通过数据库连接程序获取用于调用目标测试表的调用指令 ; 所述数据库连接程序根据所获取的调用指令调用 ETL 冒烟测试存储过程 ; 所述 ETL 冒烟测试存储过程对所述目标测试表进行冒烟测试, 然后向所述数据库连接 程序返回测试结果 ; 以及 所述数据库连接程序将所述测试结果整理成 ETL 冒烟测试报表, 并输出所述 。
4、ETL 冒烟 测试报表。 2. 根据权利要求 1 所述的方法, 其中, 所述数据库连接程序用 JAVA 实现。 3. 根据权利要求 1 所述的方法, 其中, 所述 ETL 冒烟测试存储过程对所述目标测试表进行冒烟测试包括如下步骤 : 步骤 1, 查询数据字典, 读取所述目标测试表的字段信息 ; 步骤 2, 根据所读取的字段信息, 拼接查询语句, 对所述目标测试表执行所拼接的查询 语句, 生成结果字符串 ; 步骤 3, 再次查询所述数据字典, 读取所述目标测试表的字段信息 ; 以及 步骤4, 根据在步骤3中读取的字段信息, 解析在步骤2中生成的结果字符串, 拼接插入 语句, 并执行所拼接的插入语。
5、句, 将得到的 ETL 冒烟测试指标插入到数据库表中。 4. 根据权利要求 3 所述的方法, 其中, 所述数据库表包括概况信息表与详细信息表其中之一或二者。 5. 根据权利要求 3 所述的方法, 其中, 在所述步骤 2 中还包括第一循环步骤, 判断所读取的字段是否为最后一个字段, 如果 判断结果为不是最后一个字段就继续将读取到的字段拼接到查询语句中 ; 以及 在所述步骤 4 中还包括第二循环步骤, 判断所读取的字段是否为最后一个字段, 如果 判断结果为不是最后一个字段就继续解析在步骤 2 中生成的结果字符串, 将解析结果拼接 到插入语句中。 6. 根据权利要求 3 或 5 所述的方法, 其中,。
6、 在所述步骤 4 中, 使用正则表达式解析在步骤 2 中生成的结果字符串。 7. 根据权利要求 3-5 中任一项中所述的方法, 其中, 所述 ETL 冒烟测试存储过程用 SQL 语言实现。 8. 一种 ETL 冒烟测试装置, 所述装置包括获取模块、 调用模块、 冒烟测试及返回模块、 整理及输出模块, 其中 : 所述获取模块用于获取调用目标测试表的调用指令 ; 所述调用模块用于根据所获取的调用指令调用所述冒烟测试及返回模块 ; 所述冒烟测试及返回模块用于对所述目标测试表进行冒烟测试, 然后输出测试结果 ; 以及 所述整理及输出模块用于接收所述测试结果, 将其整理成 ETL 冒烟测试报表, 并输出。
7、 所述 ETL 冒烟测试报表。 9. 根据权利要求 8 所述的装置, 其中, 所述获取模块、 所述调用模块、 所述整理及输出模块用 JAVA 实现。 权 利 要 求 书 CN 102981946 A 2 2/2 页 3 10. 根据权利要求 8 所述的装置, 其中, 所述冒烟测试及返回模块包括 : 查询单元, 用于查询数据字典, 读取所述目标测试表的字段信息 ; 拼接单元, 用于根据所述查询单元所读取的字段信息, 拼接查询语句, 对所述目标测试 表执行所拼接的查询语句, 生成结果字符串 ; 插入单元, 用于根据所述查询单元所读取的字段信息, 解析所述拼接单元生成的结果 字符串, 拼接插入语句,。
8、 并执行所拼接的插入语句, 将得到的 ETL 冒烟测试指标插入到数据 库表中。 11. 根据权利要求 10 所述的装置, 其中, 所述数据库表包括概况信息表与详细信息表其中之一或二者。 12. 根据权利要求 10 所述的装置, 其中, 在所述拼接单元中包括第一循环组件, 用于判断所读取的字段是否为最后一个字段, 如果判断结果为不是最后一个字段就继续将读取到的字段拼接到所述查询语句中 ; 以及 在所述插入单元中包括第二循环组件, 用于判断所读取的字段是否为最后一个字段, 如果判断结果为不是最后一个字段就继续解析在所述拼接单元中生成的结果字符串, 将解 析结果拼接到所述插入语句中。 13. 根据权。
9、利要求 10 或 12 所述的装置, 其中, 所述插入单元使用正则表达式解析在所述拼接单元中生成的结果字符串。 14. 根据权利要求 10-12 中任一项中所述的装置, 其中, 所述冒烟测试及返回模块用 SQL 语言实现。 权 利 要 求 书 CN 102981946 A 3 1/8 页 4 ETL 冒烟测试方法 技术领域 0001 本申请涉及ETL(即, 数据提取、 转换和加载)测试方法, 尤其涉及在数据仓库应用 中的 ETL 测试方法。 背景技术 0002 数据库已经在信息技术领域有了广泛的应用, 我们社会生活的各个部门, 几乎都 有各种各样的数据库保存着与我们的生活息息相关的各种数据。 。
10、0003 作为数据库的一个分支, 数据仓库通常是一个面向主题的、 集成的、 随时间变化 的、 但信息本身相对稳定的数据集合, 它用于对管理决策过程的支持。 数据仓库中的信息不 是从各个业务系统中简单抽取出来的, 而是经过一系列加工、 整理和汇总的过程。 0004 ETL 负责将分布的、 异构数据源中的数据如关系数据、 平面数据文件等抽取到临时 中间层后进行清洗、 转换、 集成, 最后加载到数据仓库或数据集市中, 成为联机分析处理、 数 据挖掘的基础。 相对于关系数据库, 数据仓库技术没有严格的数学理论基础, 它更面向实际 工程应用。所以从工程应用的角度来考虑, 按照物理数据模型的要求加载数据并。
11、对数据进 行一些系列处理, 处理过程与经验直接相关, 同时这部分的工作直接关系到数据仓库中数 据的质量, 从而影响到联机分析处理和数据挖掘结果的质量。 0005 ETL是数据抽取(Extract)、 转换(Transform)、 装载(Load)的过程, 是构建数据仓 库的重要一环。用户从数据源抽取出所需的数据, 经过数据清洗、 转换, 最终按照预先定义 好的数据仓库模型, 将数据加载到数据仓库中去。 为了快速地构建可用的数据仓库, 需要开 发各自的 ETL 工具和相关应用。这些 ETL 工具和相关应用在正式投入使用之前需要进行测 试, 即 ETL 测试, 这项工作往往需要大量的测试人员花费大。
12、量的时间才能完成。 0006 ETL测试是一个新兴的测试领域, 在业界还没有较统一的测试方法。 目前ETL测试 人员在测试不同的项目时, 要做很多重复的测试工作。同时 ETL 测试人员在接手一个项目 时, 不能很快地对整个项目的质量有一个整体的把握, 往往因为在测试过程中发现项目存 在的问题太多而不得不将整个项目退回给开发部门进行大幅度修改, 这样就严重耽误了整 个项目的进度, 是造成项目发布延迟的一个主要原因。 0007 在现有技术的一种解决方案中, 针对ETL测试的每一个指标写一段SQL(结构化查 询语言 ) 语句, 将所有的 SQL 语句保存在一份文件中。当要测试新的项目时, 打开该文件。
13、, 将对应 SQL 语句中相应的表名和字段名做一下替换再放到数据库中执行, 然后等待查看执 行结果。这种解决方案的缺点是 : 0008 1. 仍然需要很多人工操作, 在替换 SQL 语句的过程中有可能出错。 0009 2. 针对每个指标执行一段 SQL 语句, 会重复地读取数据库表, 不但测试执行的效 率低, 而且对数据库和服务器造成的压力也大。 0010 3. 产出物全部是 SQL 语句的执行结果, 拿给非 ETL 测试人员看很难做分析, 不直 观。 0011 在现有技术的另一种解决方案中, 将所有通用的测试用例放到同一个存储过程或 说 明 书 CN 102981946 A 4 2/8 页 。
14、5 方法中。 虽然免去了很多人工操作, 然而存储过程中每个测试用例是独立的, 没有进行整个 优化, 这样每执行一个测试用例就要对被测试表进行一次全表扫描, 产生了大量不必要的 I/O( 输入 / 输出 ), 执行性能差, 对数据库和服务器的压力大。 发明内容 0012 通常, 软件在制作过程中需要编译出多个中间测试版本, 根据项目开发计划, 只有 有限的几个测试版本需要执行正式测试。这些测试版本在刚刚编译出来之后, 需要进行一 些基本性能确认测试, 例如是否可以正确安装 / 卸载, 主要功能是否实现, 是否存在严重死 机或数据严重丢失等缺陷。如果测试版本通过了这样的基本性能确认测试, 就可以根。
15、据正 式测试文档对该测试版本进行正式测试, 否则, 就需要重新修改和编译该测试版本。 这样的 基本性能确认测试一般称之为冒烟测试。 0013 也就是说, 冒烟测试这一术语描述的是在将代码更改嵌入到产品的源树 ( 即源代 码树 ) 中之前对这些更改进行验证的过程。在检查代码时, 冒烟测试是确定和修复软件缺 陷的最经济有效的方法。冒烟测试用于确认代码中的更改会按预期运行, 且不会破坏整个 版本的稳定性。 0014 在本发明提出之前, 在 ETL 测试领域没有像一般软件开发过程中测试领域那样在 投入全面测试之前有一个验证项目当前是否达到全面测试标准的冒烟测试, 即, 如果冒烟 测试不通过, 则直接将。
16、代码由测试人员退回给开发人员修复代码, 提高项目整体质量, 使之 达到全面测试的标准。 这样, 如果一个项目的质量很差就提交给测试人员进行全面测试, 随 便一测就发现很多问题, 必定会影响测试进度, 浪费测试人员的测试资源。 0015 为此, 本申请将上面所述的一般软件开发过程中使用的冒烟测试的概念引入到了 ETL测试中, 以便提高ETL测试的速度和质量。 为此, 本申请提出了一种ETL冒烟测试方法, 所述方法包括 : 通过数据库连接程序获取用于调用目标测试表的调用指令 ; 所述数据库连 接程序根据所获取的调用指令调用 ETL 冒烟测试存储过程 ; 所述 ETL 冒烟测试存储过程对 所述目标测。
17、试表进行冒烟测试, 然后向所述数据库连接程序返回测试结果 ; 以及所述数据 库连接程序将所述测试结果整理成 ETL 冒烟测试报表, 并输出所述 ETL 冒烟测试报表。 0016 本申请还提出了一种 ETL 冒烟测试装置, 所述装置包括获取模块、 调用模块、 冒烟 测试及返回模块、 整理及输出模块, 其中 : 所述获取模块用于获取调用目标测试表的调用指 令 ; 所述调用模块用于根据所获取的调用指令调用所述冒烟测试及返回模块 ; 所述冒烟测 试及返回模块用于对所述目标测试表进行冒烟测试, 然后输出测试结果 ; 以及所述整理及 输出模块用于接收所述测试结果, 将其整理成ETL冒烟测试报表, 并输出所。
18、述ETL冒烟测试 报表。 0017 本申请的 ETL 冒烟测试方法引用了功能测试中冒烟测试的概念, 将 ETL 测试人员 在测试不同 ETL 项目中需要重复去做的工作抽取出来自动批量完成, 大大节省了 ETL 测试 人员的测试时间, 也避免了测试人员在做枯燥的重复工作时犯一些低级错误。同时, 使用 ETL 冒烟测试方法可以像功能测试中的冒烟测试一样, 很快地对项目的整体质量有一个把 握, 如果 ETL 冒烟测试执行产生的报告中很多指标都存在问题, 那可以直接退回给开发人 员修改, 保证了整个项目的进度顺利进行。 0018 通过以下参照附图对本申请实施例的说明, 本申请的上述以及其它目的、 特征。
19、和 说 明 书 CN 102981946 A 5 3/8 页 6 优点将更加明显。 附图说明 0019 下面将参照所附附图来描述本申请的实施例, 其中 : 0020 图 1 示例性示出了本申请的 ETL 冒烟测试方法的示意图 ; 0021 图 2 示例性示出了本申请的 ETL 冒烟测试方法的一个实施例的示意图 ; 0022 图 3 示例性示出了本申请的 ETL 冒烟测试方法所使用的存储过程的流程图 ; 0023 图4示例性示出了本申请的ETL冒烟测试方法所使用的存储过程的一个实施例的 流程图 ; 以及 0024 图 5 示例性示出了本申请的 ETL 冒烟测试装置的示意图。 具体实施方式 002。
20、5 ETL 冒烟测试方法想要达到的目的与功能测试中的冒烟测试方法基本一致, 都是 为了验证项目是否达到了全面测试的标准。但是它们的具体实现是完全不一样的。功能测 试中的冒烟测试的每一个冒烟测试点均是由测试人员人工指定的, 并且冒烟测试也是由测 试人员人工测试的。而本发明的 ETL 冒烟测试是自动的, 测试人员所需要做的只是对最终 生成的 ETL 冒烟测试报告的各项指标进行分析。 0026 另外, ETL 冒烟测试指标的选取是至关重要的, 这是因为, 在技术上可以计算得到 的指标非常多, 可以说是成百上千, 不可能全部都放到 ETL 冒烟测试报告中, 因为那样既影 响设备性能, 也加重了测试人员。
21、分析报告的工作负担。因此 ETL 测试的一个关键是选取最 重要的指标, 并且要考虑到指标之间的搭配, 这是因为, 很多情况下是要分析多个指标之间 值的一个相对关系才能发现 ETL 项目中潜在的问题。选取指标还要考虑与具体 ETL 项目的 业务逻辑的低耦合, 即考虑到大部分ETL项目的通用业务逻辑, 这样才可以避免不同ETL项 目不同业务逻辑对 ETL 冒烟测试带来的影响。 0027 下面将结合图 1- 图 5 详细描述本发明的上述精神和实质。 0028 通常, ETL 项目的整体构建工作是编写新的代码以及从数据仓库已存在的若干数 据表中生成出若干新的数据表。这些新的数据表是 ETL 项目的最终。
22、产出物, 它们用来提供 给其它上层应用使用。而 ETL 测试的测试对象就是这些新生成的数据表, 即, 目标测试表。 0029 图 1 示例性示出了本申请的 ETL 冒烟测试方法的示意图, 用于说明本申请的基本 工作流程。 如图1中所示, 本申请的ETL冒烟测试方法在数据库连接程序10的控制下进行。 只需要将调用指令输入到数据库连接程序 10 就可以启动 ETL 冒烟测试, 其中, 所述调用指 令至少包括目标测试表的表名, 还可包括用户名和 / 或分区名 ( 可选 )。 0030 数据库连接程序10获取调用指令后, 根据所获取的调用指令调用一个ETL冒烟测 试存储过程 20。本申请的 ETL 冒。
23、烟测试存储过程 20 可以用各种数据库连接语言编写, 经 编译后存储在数据库中, 用于完成特定功能。 作为一个实例, 特定存储过程可以与特定的目 标测试表相关联, 从而可以自动执行, 此时, 调用指令只要指明该特定目标测试表的表名即 可。 作为另一个实例, 用户通过指定存储过程的名称和参数(如果该存储过程带有参数)来 执行存储过程, 此时, 调用指令还包括存储过程的名称和参数 ( 参数可选 )。这里, ETL 冒烟 测试存储过程 20 包含有执行 ETL 冒烟测试的具体程序, 用于对目标测试表进行冒烟测试。 说 明 书 CN 102981946 A 6 4/8 页 7 ETL 冒烟测试存储过程。
24、 20 被数据库连接程序 10 调用执行, 并向数据库连接程序 10 返回结 果。 0031 数据库连接程序 10 将 ETL 冒烟测试存储过程 20 返回的测试结果进行适当整理, 形成 ETL 冒烟测试报表 30 并将其输出。 0032 图 1 仅仅示例性描述了本申请的基本流程。下面将结合图 2 对本申请的流程进行 更进一步的具体描述, 以便更好地理解本申请。 0033 图 2 示例性示出了本申请的实现 ETL 冒烟测试方法的一个实施例的示意图。如图 2 中所示, 本实施例中的数据库连接程序为 JAVA( 一种计算机语言 ) 程序 100。应当理解, 除了 JAVA, 还可采用其它合适的计算。
25、机语言来编写数据库连接程序。 0034 将用户名、 表名或分区名(可选)输入到JAVA程序100就可以启动ETL冒烟测试。 0035 JAVA 程序 100 调用一个 ETL 冒烟测试存储过程 20。本实施例中的 ETL 冒烟测 试存储过程 20 可以是例如一组用于完成特定功能而编写的 SQL 语句集。利用例如 SQL Server(SQL 服务器 ) 所提供的例如 Transact-SQL 语言 ( 一种 SQL 语言 ) 所编写的程序经 编译后存储在数据库中。 0036 ETL 冒烟测试存储过程 20 被 JAVA 程序 100 调用执行, 并生成指定的信息表, 例如 概况信息表 40 和。
26、详细信息表 50 其中之一或二者。 0037 其中, 概况信息表 40 中的概况信息视需要例如可以包括以下信息的各种组 合 : 用户名、 表名、 是否分区、 分区名、 字段个数、 有无全局索引、 数据量、 PCT_FREE( 针对 Oracle( 一种数据库系统 ) 等。 0038 详细信息表 50 中的详细信息视需要例如可以包括以下信息的各种组合 : 列名、 列 类型、 空值数量、 空值比重、 默认值数量、 默认值比重、 零值数量、 零值比重、 不同值数量、 最 大值、 最小值、 抽样值 1、 抽样值 1 数量、 抽样值 1 比重、 抽样值 2、 抽样值 2 数量、 抽样值 2 比 重、 抽。
27、样值 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)、。
28、 主键标识等。 0039 概况信息表 40 和详细信息表 50 返回到 JAVA 程序 100, 被 JAVA 程序 100 进行整 合, 形成 ETL 冒烟测试报表 30, 并被输出。 0040 下面将结合图3来描述本申请的ETL冒烟测试方法所使用的存储过程的示意流程 图。 0041 图 3 示例性示出了本申请所使用的存储过程的流程图, 用于具体说明本申请是如 何通过设置特定的存储过程来实现减少 I/O 数量、 提高测试执行效率、 以及减小数据库与 服务器压力的目的。 0042 在图 3 所示的 ETL 冒烟测试存储过程的示意流程图中, 假设需要对一个名称为 T 的目标测试表 ( 即数据表 。
29、) 中字段情况进行测试。 0043 在步骤 S100, 存储过程启动并首先查询数据字典, 读取表 T 的字段信息。其中, 数 据字典是数据库中对象及其关系的信息集合。 举例如下, 假设数据库连接程序接收表名、 用 说 明 书 CN 102981946 A 7 5/8 页 8 户名、 分区名 3 个参数, 数据库连接程序就会将接收到的这 3 个参数传递给 ETL 冒烟测试存 储过程。在这个存储过程内部, 根据这 3 个参数访问数据库的某一个对应的数据字典, 查询 得到传入参数中指定的数据表的表类型, 该数据表包含的全部字段名, 以及每个字段的数 据类型信息, 以供后面的程序使用。这里, 表 T 。
30、的字段信息是从数据库的与表 T 对应的那个 数据字典中读取的表 T 中的所有字段 ( 即, 列 (column) 信息。 0044 然后, 在步骤S101, 根据所读取的表T的字段信息, 拼接查询语句, 对表T执行所拼 接的查询语句, 生成结果字符串。应当理解, 针对不同的数据库语言, 实现拼接查询语句的 方式可以不相同。由于查询语句是一种数据库可解释执行的代码, 所以执行查询语句最终 可以得到本申请所描述的 ETL 冒烟测试方法所需要得到的指标。由于可解释执行的代码在 所使用的编码语言中用字符串表示, 而这些字符串不是在程序中已经写好的。 所以, 本发明 使用程序的循环、 分支等控制执行流程。
31、动态拼接成表示这些代码的字符串。根据不同的程 序输入参数, 最终拼接出的字符串是不同的。所拼接的查询语句能够用来查询并得到前述 的各种测试指标, 即本申请所描述的 ETL 冒烟测试方法所需要得到的测试指标。这个查询 所得到的指标是一种内部表示, 想要最终展现出来还需要程序做进一步的解析。查询语句 查询得到的内部表示就是经查询后所生成的结果字符串, 只能被程序识别, 而不能被最终 用户识别, 所以需要程序对结果字符串做进一步的解析。 0045 然后, 在步骤S102, 存储过程再次查询数据字典, 读取表T的字段信息。 其中, 步骤 S102 再次查询数据字典是和步骤 S100 查询完全相同的内容。
32、。因为表 T 的字段信息可能很 多, 而查询数据字典通常效率非常高, 所以程序选择步骤S100和步骤S102查询两次数据字 典得到相同的内容, 而不是将步骤 S100 查询得到的内容存储起来供步骤 S102 所用。 0046 然后, 在步骤 S103, 根据在步骤 S102 中读取的表 T 的字段信息, 解析在步骤 S101 中生成的结果字符串, 拼接插入语句, 并执行所拼接的插入语句, 将得到的测试结果, 即 ETL 冒烟测试指标直接插入到信息表中。 也就是说, 如前面所提及的那样, 由于结果字符串中保 存有 ETL 冒烟测试方法需要输出给最终用户的指标信息, 但是结果字符串只是一种内部表 。
33、示, 只能由内部程序识别, 所以, 为了将测试结果展现给最终用户, 还需要程序对结果字符 串进行进一步解析, 生成容易被最终用户识别的指标信息。 同样如前面所提及的那样, 这里 程序所拼接的插入语句同样是一个数据库可解释执行的代码, 同样是以字符串的形式来表 示, 这段代码要做的工作是将 ETL 冒烟测试方法将要展现给最终用户的所有指标信息插入 到一张数据表中去, 拼接插入语句的方法仍然是使用程序的循环、 分支等控制执行流程来 进行。下面将参考附图 4 对本申请的 ETL 冒烟测试方法所使用的存储过程的实施例进行更 具体的描述, 以便于更好地理解本发明。 0047 图4示例性示出了本申请的ET。
34、L冒烟测试方法所使用的存储过程的一个实施例的 流程图。图 4 以 SQL 语言为例, 更具体地说明了本申请是如何通过设置特定的存储过程来 实现减少 I/O 数量、 提高测试执行效率、 以及减小数据库与服务器压力的目的。 0048 为便于说明, 假设目标被测试表 T 有四个字段 : col1, col2, col3, col4 ; 以计算不 同值数量、 空值数量、 默认值数量作为冒烟测试指标为例, 常规的实现方法是分别执行下面 四个 SQL 语句 : 0049 select count(distinct col1)from T ; 0050 select count(distinct col2)。
35、from T ; 说 明 书 CN 102981946 A 8 6/8 页 9 0051 select count(distinct col3)from T ; 0052 select count(distinct col4)from T ; 0053 这种方法要对表 T 做 4 次全表扫描 ( 不考虑索引的影响 ), 如果表 T 有 N 个字段, 则要对表 T 做 N 次全表扫描, 因此, 逻辑 I/O 数量非常大。 0054 本申请的 ETL 冒烟测试存储过程使用的优化方法是 : 0055 首先, 在步骤 S100 查询数据字典, 读取到表 T 的所有字段信息。 0056 然后, 在步骤 。
36、S104-S105 执行一个循环 ( 表 T 有多少个字段就循环多少次 ), 在循 环内进行字符串拼接, 即 SQL 语句拼接。具体地, 在步骤 S104 判断所读取的字段是否为最 后一个字段, 如果判断结果为不是最后一个字段就继续执行步骤 S105, 在步骤 S105 将读取 到的字段拼接到 SQL 查询语句中。最终拼接成的 SQL 查询语句为 : 0057 select / |count(distinct col1)| / 0058 |count(distinct col2)| / 0059 |count(distinct col3)| / 0060 |count(distinct col。
37、4)| / from T ; 0061 然后, 再在步骤 S1010 执行这个最终拼接成的 SQL 查询语句。 0062 这样无论表 T 有多少字段, 都只对表 T 做一次全表扫描, 极大地减少了逻辑 I/O 的 数量。因为在 ETL 冒烟测试中, 最影响性能的因素就是数据库中的物理 I/O 和逻辑 I/O, 所 以减少逻辑 I/O 的数量也就大大提升了 ETL 冒烟测试执行的效率。 0063 执行这个拼接成的 SQL 查询语句所产生的结果是一个由特殊字符间隔开的结果 字符串。例如, 定义用 /间隔不同值数量这个指标, 用 #间隔空值数量这个指标, 用 间隔默认值数量这个指标, 由于先前假设表。
38、 T 有 4 个字段 col1-col4, 那么执行上 面拼接的 SQL 语句产生的结果字符串样式例如为 : 0064 /75/116/21/97/#20#0#0#34#0134100。 0065 其中, 用 /间隔的 75 表示 col1 字段的不同值的数量, 116 表示 col2 字段的不 同值的数量。 用间隔的4表示col3的默认值的数量, 以此类推, 可以理解其它数值的 意义。该字符串可以用例如正则表达式来进行解析。 0066 然后, 在步骤 S102, 存储过程再次查询数据字典, 读取表 T 的字段信息。 0067 然后, 在步骤 S106-S107, 根据在步骤 S102 中读取。
39、的表 T 的字段信息, 再用循环的 方式拼接出一个类似下面的 SQL 插入语句。具体地, 在步骤 S106 判断所读取的字段是否为 最后一个字段, 如果判断结果为不是最后一个字段就继续执行步骤 S107, 在步骤 S107 使用 例如正则表达式解析在步骤 S1010 中生成的结果字符串, 将解析结果拼接到 SQL 插入语句 (insert into 语句 ) 中。以 PS/SQL( 一种 SQL 语言 ) 为例, 最终的结果可以为 : 0068 insert into 详细信息表名 0069 (owner, table_name, column_name, value_cnt, nulls_c。
40、nt, defaults_cnt) 0070 select 用户名 , 表名 , col1, 75, 20, 0 from dual 0071 union 0072 select 用户名 , 表名 , col2, 116, 0, 13 from dual 0073 union 0074 select 用户名 , 表名 , col3, 21, 0, 4 from dual 说 明 书 CN 102981946 A 9 7/8 页 10 0075 union 0076 select 用户名 , 表名 , col4, 97, 34, 100 from dual ; 0077 最后, 执行这个拼接后的。
41、SQL插入语句, 将得到的ETL冒烟测试指标直接插入到信 息表 ( 例如语句中所提及的详细信息表 ) 中。 0078 图5示例性示出了实现本申请的ETL冒烟测试装置的示意图。 图5所示的ETL冒烟 测试装置 1 包括获取模块 2、 调用模块 3、 冒烟测试及返回模块 4、 整理及输出模块 5, 其中 : 所述获取模块 2 用于获取调用目标测试表的调用指令 ; 所述调用模块 3 用于根据所获取的 调用指令调用所述冒烟测试及返回模块 ; 所述冒烟测试及返回模块 4 用于对所述目标测试 表进行冒烟测试, 然后输出测试结果 ; 以及所述整理及输出模块 5 用于接收所述测试结果, 将其整理成 ETL 冒。
42、烟测试报表, 并输出所述 ETL 冒烟测试报表。 0079 图 5 中所示的获取模块 2、 调用模块 3、 整理及输出模块 5 可以用 JAVA 实现, 冒烟 测试及返回模块 4 可以用 SQL 语言实现。 0080 图 5 中所示的冒烟测试及返回模块还可以包括如下单元 ( 未示出 ) : 查询单元, 用于查询数据字典, 读取所述目标测试表的字段信息 ; 拼接单元, 用于根据所述查询单元所 读取的字段信息, 拼接查询语句, 对所述目标测试表执行所拼接的查询语句, 生成结果字符 串 ; 插入单元, 用于根据所述查询单元所读取的字段信息, 解析所述拼接单元生成的结果字 符串, 拼接插入语句, 并执。
43、行所拼接的插入语句, 将得到的 ETL 冒烟测试指标插入到数据库 表中。 0081 其中, 所述数据库表包括概况信息表与详细信息表其中之一或二者。 0082 其中, 在所述拼接单元中还包括第一循环组件, 用于判断所读取的字段是否为最 后一个字段, 如果判断结果为不是最后一个字段就继续将读取到的字段拼接到所述查询语 句中 ; 以及在所述插入单元中还包括第二循环组件, 用于判断所读取的字段是否为最后一 个字段, 如果判断结果为不是最后一个字段就继续解析在所述拼接单元中生成的结果字符 串, 将解析结果拼接到所述插入语句中。 0083 其中, 所述插入单元使用正则表达式解析在所述拼接单元中生成的结果字。
44、符串。 0084 由于例如用户名、 表名、 是否分区、 分区名、 字段个数、 有无全局索引、 数据量、 PCT_ FREE、 列名、 列类型、 空值数量、 空值比重、 默认值数量、 默认值比重、 零值数量、 零值比重、 不 同值数量、 最大值、 最小值、 抽样值1、 抽样值1数量、 抽样值1比重、 抽样值2、 抽样值2数量、 抽样值2比重、 抽样值3、 抽样值3数量、 抽样值3比重、 抽样值4、 抽样值4数量、 抽样值4比 重、 抽样值 5、 抽样值 5 数量、 抽样值 5 比重、 字符串长度 (1-5 位 ) 或数值长度 1 位及占比、 字符串长度 (6-10 位 ) 或数值长度 2 位及占。
45、比、 字符串长度 (11-20 位 ) 或数值长度 3 位及 占比、 字符串长度 (21-30 位 ) 或数值长度 4 位及占比、 字符串长度 (31-40 位 ) 或数值长度 5 位及占比、 字符串长度 (41 位 - 最长 ) 或数值长度 6 位 - 最长及占比、 number 类型长度警 告 ( 针对 Oracle)、 主键标识等测试指标在不同的 ETL 项目中通常都需要分别单独编写和 执行不同的代码 ( 例如, 多个查询语句 ) 才能得到, 所以 ETL 测试人员为了得到上述指标就 需要进行大量的重复性工作。和现有技术相比, 本申请的 ETL 冒烟测试方法通过将这些需 要分别单独编写的。
46、代码自动拼接成一个复合的查询语句, 并通过自动解析生成的结果字符 串, 进而自动拼接出一个复合的插入语句, 最终一次性自动生成多个测试指标的测试结果, 由于本发明的拼接、 解析和插入过程均是一次性自动完成, 从而免除了 ETL 测试人员为得 说 明 书 CN 102981946 A 10 8/8 页 11 到上述指标而进行的大量的重复性工作。 0085 同时, 通过本发明 ETL 冒烟测试方法, 能够将多个测试指标拼接成一个通用的测 试指标, 这样, 拼接后的指标就能够实现与具体 ETL 项目的业务逻辑的低耦合, 即, 便于考 虑大部分 ETL 项目的通用业务逻辑, 能够避免不同 ETL 项目。
47、不同业务逻辑对 ETL 冒烟测试 带来的影响。 0086 通过上面结合图 1 至图 5 对本申请的 ETL 冒烟测试方法的实施例的描述, 可以看 到, ETL 冒烟测试方法将通用的数据库查询语句 ( 例如, SQL 语句 ) 放到一个存储过程中, 在 测试执行过程中不需要人工参与。并且存储过程中的代码进行了巧妙的设计, 针对同一个 目标表只做一次全表扫描就能计算出所需要的所有指标, 尽最大程度地减少了 I/O 数量, 提高了测试执行的效率, 也减小了数据库与服务器的压力。存储过程执行后将冒烟测试指 标保存在数据库表(即概况信息表或详细信息表之类的信息表)中, 即为测试结果, 并通过 前台数据库。
48、连接程序 ( 例如, JAVA 程序 ) 读取数据库表而生成直观的 ETL 冒烟测试报表, 从而易于对 ETL 产品进行分析。 0087 也就是说, 本申请的 ETL 冒烟测试方法引用了功能测试中冒烟测试的概念, 将 ETL 测试人员在不同项目中需要重复去做的工作抽取出来自动批量完成, 大大节省了 ETL 测试 人员的测试时间, 也避免了测试人员在做枯燥的重复工作时犯一些低级错误。同时, 使用 ETL 冒烟测试方法可以像功能测试中的冒烟测试一样, 很快地对项目的整体质量有一个把 握, 如果 ETL 冒烟测试执行产生的报告中很多指标都存在问题, 那可以直接退回给开发人 员修改, 保证了整个项目的。
49、进度顺利进行。 0088 根据本申请的 ETL 冒烟测试方法可以由具有运算处理能力的单个或多个处理设 备, 如单个或多个计算机, 运行计算机可执行指令来实现。根据本申请的 ETL 冒烟测试装置 可以为单个或多个处理设备, 如单个或多个计算机, 其中的各个模块或单元可以为该处理 设备运行计算机可执行指令时具有相应功能的设备组件。根据本申请的一个实施例, 可以 使用 JAVA、 SQL 等语言在 linux、 Windows 等系统下来实现上述 ETL 冒烟测试方法和装置。 0089 虽然已参照典型实施例描述了本申请, 但应当理解, 所用的术语是说明和示例性、 而非限制性的术语。由于本申请能够以多种形式具体实施而不脱离发明的精神或实质, 所 以应当理解, 上述实施例不限于任。