TeamCity での MBUnit の使用
質問
TeamCity Continuous Integration サーバーを使用して Linux 上で NAnt プロジェクトをコンパイルしています。コマンド ライン ランナーを介してモノラルで NAnt を実行することでテスト レポートを生成できましたが、NAnt ランナーのようにレポートを使用するオプションがありません。テストフレームワークにもMBUnitを使用しています。
テスト レポートにマージして「テストが失敗しました:」と表示するにはどうすればよいですか?1 (新規 1)、合格:ビルドは 3049" ですか?
アップデート: MBUnitTask を見てください。これは、TeamCity が NUnit から期待するメッセージの送信を使用する NAnt タスクであるため、TeamCity のすべての機能をテストに使用できます。
アップデート: Galio はより優れたサポートを備えているため、MBUnit 3.5 DLL の代わりに Galio MUBUnit 3.5 DLL を参照し、Galio ランナーに切り替えるだけで機能します。
解決
Gallio に拡張機能が追加されました TeamCity サービス メッセージを出力します。付属の Gallio.NAntTasks.dll を使用して、TeamCity 拡張機能を有効にするだけです。(これ 次のリリースでは必要なくなります)
他のヒント
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>
これが私が思いついたものです
テストレポートにマージするにはどうすればよいですか?
まず、XML レポートと HTML レポートの両方を生成するために mbunit を入手する必要があります。コマンドライン引数は次のようになります
/rt:Xml /rt:Html /rnf:mbunit /rf:..\reports
これにより、レポートが reports というディレクトリに生成され、ファイルの名前は mbunit.xml および mbunit.html になります。
次に、これらのファイルをビルドのアーティファクトとして追加します。
build\reports\* => Reports
最後のステップは、チームシティにビルドのタブとして追加するように指示することです
.buildserver config mainconfig.xmlを見つけてこの行を追加します(WindowsにはC:ドキュメントと設定、Linuxで /root dirにあります)
<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 で予約されているため、params を使用する必要があります)
<?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 > 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>
Windows Vista、Windows 7 用 TeamCity サイドバー ガジェットhttp://teamcity-gadget.com