将 Visual Studio Team System 2008 单元测试与 CruiseControl.NET 集成
解释了如何将 Visual Studio 2008 单元测试与 CCNET 生成过程集成。
引言
最近,我不得不处理一个使用 VSTS 单元测试的项目,我们需要将这些测试集成到我们的持续集成过程中。我们使用 cruise control.NET。在对 Web 进行大量研究之后,我决定写这篇文章,因为关于这个主题的信息很少。本文假设您已经为您的 Visual Studio 2008 项目创建了一个可用的持续集成环境,使用 CCNET。
执行单元测试
您可以使用命令行测试运行器工具 MSTest.exe 从 CCNET 运行您的单元测试。这要求您在持续集成服务器上安装 Visual Studio 2008。
例如,可以使用以下命令行来执行包含在 TestAssembly.dll 中的单元测试,并将测试结果存储到 results.xml 中。
MSTest.exe /testcontainer:TestAssembly.dll
/resultsfile:results.xml
MSTest
的一个问题是,如果结果文件已经存在,它会报错。为了避免这种情况,您必须在调用MSTest
之前删除结果文件。我们可以在项目的工作目录中创建一个批处理文件来执行此操作,我们将其命名为 RunTests.bat。
del results.xml
MSTest.exe /testcontainer:<PathtoTestProject>\Bin\Debug\TestAssembly.dll
/resultsfile:results.xml
您需要将<PathToTestProject>
替换为您的单元测试项目的绝对路径,并确保将 MSTest.exe 的路径添加到系统路径中。每次运行此批处理文件时,它将删除工作目录中的 results.xml,并调用MSTest
,进而运行测试并创建一个新的结果文件。
现在我们需要从 CCNET 调用此批处理文件。打开您的 ccnet.config 文件并在构建您的项目后,在 msbuild
任务之后插入一个 exec
任务,如下所示
<tasks>
<msbuild>...</msbuild>
<exec>
<executable>{WorkingDirectory}\RunTests.bat</executable>
<baseDirectory>{WorkingDirectory}</baseDirectory>
</exec>
</tasks>
将结果包含在构建报告中
首先,我们需要将 results.xml 文件合并到构建日志中。为此,请更新 ccnet.config 文件的发布者部分,如下所示
<publishers>
<merge>
<files>
<file>{WorkingDirectory}\results.xml</file>
</files>
</merge>
...
</publishers>
要将单元测试结果包含在构建报告中,我们需要 XSL 文件来生成相应的 HTML。不幸的是,CruiseControl
随版本 1.4.0.3172 提供的 XSL 文件不支持由MSTest
版本 9 生成的输出格式。我创建了 2 个名为 MSTest9Report.xsl 和 MSTest9Summary.xsl 的 XSL 文件,这些文件可在下载中找到。这些文件基于 CCNET 版本 1.4.0.3172 附带的 MSTestReport.xsl 和 MSTestSummary.xsl。
下载并将文件复制到 \CruiseControl.NET\server\xsl 文件夹和 \CruiseControl.NET\webdashboard\xsl 文件夹。然后通过修改 xslFiles
部分来修改 ccservice.exe.config(或者如果您使用 ccnet.exe 而不是 ccservice,则修改 ccnet.exe.config)文件,如下所示
<xslFiles>
<file name="xsl\header.xsl"/>
<file name="xsl\compile.xsl"/>
<file name="xsl\mstest9summary.xsl"/>
<file name="xsl\modifications.xsl"/>
</xslFiles>
在上面的部分中,我删除了默认存在的 unittests.xsl,并添加了 mstest9summary.xsl。
现在我们需要配置 Web 仪表板。打开 dashboard.config 文件并更新 buildPlugins
部分,如下所示
<buildPlugins>
<buildReportBuildPlugin>
<xslFileNames>
<xslFile>xsl\header.xsl</xslFile>
<xslFile>xsl\modifications.xsl</xslFile>
<xslFile>xsl\compile.xsl</xslFile>
<xslFile>xsl\MsTest9Summary.xsl</xslFile>
<xslFile>xsl\fxcop-summary.xsl</xslFile>
<xslFile>xsl\NCoverSummary.xsl</xslFile>
<xslFile>xsl\SimianSummary.xsl</xslFile>
<xslFile>xsl\fitnesse.xsl</xslFile>
</xslFileNames>
</buildReportBuildPlugin>
<buildLogBuildPlugin />
<xslReportBuildPlugin description="MSTest Report" actionName="MSTESTReport"
xslFileName="xsl\MsTestReport.xsl"/>
同样,我删除了 unittestsummary.xsl 并添加了 mstest9summary
。新的 xslReportBuildPlugin
元素导致在左侧显示一个名为“MSTest Report”的链接,单击它将以表格形式显示详细的测试结果。
结论
就这样,现在重新启动您的 ccservice,您的 VSTS 单元测试应该与 cruise control 完全集成。提供的 XSL 文件显示了测试名称、结果、持续时间、消息和堆栈跟踪,但它们可以很容易地修改以显示测试结果中可用的附加信息。
历史
- 2008 年 4 月 17 日:初始发布