2009-02-05 81 views
15

我們正在考慮從phpundercontrol切換到Hudson(它看起來有一些非常酷的功能!),但我無法弄清楚如何讓phpunit日誌顯示出來。我該如何整合phpunit和Hudson CI?

我的phpunit在Hudson中運行良好,並且--log-xml將phpunit.xml放入適當的版本/文件夾中。但我無法弄清楚如何讓它出現在構建中,以便我們可以看到運行的測試和失敗的測試(如果有的話)。

我估計出來後,得到覆蓋,指標和API將是下一個:)

現在看來似乎應該是微不足道的事情產生了對HTML,告訴哈德森例如,「對於這個項目顯示每個構建的「API」鏈接以及建立/ $ BUILDNUM/api/index.html的鏈接。

+1

僅供參考... - 不贊成使用--log-xml標誌。改用--log-junit。 – fitzgeraldsteele 2010-09-10 15:19:58

回答

4

我通常使用CruiseControl進行PHP測試(使用CC的Phing支持,而不是phpundercontrol)。我只與Hudson合作一點,但是已經讓Hudson成功使用phing的phpunit支持來記錄phpunit測試。

以下說明假定您將使用Phing(而非Ant)來管理您的PHP項目構建,並且您已安裝必要的prereq。它還假定你已經安裝了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:設置哈德森

  1. 安裝Phing插件哈德森。請注意,您可能需要將作爲獨立軟件包安裝(我將它放在/opt/phing-2.3.3中)並在Hudson配置中將PHING_HOME配置爲指向該目錄。你也應該能夠使用PEAR安裝的Phing;不過,我還沒有測試過。
  2. 配置Hudson使用Phing構建您的項目。
  3. 配置Hudson從項目中收集JUnit測試。我們的結果文件的名稱將是test-results.xml。在上面的例子中,您將其配置爲從reports/*。xml收集文件。

第3步:建立!

應該這樣做。現在嘗試構建您的項目。希望它能收集結果。

另請參閱此Phing presentation或此Phing presentation瞭解更多有關Phing和(較小程度上)PHPUnit集成的信息。

祝你好運!上述

+0

感謝您的回答!由於沒有安裝phing,我希望能夠用螞蟻做到這一點,但我會給這個鏡頭並報告回來。 – mrooney 2009-02-06 19:08:17

+0

不幸的是,這是行不通的。雖然JUnit發行商抱怨說「沒有任何測試報告包含任何結果」,但它與之前一樣,儘管它指向新目錄,但我已使用phing工作,並且正在輸出我期望的xml文件。有任何想法嗎? – mrooney 2009-02-06 20:10:53

+0

嗯......這很奇怪。這絕對是爲我工作 - 所涉及的所有產品的最新版本。產生的XML文件是否實際包含(有效)測試結果?你有沒有仔細檢查目錄路徑? Hudson中的一些路徑似乎與工作空間的根目錄相關,有些用於投影根目錄。 – 2009-02-09 03:45:23

2

由PHPUnit is not (currently) compatible with Hudson發出的XML的格式,因爲它與其他類似工具生成的XML不完全相同。這就是爲什麼你會得到「沒有任何測試報告包含任何結果」的消息。

缺少修復PHPUnit以生成「更好」的XML或改善Hudson的靈活性,唯一的解決方案是通過消除<testuite>元素的嵌套來修復XML。我已經used sed to alter the 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

謝謝丹。我對您的博客帖子做出了迴應,這似乎並不適合我,因爲我有超過兩層的嵌套測試套件標籤。任何其他提示?希望有人會在某個時候使用phunit插件。 – mrooney 2009-04-01 22:27:47

5

,你也可以使用這個XSLT文件PHPUnit的XML轉換爲赫德森/ 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> 
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可能會運行更老的版本版。

相關問題