2009-02-05 5 views
15

Wir sind dabei, von phpundercontrol zu Hudson zu wechseln (es sieht so aus, als hätte es einige wirklich coole Features!), Aber ich kann nicht herausfinden, wie phpunit Logs angezeigt werden.Wie kann ich phpunit mit Hudson CI integrieren?

Ich habe phpunit läuft gut in Hudson mit ant, und --log-xml setzt eine phpunit.xml in die entsprechenden Builds/Ordner für diesen Build. Aber ich kann nicht herausfinden, wie man das für den Build bekommt, so dass wir die Tests sehen können, die laufen und welche fehlgeschlagen sind, falls überhaupt. Für dieses Projekt

Nachdem ich das herauszufinden, Abdeckung bekommen, Metriken und api wird die nächste sein :)

Es scheint, wie es für etwas trivial sein sollte, die auf HTML seinen erzeugt, zum Beispiel“Hudson zu sagen, Zeige für jeden Build einen Link zu 'API' und verlinke zu Builds/$ BUILDNUM/api/index.html ".

+1

FYI ... das Flag --log-xml ist veraltet. Verwenden Sie stattdessen --log-junit. – fitzgeraldsteele

Antwort

24

Ich installierte das Plugin xUnit, zeigte es auf meine Log-Datei (von Job-Konfiguration), und es funktioniert wie ein Charme. Es scheint, dass keine benutzerdefinierten Hacks mehr benötigt werden.

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

+0

Danke, jetzt, da dieses Plug-in existiert, ist es in der Tat die richtige Lösung, da es die Transformation für Sie übernimmt. – mrooney

4

Normalerweise arbeite ich mit CruiseControl für PHP-Test (mit CC Phing Unterstützung, nicht phpundercontrol). Ich habe nur ein wenig mit Hudson zusammengearbeitet, aber Hudson konnte phpunit-Tests erfolgreich mit phing phpunit unterstützen.

Die folgenden Anweisungen gehen davon aus, dass Sie Phing (nicht Ant) verwenden, um Ihre PHP-Projekt-Builds zu verwalten und dass Sie die notwendigen Voraussetzungen haben. Es setzt auch voraus, dass Sie PHPUnit 3 installiert haben (obwohl PHPUnit 2.x auch funktionieren sollte).

Schritt 1: Setup-Projekt für Phing/PHPUnit

Zuerst müssen Sie sicherstellen, dass Ihr Projekt mit Phing prüfbar ist. Hier ist ein Beispiel für eine phing build.xml, die Komponententests ausführt und eine JUnit-kompatible XML-Ausgabe erstellt.

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

Schritt 2: Setup Hudson

  1. Installieren Sie das Phing-Plugin für Hudson. Beachten Sie, dass Sie können müssen Phing als eigenständige pacakge installieren (ich habe es in /opt/phing-2.3.3) und konfigurieren PHING_HOME in Hudson-Konfiguration, um auf dieses Verzeichnis zeigen. Sie sollten auch in der Lage sein, das PEAR-installierte Phing zu verwenden; Ich habe das jedoch nicht getestet.
  2. Konfigurieren Sie Hudson, um Ihr Projekt mit Phing zu erstellen.
  3. Konfigurieren Sie Hudson, um JUnit-Tests von Ihrem Projekt zu sammeln. Der Name unserer Ergebnisdatei lautet test-results.xml. Im obigen Beispiel würden Sie es so konfigurieren, dass Dateien von reports/* .xml gesammelt werden.

Schritt 3: Build!

Das sollte es tun. Versuchen Sie jetzt, Ihr Projekt zu erstellen. Hoffentlich wird es die Ergebnisse sammeln.

Siehe auch Phing presentation, oder dieses Phing presentation für mehr auf Phing und (in geringerem Maße) PHPUnit Integration.

Viel Glück!

+0

Danke für die Antwort! Ich hatte gehofft, es mit Ameisen zu tun, da Phing nicht installiert ist, aber ich werde dies versuchen und berichten. – mrooney

+0

Leider funktioniert das nicht. Ich habe es mit Phing arbeiten und es gibt die Xml-Dateien, wo ich erwarte, obwohl der JUnit-Publisher beschwert "Keiner der Testberichte enthalten Ergebnis" genau wie zuvor, obwohl es auf das neue Verzeichnis zeigt. Irgendwelche Ideen? – mrooney

+0

Hmmm ... das ist seltsam. Dies funktionierte definitiv für mich - neueste Version aller beteiligten Produkte. Enthält die resultierende XML-Datei tatsächlich (gültige) Testergebnisse? Haben Sie den Verzeichnispfad überprüft? Einige Pfade in Hudson scheinen relativ zum Arbeitsbereich root zu sein, einige zum Projekt root. –

0

Die Antwort oben ist gültig, aber einfacher, ohne Ihren Build-Prozess zu ändern:

2

Das Format der von PHPUnit is not (currently) compatible with Hudson ausgegebenen XML, weil es nicht ganz dasselbe ist wie das von anderen ähnlichen Tools generierte XML. Deshalb erhalten Sie die Meldung "Keine der Testberichte enthalten ein Ergebnis".

Kurzum, PHPUnit zu reparieren, um "besseres" XML zu generieren oder Hudson zu verbessern, um flexibler zu sein, was es akzeptiert, ist die einzige Lösung, das XML durch Eliminieren der Verschachtelung <testuite> Elemente zu beheben. Ich habe used sed to alter the PHPUnit XML so, dass es akzeptabel zu Hudson ist:

# 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

Danke Dan. Ich habe auf Ihren Blogeintrag geantwortet, der für mich nicht zu funktionieren scheint, weil ich mehr als 2 Ebenen verschachtelter Testsuite-Tags habe. Irgendwelche anderen Tipps? Hoffentlich kommt irgendwann jemand mit einem phunit plugin. – mrooney

5

Sie können auch diese XSLT-Datei verwenden phpunit xml hudson/junit xml zu konvertieren:

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

Dieser arbeitete für mich, danke. – Trey

2

die XSLT-Transformation aus der früheren Post funktioniert nicht für mich. Nach dem Anwenden dieser Transformation wird die DOM-Struktur des Berichts nicht geändert. Ich habe es geändert, um das Problem zu beheben. Meine Variante ist:

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

es funktioniert für mich.

0

Ich glaube, die xslt muss möglicherweise je nach phpunit Version variiert werden. Zum Beispiel funktionierte das Style-Sheet von hoschi gut mit phpunit Version 3.3.17

Aber es ist durchaus möglich, dass phpunit aktualisiert wurde, um ein anderes Format in neueren Versionen zu emittieren, oder Sir-Vestnik könnte ein älteres laufen Ausführung.

7

Mit der letzten Antwort aus dem Jahr 2009 und mehr a lot of people migrating from Hudson to Jenkins jetzt due to Oracle betrachten mit der Jenkins Vorlage für PHP, bietet eine kostenlose und bequeme Vorlage für alle Ihre Konfigurationsanforderungen von PHPQATools, wie pdepend, phpmd, phpcs und phpunit in einem conve nient Vorlage.

Es gibt auch die IRC channel #jenkins-php on Freenode für die Unterstützung.

Verwandte Themen