在SSIS包中进行单元测试数据流程

6
有没有一种方法来单元测试SSIS包中的数据流。例如:测试排序-验证排序是否正确完成。
5个回答

4

有一个SSIS的单元测试框架 - 可以查看SSISUnit

这值得一看,但它可能不能解决您的问题。使用此框架可以在控制流级别对单个组件进行单元测试,但是无法隔离单个数据流转换 - 您只能测试整个数据流组件。

您可以采取的一种方法是重新设计您的包并将您的DataFlow组件拆分为多个可以单独测试的DataFlow组件。但是,这将影响您的包性能,因为您必须在每个数据流任务之间将数据持久化到某个地方。

您还可以通过使用NUnit或类似的框架,使用SSIS API加载包并执行单个任务来采用此方法。


SSIS Unit的链接不再可用。我认为它已经移动到GitHub上:https://github.com/johnwelch/ssisUnit - sergiom

1
SSISTester可以拦截两个组件之间的数据流并将数据保存到文件中。输出可以在单元测试中访问。有关更多信息,请查看ssistester.bytesoftwo.com。以下是如何使用SSISTester实现此目的的示例:
[UnitTest("DEMO", "CopyCustomers.dtsx", DisableLogging=true)]
[DataTap(@"\[CopyCustomers]\[DFT Convert customer names]\[RCNT Count  customers]", @"\[CopyCustomers]\[DFT Convert customer names]\[DER Convert names to upper string]")]
[DataTap(@"\[CopyCustomers]\[DFT Convert customer names]\[DER Convert names to upper string]", @"\[CopyCustomers]\[DFT Convert customer names]\[FFD Customers converted]")]
public class CopyCustomersFileAll : BaseUnitTest
{
    ...
    protected override void Verify(VerificationContext context)
    {
        ReadOnlyCollection<DataTap> dataTaps = context.DataTaps;

        DataTap dataTap = dataTaps[0];
        foreach (DataTapSnapshot snapshot in dataTap.Snapshots)
        {
            string data = snapshot.LoadData();
        }

        DataTap dataTap1 = dataTaps[1];
        foreach (DataTapSnapshot snapshot in dataTap1.Snapshots)
        {
            string data = snapshot.LoadData();
        }
    }
}

0

简短回答是 - 不容易。更长的回答是:是的,但你需要很多外部工具来完成它。一个潜在的测试方法是取数据集的一个小样本,通过排序运行它,并将其转储到Excel文件中。将相同的数据集复制到Excel电子表格中,并手动进行排序。对比SSIS转储结果和手动排序示例的二进制差异工具。如果一切正常,那就是正确的。

另一方面,在SSIS中进行单元测试排序不是必要的,除非你真正测试的是排序标准选择。排序应该在MS发货之前经过测试。


0

我会通过使用已知的适当输入的良好文件,并将其与外部程序进行二进制比较来自动化测试。


0

当我需要查看数据从组件到组件的移动时,我喜欢使用数据查看器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接