单元测试ssis包中的数据流

时间:2009-01-26 20:13:51

标签: unit-testing ssis

有没有办法在ssis包中单元测试数据流。

Ex:测试排序 - 验证排序是否正常完成。

5 个答案:

答案 0 :(得分:4)

SSIS有一个单元测试框架 - 见SSISUnit

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

您可以采取的一种方法是重新设计软件包并将DataFlow组件分解为多个可单独测试的DataFlow组件。但是,这会影响程序包的性能,因为您必须在每个数据流任务之间的某处保留数据。

您也可以使用NUnit或类似的框架,使用SSIS api加载包并执行单个任务。

答案 1 :(得分: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();
        }
    }
}

答案 2 :(得分:0)

简短回答 - 不容易。更长的回答:是的,但你需要很多外部工具才能做到这一点。一个潜在的测试是获取数据集的一小部分样本,通过排序运行它,并转储到excel文件。获取相同的数据集,将其复制到Excel电子表格,然后手动对其进行排序。从SSIS和手动排序的示例中对转储结果运行二进制差异工具。如果一切都结束了,那是对的。

OTOH,单元测试SSIS中的Sort不是必需的,除非你真正测试的是排序标准选择。排序 应该在MS发货之前经过测试。

答案 3 :(得分:0)

我会通过为适当的输入提供一个已知的好文件来自动化测试,并将其与外部程序进行二元比较。

答案 4 :(得分:0)

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