Pentaho 水壶:如何为转换/作业设置测试?

Posted

技术标签:

【中文标题】Pentaho 水壶:如何为转换/作业设置测试?【英文标题】:Pentaho kettle: how to set up tests for transformations/jobs? 【发布时间】:2012-04-03 12:49:42 【问题描述】:

我使用 Pentaho Kettle 已经有一段时间了,之前我所做的转换和工作(使用勺子)非常简单,从 db 加载、重命名等,将内容输入到另一个 db。但现在我一直在做一些更复杂的计算的转换,我现在想以某种方式进行测试。

所以我想做的是:

    设置一些测试数据 运行转换 验证结果数据

一种选择可能是制作一个测试转换的 Kettle 测试作业。但由于我的转换与 java 项目有关,我更愿意从 jUnit 运行测试。所以我考虑过做一个 jUnit 测试:

    设置测试数据(使用 dbunit) 运行转换(从命令行使用 kitchen.sh) 验证结果数据(使用 dbunit)

但是,这种方法需要测试数据库,这些数据库并不总是可用(oracle 等昂贵/遗留数据库)我更喜欢的是,如果我可以模拟或将一些存根测试数据传递给我的输入步骤,那么我会以某种方式进行。

关于如何测试 Pentaho 水壶转换的任何其他想法?

【问题讨论】:

我不明白您所说的“但这会将我的测试限制在我在我们的测试服务器上可用的那些数据库”的意思。鉴于您在测试服务器上运行,您是否总是受限于这些数据库? 我稍微编辑了问题以澄清。但是无论如何,我的意思是我并不总是可以访问我的输入步骤数据库(除了对真实生产数据库的读取访问权限)。所以我不能通过 dbunit 等向那些输入任何测试数据。这就是为什么我宁愿以某种方式模拟我的输入步骤数据。 【参考方案1】:

jira.pentaho.com 上的某个地方有一个 jira(我手头没有),它确实要求这个 - 但可惜它还没有实现。

所以你确实有正确的解决方案——我还会添加 jenkins 和一个 ant 脚本来将它们结合在一起。我对报告测试做了类似的事情——我实际上有一个 pentaho 作业加载数据,然后它执行报告,然后将输出与已知输出进行比较并报告通过/失败。

【讨论】:

【参考方案2】:

如果您将水壶作业分为两个阶段:

将数据加载到流中 处理和更新数据

您可以在加载数据流步骤结束时使用复制行来生成结果,并在流程步骤开始时从结果中获取行来获取行。

如果你这样做,那么你可以使用任何方式来加载数据(kettle 转换,从 ant 脚本调用的 dbunit),并且可以模拟你想要的任何数据库表。

我用它来测试我编写的一些 ETL 脚本,它工作得很好。

【讨论】:

这是一个不错的解决方案,我也使用过。除了分离负载和处理部分之外,我还将输出分离到输出流部分,这样我就可以将测试情况下的输出重定向到可以断言的结果文件。但是,如果有人可以用测试数据模拟实际的输入/输出转换,我会更好,因为输入和输出转换中经常存在问题,在这种方法中没有得到测试。 hannesh,我尝试使输入/输出转换尽可能地笨拙,从而最大限度地减少出现的问题。你能举一个这样的问题的例子吗? 我写了一系列关于如何测试kettle ETL转换的博文:mooreds.com/wordpress/archives/1061【参考方案3】:

您可以使用数据验证器步骤。当然不是一个完整的单元测试套件,但我认为有时可以快速检查数据完整性。 您可以一次运行多个测试。

对于更“严肃”的测试,我将推荐 @codek answer 并在 Jenkins 下执行您的水壶。

【讨论】:

以上是关于Pentaho 水壶:如何为转换/作业设置测试?的主要内容,如果未能解决你的问题,请参考以下文章

Pentaho PDI 9(水壶):厨房无法继续,因为无法加载作业

由于缺少插件,Pentaho 水壶无法运行转换

Pentaho 水壶将月份数值转换为月份名称

在 Pentaho 水壶中,如何检查文件名是不是存在?

pentaho水壶:从流中获取行数

Pentaho 水壶勺日期操作