Как я могу интегрировать phpunit с Hudson CI?

Мы смотрим на переход от phpundercontrol к Hudson (похоже, у него есть действительно интересные функции!), но я не могу понять, как получить журналы phpunit, чтобы они отображались.

У меня phpunit работает отлично в Hudson с ant, а -log-xml помещает phpunit.xml в соответствующие сборки/папку для этой сборки. Но я не могу понять, как это получить для сборки, чтобы мы могли увидеть тесты, которые выполнялись, а какие не удались, если они есть.

После того, как я это понял, получение покрытия, метрики и api будут следующими:)

Похоже, что это должно быть тривиально для всего, что генерирует его на HTML, например, для Хадсона: "Для этого проекта показана ссылка на" API "для каждой сборки и ссылки для сборки /$BUILDNUM/api/index.html".

Ответы

Ответ 1

Я установил плагин xUnit, указал его на свой файл журнала (из конфигурации заданий), и он работает как шарм. Похоже, что больше нет необходимости в каких-либо пользовательских хаках.

http://wiki.hudson-ci.org/display/HUDSON/xUnit+Plugin

Ответ 2

С последним ответом с 2009 года и многие люди переходят из Хадсона в Дженкинс теперь из-за Oracle рассмотрите использование шаблона Jenkins для PHP, предлагая бесплатный и удобный шаблон для всех ваших потребностей в конфигурации PHPQATools, например pdepend, phpmd, phpcs и phpunit в одном удобном шаблоне.

Существует также IRC-канал # jenkins-php на Freenode для поддержки.

Ответ 3

вы также можете использовать этот xslt файл для преобразования phpunit xml в hudson/junit xml:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <xsl:element name="testsuites">
        <xsl:for-each select="//testsuite[@file]">
             <xsl:copy-of select="." />
        </xsl:for-each>
    </xsl:element>
</xsl:template>
</xsl:stylesheet>

Ответ 4

Я обычно работаю с CruiseControl для тестирования PHP (используя CC Phing, а не phpundercontrol). Я только немного работал с Хадсоном, но Хадсон смог успешно записывать тесты phpunit с помощью поддержки phing phpunit.

В следующих инструкциях предполагается, что вы будете использовать Phing (не Ant) для управления вашими сборками проектов PHP и чтобы у вас были необходимые предварительные настройки. Он также предполагает, что у вас установлен PHPUnit 3 (хотя PHPUnit 2.x тоже должен работать).

Шаг 1: Настройка проекта для Phing/PHPUnit

Сначала вам нужно убедиться, что ваш проект можно проверить с помощью Phing. Здесь образец Phing build.xml, который запускает модульные тесты и создает JUnit-совместимый вывод XML.

<?xml version="1.0" ?>
<project name="Test Project" default="test">
    <property name="tests.dir" value="." />
    <property name="reports.dir" value="${tests.dir}/reports" />

    <target name="test" description="Run PHPUnit tests">
        <phpunit haltonerror="true" haltonfailure="true" printsummary="true">
            <batchtest>
                <fileset dir="${tests.dir}">
                    <include name="**/*Test.php" />
                </fileset>
            </batchtest>
            <formatter type="plain" usefile="false" />
            <formatter type="xml" usefile="true" todir="${reports.dir}" outfile="test-results.xml" />
        </phpunit>
    </target>
</project>

Шаг 2: Настройка Хадсона

  • Установите плагин Phing для Hudson. Обратите внимание, что вам может потребоваться установить Phing как автономный pacakge (я положил его в /opt/phing -2.3.3) и настроить PHING_HOME в конфигурации Hudson, чтобы указать на этот каталог. Вы также можете использовать установленный PEAR Phing; однако, я не тестировал это.
  • Настройте Hudson для создания вашего проекта с помощью Phing.
  • Настройте Hudson для сбора тестов JUnit из вашего проекта. Имя нашего файла результатов будет test-results.xml. В приведенном выше примере вы должны настроить его для сбора файлов из отчетов /*. Xml.

Шаг 3: Сборка!

Это должно сделать это. Попробуйте построить свой проект сейчас. Надеюсь, он соберет результаты.

Также см. Phing-презентация или Phing presentation для более подробной информации о Phing и (в меньшей степени) интеграции PHPUnit.

Удачи!

Ответ 5

Формат XML, испускаемый PHPUnit не совместим (в настоящее время) с Hudson, поскольку он не совсем такой же, как генерируемый XML другими подобными инструментами. Вот почему вы получаете сообщение "Ни один из отчетов о тестах не содержит никаких результатов".

За исключением исправления PHPUnit для создания "лучшего" XML или улучшения Hudson, чтобы быть более гибким в том, что он принимает, единственным решением является исправление XML, устраняя вложенность <testuite> элементы. Я использовал sed для изменения PHPUnit XML, чтобы он был приемлемым для Hudson:

# Tweak the test result XML to make it acceptable to Hudson.
lines=`wc -l test-results/results.xml|awk '{print $1}'`
end=`expr $lines - 1`
sed -i "$end d;3d" test-results/results.xml

Ответ 6

Преобразование XSLT из предыдущего сообщения не работает для меня. После применения этого преобразования структура DOM отчета не изменяется. Я изменил его, чтобы исправить эту проблему. Мой вариант:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <xsl:element name="testsuites">
         <xsl:for-each select="//testsuite[@file]/testsuite">
            <xsl:copy-of select="." />
         </xsl:for-each>
      </xsl:element>
   </xsl:template>
</xsl:stylesheet>

он работает для меня.

Ответ 8

Ответ выше действителен, но проще, без изменения процесса сборки:

Ответ 9

Я считаю, что xslt, возможно, придется варьировать в зависимости от используемой версии phpunit. Например, таблица стилей, опубликованная хоши, хорошо работала для меня, используя версию phpunit 3.3.17

Но вполне возможно, что phpunit был обновлен, чтобы выпустить другой формат в более новых версиях, или sir-vestnik мог запускать более старую версию.