8

我真的很喜欢 tsqlt 来测试过程和功能,但我真的希望能够执行 SSIS 包并利用 FakeTable 和 AssertEquals 来确定 SSIS 包是否做了它应该做的事情。

有没有人探索过这条路,是否可以从 tsqlt 包装测试的事务中调用 dtexec ?

4

3 回答 3

12

我相信我可以回答你的问题安德烈,虽然这有点晚了。但我相信它会造福于他人。

作为集成测试的一部分,我们使用 RedGate SQLTest(tSQLt) 进行数据质量测试。

例如,要测试加载到 Staging 中的数据的完整性,测试将是在包加载 staging 表后到 AssertEqualsTable。这是事情的基本顺序:

集合

  • 创建并加载预期的数据表。

行为

  • 通过 t-sql 执行目录中的 SSIS 包。您可以生成 t-sql 代码来调用目录中的任何包,如下所示:

  • 在目录的文件夹中找到您正在测试的包

  • 右键单击并选择“执行”

  • 执行包对话框将打开。

  • 单击脚本下拉菜单并选择“脚本到剪贴板”

  • 生成从存储过程或脚本执行包所需的所有 t-SQL 代码:

    DECLARE @execution_id BIGINT
    EXEC [SSISDB].[catalog].[create_execution] 
          @package_name=N'HistoricalLoad_import_rti_stores_s1.dtsx'
        , @execution_id=@execution_id OUTPUT
        , @folder_name=N'Testing'
        , @project_name=N'Staging1_HistoricalLoad_RTIStores'
        , @use32bitruntime=FALSE
        , @reference_id=NULL
    
    SELECT @execution_id
    
    DECLARE @var0 SMALLINT = 1
    EXEC [SSISDB].[catalog].[set_execution_parameter_value] 
          @execution_id
        , @object_type=50
        , @parameter_name=N'LOGGING_LEVEL'
        , @parameter_value=@var0
    
    EXEC [SSISDB].[catalog].[start_execution] @execution_id
    
  • 返回到您的测试存储过程并将代码粘贴到 Act 部分。

断言 - 从正在测试的包的 SSIS 目标表中选择到实际表中。

  • 然后验证预期和实际是否相等

    EXEC tSQLt.AssertEqualsTable 'expected', 'actual';
    

仅此而已。

查看示例数据库中的外键测试,以指导您进行外键和参照完整性测试。

我发现它作为回归测试我们的数据仓库加载功能和验证我们的编排的一种手段是非常宝贵的。因为如果我们能够验证数据在正确的时间流入正确的位置,那么事情就会按预期执行。

于 2014-06-14T06:44:31.533 回答
2

tSQLt 是一个单元测试框架,它是为单独测试代码而设计。因此,为了测试您的代码/数据如何与其他代码/数据集成,通常使用不同类型的测试 -集成测试

稍后更新

不完全是关于这个主题,但它可能是关于SSIS 包的单元/集成测试的有用信息

于 2013-07-08T14:13:12.857 回答
1

http://ssistester.codeplex.com/上有一个带有 SSIS 单元测试的示例项目。很少有示例显示使用 FakeSource 和 FakeDestination 来断言数据流是否正确读取/写入数据。

于 2014-10-07T17:33:31.307 回答