ORAYLIS BI.Quality是一个开源项目,对BI解决方案提供一种简单的测试方案。它是基于NUnit并支持多种测试方法。以下示例是2010.3.12Release v1.0版本。
首先,需要下载安装NUnit,然后安装完成后,打到相应的目录,有一个Lib文件夹,找到里面的BI.Quality.dll。这个是已经Bulid好的了。有两种方法来测试,
一种是用NUnit GUI,打开BI.Quality.dll,然后Run…. 它会自动加载Queries文件夹下的Files,这些文件包括三种类型,xml是配制文件,sql是用来存储具体查询语句,rslt是结果集文件(这个文件是自动生成,可以删除)。我们打看可以看到是DataSet的XML数据。
另一个文件夹Connections,是配制连接字符串。分别对应是OLTP,OLAP,MDX的connection.也是基于XML的。内容像这样:
1: <Connection>
2: <Name>MDX-AdventureWorks</Name>
3: <ConnectionString>
4: Provider=MSOLAP.4;
5: Data Source=.;
6: Integrated Security=SSPI;
7: Initial Catalog=Adventure Works DW;
8: </ConnectionString>
9: </Connection>
下面是一个MDX语句的文件内容:
1: select
2: non empty
3: [Measures].[Internet Sales Amount] on columns,
4: non empty
5: [Date].[Calendar].[Calendar Quarter].Members on rows
6: from
7: [Adventure Works]
8: CELL PROPERTIES VALUE;
然后我们来看下要对比查询DW T-sql 语句于另一个文件中:
1: select
2: 'CY ' + cast(dd.CalendarYear as nvarchar) as Year,
3: 'H' + cast(dd.CalendarSemester as nvarchar) + ' CY ' + cast(dd.CalendarYear as nvarchar) as Semester,
4: 'Q' + cast(dd.CalendarQuarter as nvarchar) + ' CY ' + cast(dd.CalendarYear as nvarchar) as Quarter,
5: cast(sum(SalesAmount)as money )as InternetSalesAmount
6: from
7: dbo.FactInternetSales fi
8: inner join DimDate dd on fi.OrderDateKey = dd.DateKey
9: group by
10: dd.CalendarYear,
11: 'CY ' + cast(dd.CalendarYear as nvarchar),
12: 'H' + cast(dd.CalendarSemester as nvarchar) + ' CY ' + cast(dd.CalendarYear as nvarchar),
13: 'Q' + cast(dd.CalendarQuarter as nvarchar) + ' CY ' + cast(dd.CalendarYear as nvarchar)
14: order by
15: dd.CalendarYear, 3
看NUNIT GUI测试的结果,我们可以看出有一个比较数据测试发现不同数据:
实际上这个TOOLS是利用NUNIT的单元测试来测试或比较数据,并且这些UnitTest动态配制的,可以在SourceCode中看到:
1: [Test, TestCaseSource(typeof(ConfigurationManager), "GetTestCases")]
2: public void ExecuteQuery(QueryTestConfiguration queryTestConfiguration)
3: {
4: // get the connection of the QueryTest and check existance
5: ConfigurationManager configurationManager = ConfigurationManager.Instance();
6: ConnectionConfiguration connectionConfiguration = configurationManager.Connections[queryTestConfiguration.ConnectionRef];
7: Assert.IsNotNull(connectionConfiguration, String.Format("QueryTest {1}: ConnectionRef {0} does not exist", queryTestConfiguration.ConnectionRef, queryTestConfiguration.Name));
8:
9: // Open the connection
10: OleDbConnection connection = new OleDbConnection(connectionConfiguration.ConnectionString);
11: connection.Open();
12:
13: // get the querytext and execute the query and store the rslt in dataTable
14: DataTable dataTable = new DataTable();
15: String queryText = String.Empty;
16: try
17: {
18: queryText = queryTestConfiguration.Query.GetQueryText(queryTestConfiguration.BaseDir);
19: OleDbDataAdapter adapter = new OleDbDataAdapter(queryText, connection);
20: adapter.SelectCommand.CommandTimeout = 0;
21:
22: dataTable.TableName = "rslt";
23: adapter.FillSchema(dataTable, SchemaType.Mapped);
24: adapter.Fill(dataTable);
25:
26: CorrectDataTable(dataTable);
27: }
28: catch (Exception ex)
29: {
30: System.Console.Out.WriteLine("Query:");
31: System.Console.Out.WriteLine(queryText);
32: System.Console.Out.WriteLine("Message:");
33: System.Console.Out.WriteLine(ex.Message);
34: Assert.Fail("Exception ouccured while executing the query: " + ex.Message);
35: }
36: finally
37: {
38: connection.Close();
39: }
40:
41: // save the DataTable to File
42: if (queryTestConfiguration.RsltFile != null)
43: {
44: FileInfo fi = new FileInfo(queryTestConfiguration.BaseDir + "\\" + queryTestConfiguration.RsltFile);
45: dataTable.WriteXml(fi.FullName,XmlWriteMode.WriteSchema);
46: }
47:
48: // Check Results
49: foreach (AssertConfiguration assert in queryTestConfiguration.Asserts)
50: {
51: assert.AssertThat(dataTable,queryTestConfiguration.BaseDir);
52: }
53: }
使用了Nunit TestCaseSource attribute,然后其它那些配制的XML,全部通过XML序列化进行读取,具体参看SourceCode.
另一种运行方法是使用MsBuild来实现。我们可以写一个bat文件,这样可以使用自动化命令行执行。事先要下载并Install MSBuild.Community Task。
我们可以看到BIN目录有一个BI.Quality.proj文件,这个是MsBuild使用的。我们需要做一些配制,例如send mail,nunit lib src….具体查阅MSDN MSBuild.
过程是通过MSBuild去执行Nunit,然后生成XML测试结果,通过NUnitReport.xsl转化成html,然后再send mail。
Cmd:
Report:
一切就是那么简单,可以看到MSBUILD的强大。这个使用是SQL SERVER2008 DEMO database and dw。
有时间会具体写一些关于细节问题,希望对您有帮助。
Author: Petter liu http://wintersun.cnblogs.com