• 使用ORAYLIS BI.Quality基于Ms的BI数据测试


    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测试的结果,我们可以看出有一个比较数据测试发现不同数据:

    NUNITTEST1
    实际上这个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:

    CMDREULST

    Report:

    BITESTRESULTPIC

    一切就是那么简单,可以看到MSBUILD的强大。这个使用是SQL SERVER2008 DEMO database  and dw。

    有时间会具体写一些关于细节问题,希望对您有帮助。

    Author: Petter liu  http://wintersun.cnblogs.com

  • 相关阅读:
    ubuntu系统安装微信小程序开发工具
    【工具】vscode-代码编辑器详解
    微信小程序开发
    webpack基本配置
    vue相关知识
    史上最强vue总结~万字长文---面试开发全靠它了
    ES6——字符串
    ES6——Proxy与Reflect
    ES6——Map与Set
    ES6——Symbol
  • 原文地址:https://www.cnblogs.com/wintersun/p/1689082.html
Copyright © 2020-2023  润新知