【问题标题】:Unit testing of SSIS Package with tSQLt使用 tSQLt 对 SSIS 包进行单元测试
【发布时间】:2013-07-03 12:28:52
【问题描述】:

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

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

【问题讨论】:

    标签: sql-server ssis tsqlt dtexec


    【解决方案1】:

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

    作为集成测试的一部分,我们正在使用 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';
      

    仅此而已。

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

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

    【讨论】:

    • 抱歉回复晚了。我同意这将适用于 SQL2012 以后(我当时使用的是 SQL2008)。当我们迁移到 SQL2012 时,以上或多或少是我们所做的。
    • 我已经尝试了上面的方法,但是当我运行测试时存储过程没有执行。我添加了将执行模式设置为同步的执行参数。你搞定了吗?
    【解决方案2】:

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

    稍后更新

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-22
        • 2020-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 2013-10-15
        • 1970-01-01
        相关资源
        最近更新 更多