2009-02-05 3 views
15

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

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

После того как я полагаю, что из, получение покрытия, показателей и API будет дальше :)

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

+1

FYI ... флаг -log-xml устарел. Вместо этого используйте -log-junit. – fitzgeraldsteele

ответ

24

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

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

+0

Спасибо, теперь, когда этот плагин существует, это действительно правильное решение, поскольку оно обрабатывает преобразование для вас. – mrooney

4

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

Следующие инструкции предполагают, что вы будете использовать Phing (not 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 как автономный pacakge (я положил его в /opt/phing-2.3.3) и настроить PHING_HOME в конфигурации Hudson, чтобы указать на этот каталог. Вы также можете использовать установленный PEAR Phing; однако, я не проверял это.
  2. Настройте Хадсон для создания своего проекта с использованием Phing.
  3. Настройте Hudson для сбора тестов JUnit из вашего проекта. Имя нашего файла результатов будет test-results.xml. В приведенном выше примере вы должны настроить его для сбора файлов из отчетов/*. Xml.

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

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

Также см. Это Phing presentation, или это Phing presentation для получения дополнительной информации о Phing и (в меньшей степени) интеграции PHPUnit.

Удачи вам!

+0

Спасибо за ответ! Я надеялся сделать это, используя ant, поскольку phing не установлен, но я дам ему выстрел и отчитаюсь. – mrooney

+0

К сожалению, это не работает. У меня есть работа с phing, и он выводит файлы xml, где я ожидаю, хотя издатель JUnit жалуется: «Ни один из тестовых отчетов не содержал никакого результата», как и раньше, хотя он указывает на новый каталог. Есть идеи? – mrooney

+0

Хм ... это странно. Это определенно работало на меня - последняя версия всех задействованных продуктов. Получает ли в результате XML-файл фактические результаты теста? Вы дважды проверяли путь к каталогу? Некоторые пути в Хадсоне, по-видимому, относятся к корню рабочей области, некоторые - к корню проекта. –

0

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

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

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

Недостаточно фиксации PHPUnit для генерации «лучшего» XML или улучшения Hudson, чтобы быть более гибким в том, что он принимает, единственным решением является исправление XML, устраняя вложение элементов <testuite>. Я used sed to alter the 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 
+0

Спасибо Dan. Я ответил на ваш пост в блоге, который, похоже, не работает для меня, я думаю, потому что у меня есть более двух уровней вложенных тегов testuite. Любые другие советы? Надеюсь, кто-то придет с плагином phunit в какой-то момент. – mrooney

5

вы также можете использовать этот файл XSLT для преобразования XML PHPUnit в Гудзон/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> 
+0

Этот работал для меня, спасибо. – Trey

2

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

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

0

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

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

7

С последнего ответа составляет от 2009 и a lot of people migrating from Hudson to Jenkins теперь due to Oracle, рассмотрим используя шаблон Jenkins для PHP, предлагая бесплатный и удобный шаблон для всех ваших потребностей в конфигурации PHPQATools, таких как pdepend, phpmd, phpcs и phpunit в одном выпуске шаблон.

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