使用tSQLt对SSIS包进行单元测试

时间:2013-07-03 12:28:53

标签: sql-server ssis tsqlt dtexec

我真的很喜欢tsqlt来测试procs和函数,但是我真的希望能够执行SSIS包并利用FakeTable和AssertEquals来确定它是否是SSIS包实现的。

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

3 个答案:

答案 0 :(得分:8)

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

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

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

<强>汇编

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

<强>法

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

  • 找到您正在测试的目录

  • 中的文件夹
  • 右键单击并选择&#39;执行&#39;

  • 将执行“执行包”对话框。

  • 点击脚本下拉列表,然后选择“脚本到剪贴板”&#39;

  • 生成从存储过程或脚本执行包所需的所有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';
    

这就是全部。

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

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

答案 1 :(得分:2)

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

稍后更新

不完全是关于该主题,但它可能是有关unit/integration testing of SSIS packages

的有用信息

答案 2 :(得分:1)

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