代码之家  ›  专栏  ›  技术社区  ›  Scott Cowan

在TeamCity中使用MBUnit

  •  15
  • Scott Cowan  · 技术社区  · 16 年前

    我正在用Teamcity Continuous Integration Server在Linux上编译一个NANT项目。我已经能够通过命令行运行程序在mono上运行nant来生成测试报告,但是没有像nant运行程序那样使用报告的选项。我还在测试框架中使用MBUnit。

    如何在测试报告中合并并显示“测试失败:1(1新),通过:3049”用于生成?

    更新: 看看mbunittask,它是一个nant任务,它使用teamcity期望从nunit发送的消息,因此它允许您使用teamcity的所有特性进行测试。

    MBUnitTask

    更新: Galio有更好的支持,所以您只需参考Galio MBUnit 3.5 DLL而不是MBUnit 3.5 DLL,然后切换到Galio Runner即可。

    4 回复  |  直到 15 年前
        1
  •  6
  •   Mauricio Scheffer    15 年前

    Gallio now has an extension 输出TeamCity服务消息。 只需使用包含的galio.nanttasks.dll并启用teamcity扩展。(这个 won't be necessary in the next release )

        2
  •  4
  •   Lance Fisher    16 年前

    TeamCity监视来自构建的命令行输出。您可以通过在输出中插入某些标记来让它知道您的测试是如何进行的,请参见 http://www.jetbrains.net/confluence/display/TCD3/Build+Script+Interaction+with+TeamCity . 例如

    ##teamcity[testSuiteStarted name='Test1']
    

    将通知TeamCity一组测试已开始。使用MBUnit,您不能在测试运行时输出这些标记,但可以转换它输出的XML文件。下面是我使用的XSL:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="text"/>
        <xsl:template match="/">
    
            <xsl:apply-templates/>
    
        </xsl:template>
    
        <xsl:template match="assemblies/assembly">
    ##teamcity[testSuiteStarted name='<xsl:value-of select="@name" />']
    
            <xsl:apply-templates select="//run" />
    
    ##teamcity[testSuiteFinished name='<xsl:value-of select="@name" />']
        </xsl:template>
    
        <xsl:template match="run">
    
            <xsl:choose>
                <xsl:when test="@result='ignore' or @result='skip'">
            ##teamcity[testIgnored name='<xsl:value-of select="@name" />' message='Test Ignored']
                </xsl:when>
                <xsl:otherwise>
            ##teamcity[testStarted name='<xsl:value-of select="@name" />']
                </xsl:otherwise>
            </xsl:choose>
    
    
            <xsl:if test="@result='failure'">
                ##teamcity[testFailed name='<xsl:value-of select="@name" />' message='<xsl:value-of select="child::node()/message"/>' details='<xsl:value-of select="normalize-space(child::node()/stack-trace)"/>']
            </xsl:if>
    
    
            <xsl:if test="@result!='ignore' and @result!='skip'">
            ##teamcity[testFinished name='<xsl:value-of select="@name" />']
            </xsl:if>
    
        </xsl:template>
    
    </xsl:stylesheet>
    
        3
  •  3
  •   community wiki 3 revs Scott Cowan    16 年前

    这就是我想到的

    如何合并到测试报告中?

    首先,您需要让MBUnit生成XML和HTML报告。命令行参数如下

    /rt:Xml /rt:Html /rnf:mbunit /rf:..\reports
    

    这将把报告生成一个名为reports的目录,文件名为mbunit.xml和mbunit.html。

    接下来,我们要将这些文件作为构件添加到构建中

    build\reports\* => Reports
    

    最后一步是告诉TeamCity将其添加为构建的选项卡

    找到.buildserver\config\main-config.xml并添加此行 (在Windows上是在C:\documents and settings\中,在Linux上是在/root目录中)

    <report-tab title="Tests" basePath="Reports" startPage="mbunit.html" />
    

    如何显示构建的“测试失败:1(1个新的),通过:3049”?

    teamcity查找一个名为teamcity-info.xml的文件,您可以在其中粘贴消息以显示。实际的测试计数实际上只是纯文本。我认为您可以将该文件作为工件添加,但我在构建的根目录中也找到了它。

    在nant中,您将希望使用此命令对mbunit xml报告执行XSLT。

    <style style="includes\teamcity-info.xsl" in="reports\mbunit.xml" out="..\teamcity-info.xml" />
    

    实际的XSL如下所示。 (注意,和在XSL中是保留的,因此我们必须使用参数)

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="cbl" select="'{'"/>
    <xsl:param name="cbr" select="'}'"/>
    <xsl:template match="/">
    <xsl:for-each select="report-result/counter">
    
    <build number="1.0.{concat($cbl,'build.number',$cbr)}">
        <xsl:if test="@failure-count &gt; 0">
            <statusInfo status="FAILURE">    
                <text action="append"> Tests failed: <xsl:value-of select="@failure-count"/>, passed: <xsl:value-of select="@success-count"/></text>
            </statusInfo>
        </xsl:if>
        <xsl:if test="@failure-count = 0">
            <statusInfo status="SUCCESS">
                <text action="append"> Tests passed: <xsl:value-of select="@success-count"/></text>
            </statusInfo>
        </xsl:if>
    
    </build>
    </xsl:for-each>
    
    </xsl:template>
    </xsl:stylesheet>
    

    这会给你一个像这样的文件

    <build number="1.0.{build.number}">
       <statusInfo status="FAILURE">
          <text action="append">Tests failed: 16, passed: 88</text>
       </statusInfo>
    </build>
    
        4
  •  -1
  •   Sergey    15 年前

    用于Windows Vista、Windows 7的TeamCity侧边栏小工具 http://teamcity-gadget.com