【发布时间】:2013-07-03 12:28:52
【问题描述】:
我真的很喜欢 tsqlt 来测试 procs 和函数,但也真的希望能够执行 SSIS 包并利用 FakeTable 和 AssertEquals 来确定 SSIS 包是否做了它应该做的事情。
有没有人探索过这条路,是否可以从 tsqlt 包装测试的事务中调用 dtexec?
【问题讨论】:
标签: sql-server ssis tsqlt dtexec
我真的很喜欢 tsqlt 来测试 procs 和函数,但也真的希望能够执行 SSIS 包并利用 FakeTable 和 AssertEquals 来确定 SSIS 包是否做了它应该做的事情。
有没有人探索过这条路,是否可以从 tsqlt 包装测试的事务中调用 dtexec?
【问题讨论】:
标签: sql-server ssis tsqlt dtexec
我相信我可以回答你的问题安德烈,虽然这有点晚了。但我相信它会造福于他人。
作为集成测试的一部分,我们正在使用 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';
仅此而已。
查看示例数据库中的外键测试,以指导您进行外键和参照完整性测试。
我发现它作为一种回归测试我们的数据仓库加载功能和验证我们的编排的方法是非常宝贵的。因为如果我们能够验证数据在正确的时间流入正确的位置,那么事情就会按预期执行。
【讨论】:
tSQLt 是一个单元测试框架,专为独立测试代码而设计。 因此,为了测试您的代码/数据如何与其他代码/数据集成,通常使用不同类型的测试 - 集成测试。
不完全是关于主题,但它可能是关于unit/integration testing of SSIS packages 的有用信息
【讨论】:
http://ssistester.codeplex.com/ 有一个带有 SSIS 单元测试的示例项目。很少有示例显示使用 FakeSource 和 FakeDestination 来断言数据流是否正确读取/写入数据。
【讨论】: