我如何将phpunit与Hudson CI集成?

时间:2009-02-05 21:41:55

标签: php hudson phpunit

我们正在考虑从phpundercontrol切换到Hudson(它看起来有一些非常酷的功能!)但我无法弄清楚如何让phpunit日志显示出来。

我在php中使用ant在Hudson中运行正常,而-log-xml将phpunit.xml放在该版本的相应build /文件夹中。但是我无法弄清楚如何让它出现在构建中,以便我们可以看到运行的测试和失败的测试,如果有的话。

在我弄明白之后,接下来将获得报道,指标和api:)

似乎对于在HTML上生成它的任何内容都应该是微不足道的,告诉Hudson例如“为此项目显示每个构建的'API'链接和构建链接/ $ BUILDNUM / api / index.html ”

9 个答案:

答案 0 :(得分:24)

我安装了xUnit插件,将其指向我的日志文件(来自作业配置),它就像一个魅力。似乎不再需要任何自定义黑客攻击。

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

答案 1 :(得分:7)

最后一个答案是2009年和a lot of people migrating from Hudson to Jenkins现在due to Oracle,请考虑使用 Jenkins模板for PHP ,为您提供免费且方便的模板,满足您的所有配置需求PHPQATools,如pdepend,phpmd,phpcs和phpunit,在一个方便的模板中。

还有IRC channel #jenkins-php on Freenode支持。

答案 2 :(得分:5)

你也可以使用这个xslt文件将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>

答案 3 :(得分: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步:设置Hudson

  1. 为Hudson安装Phing插件。请注意,您可能需要将Phing作为独立的pacakge安装(我将其放在/opt/phing-2.3.3中)并在Hudson配置中配置PHING_HOME以指向该目录。您还应该能够使用PEAR安装的Phing;但是,我没有测试过。
  2. 使用Phing配置Hudson来构建项目。
  3. 配置Hudson以从项目中收集JUnit测试。结果文件的名称为test-results.xml。在上面的示例中,您将其配置为从reports / * .xml。
  4. 收集文件

    第3步:构建!

    应该这样做。立即尝试构建项目。希望它会收集结果。

    另请参阅此Phing presentation或此Phing presentation以获取有关Phing和(在较小程度上)PHPUnit集成的更多信息。

    祝你好运!

答案 4 :(得分:2)

PHPUnit is not (currently) compatible with Hudson发出的XML格式,因为它与其他类似工具生成的XML不完全相同。这就是为什么你得到“没有任何测试报告包含任何结果”的消息。

缺少修复PHPUnit以生成“更好”的XML或改进Hudson在其接受的内容中更灵活,唯一的解决方案是通过消除&lt; testuite&gt;的嵌套来修复XML。元素。我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

答案 5 :(得分: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>

它对我有用。

答案 6 :(得分:2)

如果您想要一个关于将PHP与Hudson集成的完整教程,您可以查看以下链接:

Continuous Integration for PHP with Hudson

答案 7 :(得分:0)

上面的答案有效,但更简单,无需更改构建过程:

答案 8 :(得分:0)

我认为xslt可能必须根据使用的phpunit版本而变化。例如,使用phpunit版本3.3.17

,由hoschi发布的样式表对我来说效果很好

但完全有可能phpunit升级为在较新版本中发出不同的格式,或者sir-vestnik可能正在运行旧版本。