2009-02-05 37 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可能会运行更老的版本版。

相关问题