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

duy*_*ker 5 sql-server ssis dtexec tsqlt

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

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

小智 8

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

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

例如,为了测试加载到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
    
    Run Code Online (Sandbox Code Playgroud)
  • 返回测试存储过程并将代码粘贴到Act部分.

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

这就是它的全部.

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

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