2009-02-05 6 views
15

Nous cherchons à passer de phpundercontrol à Hudson (cela semble avoir des fonctionnalités très intéressantes!) Mais je n'arrive pas à comprendre comment afficher les logs phpunit. J'ai phpunit fonctionnant correctement dans Hudson avec ant, et --log-xml place un phpunit.xml dans le dossier builds approprié pour cette construction. Mais je n'arrive pas à comprendre comment obtenir cela pour la construction, afin que nous puissions voir les tests effectués et ceux qui ont échoué, le cas échéant.Comment intégrer phpunit avec Hudson CI?

Après comprendre cela, obtenir une couverture, les mesures et api sera suivant :)

Il semble que ce devrait être trivial pour tout ce qui génère son sur HTML, pour dire Hudson par exemple « Pour ce projet montre un lien vers 'API' pour chaque build et un lien vers builds/$ BUILDNUM/api/index.html ".

+1

FYI ... l'indicateur --log-xml est obsolète. Utilisez --log-junit à la place. – fitzgeraldsteele

Répondre

24

J'ai installé le plugin xUnit, je l'ai pointé sur mon fichier journal (à partir de la configuration du travail), et cela fonctionne comme un charme. Il semble qu'il n'y a plus besoin de hacks personnalisés.

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

+0

Merci, maintenant que ce plug-in existe, il est en effet la solution appropriée car il gère la transformation pour vous. – mrooney

4

Je travaille généralement avec CruiseControl pour les tests PHP (en utilisant le support Phing de CC, pas phpundercontrol). J'ai seulement travaillé un peu avec Hudson, mais j'ai réussi à enregistrer des tests phpunit avec Hudson en utilisant le support phpunit de phing. Les instructions suivantes supposent que vous utiliserez Phing (pas Ant) pour gérer vos projets PHP et que vous avez les prérequis nécessaires. Il suppose également que PHPUnit 3 est installé (bien que PHPUnit 2.x devrait fonctionner aussi).

Étape 1: Projet d'installation pour Phing/PHPUnit

D'abord, vous devez vous assurer que votre projet est testable à l'aide Phing. Voici un exemple de build.xml Phing qui exécute des tests unitaires et crée une sortie XML compatible JUnit.

<?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> 

Étape 2: Configuration Hudson

  1. Installez le plug-in Phing pour Hudson. Notez que peut besoin d'installer Phing comme un pacakge autonome (je l'ai mis dans /opt/phing-2.3.3) et de configurer PHING_HOME dans Hudson config pour pointer vers ce répertoire. Vous devriez également être en mesure d'utiliser le Phing installé par PEAR; Cependant, je n'ai pas testé cela.
  2. Configurez Hudson pour créer votre projet à l'aide de Phing.
  3. Configurez Hudson pour collecter les tests JUnit de votre projet. Le nom de notre fichier de résultats sera test-results.xml. Dans l'exemple ci-dessus, vous devez le configurer pour collecter des fichiers à partir de rapports/*. Xml.

Étape 3: Construire!

Cela devrait le faire. Essayez de construire votre projet maintenant. Espérons qu'il va collecter les résultats.

Voir également cette Phing presentation, ou cette Phing presentation pour plus d'informations sur Phing et (dans une moindre mesure) l'intégration de PHPUnit.

Bonne chance!

+0

Merci pour la réponse! J'espérais le faire en utilisant fourmi car le phing n'est pas installé, mais je vais essayer et rapporter. – mrooney

+0

Malheureusement, cela ne fonctionne pas. Je l'ai en train de travailler avec phing et il sort les fichiers xml où je m'attendais, bien que l'éditeur JUnit se plaint "Aucun des rapports de test ne contenait de résultat" comme avant, même s'il pointe sur le nouveau répertoire. Des idées? – mrooney

+0

Hmmm ... c'est bizarre. Cela a certainement fonctionné pour moi - dernière version de tous les produits concernés. Le fichier XML résultant contient-il réellement des résultats de test (valides)? Avez-vous vérifié le chemin du répertoire? Certains chemins dans Hudson semblent être relatifs à la racine de l'espace de travail, d'autres à la racine du projet. –

0

La réponse ci-dessus est valide, mais plus simplement, sans changer votre processus de construction:

2

Le format du XML émis par PHPUnit is not (currently) compatible with Hudson car il n'est pas tout à fait le même que le XML généré par d'autres outils similaires. C'est pourquoi le message "Aucun des rapports de test ne contient de résultat" s'affiche. À défaut de fixer PHPUnit pour générer un «meilleur» XML ou améliorer Hudson pour qu'il soit plus flexible dans ce qu'il accepte, la seule solution est de corriger le XML en éliminant l'imbrication des éléments <testuite>. J'ai used sed to alter the PHPUnit XML de sorte qu'il est acceptable d'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

Merci Dan. J'ai répondu à votre article de blog qui ne semblait pas fonctionner pour moi, je pense parce que j'ai plus de 2 niveaux de tags de suites de tests imbriqués. D'autres conseils? J'espère que quelqu'un viendra avec un plugin phunit à un moment donné. – mrooney

5

vous pouvez également utiliser ce fichier xslt pour convertir 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> 
+0

Celui-ci a travaillé pour moi, merci. – Trey

2

La transformation XSLT du post précédent ça ne marche pas pour moi. Après l'application de cette transformation, la structure DOM du rapport n'est pas modifiée. Je l'ai modifié pour résoudre le problème. Ma variante est:

<?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> 

ça marche pour moi.

0

Je crois que le xslt pourrait devoir être modifié en fonction de la version de phpunit que l'on utilise. Par exemple, la feuille de style publiée par hoschi a bien fonctionné pour moi, en utilisant phpunit version 3.3.17

Mais il est tout à fait possible que phpunit a été mis à jour pour émettre un format différent dans les versions plus récentes, ou sir-vestnik pourrait être un ancien version.

7

Avec la dernière réponse étant de 2009 et a lot of people migrating from Hudson to Jenkins maintenant due to Oracle, pensez en utilisant le modèle Jenkins pour PHP, offrant un modèle gratuit et pratique pour tous vos besoins de configuration de PHPQATools, comme pdepend, phpmd, phpcs et phpunit dans un modèle de Nient.

Il y a aussi la IRC channel #jenkins-php on Freenode pour le soutien.