有没有一种方法来单元测试SSIS包中的数据流。例如:测试排序-验证排序是否正确完成。
有一个SSIS的单元测试框架 - 可以查看SSISUnit。
这值得一看,但它可能不能解决您的问题。使用此框架可以在控制流级别对单个组件进行单元测试,但是无法隔离单个数据流转换 - 您只能测试整个数据流组件。
您可以采取的一种方法是重新设计您的包并将您的DataFlow组件拆分为多个可以单独测试的DataFlow组件。但是,这将影响您的包性能,因为您必须在每个数据流任务之间将数据持久化到某个地方。
您还可以通过使用NUnit或类似的框架,使用SSIS API加载包并执行单个任务来采用此方法。
[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();
}
}
}
简短回答是 - 不容易。更长的回答是:是的,但你需要很多外部工具来完成它。一个潜在的测试方法是取数据集的一个小样本,通过排序运行它,并将其转储到Excel文件中。将相同的数据集复制到Excel电子表格中,并手动进行排序。对比SSIS转储结果和手动排序示例的二进制差异工具。如果一切正常,那就是正确的。
另一方面,在SSIS中进行单元测试排序不是必要的,除非你真正测试的是排序标准选择。排序应该在MS发货之前经过测试。
我会通过使用已知的适当输入的良好文件,并将其与外部程序进行二进制比较来自动化测试。
当我需要查看数据从组件到组件的移动时,我喜欢使用数据查看器。