Использование MbUnit в TeamCity
Вопрос
Я компилирую проект NAnt в Linux с TeamCity Continuous Integration server.Я смог сгенерировать тестовый отчет, запустив NAnt в mono через программу командной строки, но у меня нет возможности использовать отчет как программу NAnt Runner.Я также использую MbUnit для платформы тестирования.
Как я могу объединить в отчете о тестировании и отобразить "Тесты завершились неудачей:1 (1 новый), пройденный:3049" для сборки?
Обновить: взгляните на MBUnitTask - это задача NAnt, которая использует отправку сообщений, которые TeamCity ожидает от NUnit, поэтому она позволяет вам использовать все функции TeamCity для тестов.
MBUnitTask ( Модульная задача )
Обновить: Galio имеет лучшую поддержку, поэтому вам просто нужно обратиться к библиотекам DLL Galio MbUnit 3.5 вместо библиотек MbUnit 3.5 и переключиться на galio runner, чтобы заставить его работать.
Решение
У Gallio теперь есть расширение для вывода служебных сообщений TeamCity.Просто используйте прилагаемую библиотеку Gallio.Nantasks.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>
Вот что у меня получилось
Как я могу объединить данные в отчете о тестировании?
Сначала вам нужно будет заставить 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 и Настройки \, в linux это было в каталоге /root)
<report-tab title="Tests" basePath="Reports" startPage="mbunit.html" />
Как я могу отобразить "Тесты завершились с ошибкой:1 (1 новый), пройденный:3049" для сборки?
TeamCity ищет файл с именем teamcity-info.xml, в который вы можете вставлять сообщения для отображения.Фактическое количество тестов на самом деле представляет собой просто обычный текст.Я думаю, вы можете просто добавить файл как артефакт, но у меня также есть он в корневом каталоге сборки.
в NAnt вы захотите использовать эту команду для выполнения XSLT в XML-отчете MbUnit
<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 > 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>
Гаджет боковой панели TeamCity для Windows Vista, Windows 7 http://teamcity-gadget.com