Как я могу интегрировать phpunit с Hudson CI? - PullRequest
15 голосов
/ 06 февраля 2009

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

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

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

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

Ответы [ 9 ]

24 голосов
/ 26 сентября 2009

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

http://wiki.hudson -ci.org / дисплей / HUDSON / XUnit + Plugin

7 голосов
/ 19 марта 2011

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

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

5 голосов
/ 20 июня 2009

Вы также можете использовать этот файл 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 голосов
/ 06 февраля 2009

Я обычно работаю с 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: Настройка Hudson

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

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

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

См. Также Презентацию Phing или Презентацию Phing для получения дополнительной информации о Phing и (в меньшей степени) интеграции PHPUnit.

Удачи!

2 голосов
/ 05 ноября 2009

Если вы хотите получить полное руководство по интеграции PHP с Hudson, вы можете воспользоваться этой ссылкой:

Непрерывная интеграция для PHP с Hudson

2 голосов
/ 25 июня 2009

Преобразование 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>

у меня это работает.

2 голосов
/ 29 марта 2009

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

Если не считать исправления PHPUnit для генерации «лучшего» XML или улучшения Hudson для большей гибкости в принятии, единственное решение состоит в том, чтобы исправить XML, исключив вложение элементов . Я использовал sed, чтобы изменить PHPUnit XML , чтобы он был приемлем для Хадсона:

# 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
0 голосов
/ 01 июля 2009

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

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

0 голосов
/ 14 марта 2009

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

  • Настройте свой проект
  • Поставьте флажок в общедоступном отчете JUnit (см. http://thinkvitamin.com/images/articles/hudson/hudson_setup.png) и заполните расположение "phpunit.xml в соответствующей папке builds /" *
  • надеюсь, что следующая сборка будет содержать тренд и более подробную информацию о ваших тестах, как здесь https://hudson.dev.java.net/screenshots/5.png
...