15

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

我的 phpunit 在 Hudson 中使用 ant 运行良好,并且 --log-xml 将 phpunit.xml 放入该构建的相应 builds/ 文件夹中。但是我不知道如何让它显示在构建中,以便我们可以看到运行的测试以及失败的测试(如果有的话)。

在我弄清楚之后,接下来将是获得覆盖率、指标和 api :)

对于在 HTML 上生成它的任何东西来说,它似乎应该是微不足道的,例如告诉哈德森“对于这个项目,为每个构建显示一个到 'API' 的链接并链接到 builds/$BUILDNUM/api/index.html”。

4

9 回答 9

24

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

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

于 2009-09-25T21:21:47.240 回答
7

最后一个答案是从 2009 年开始,由于 Oracle ,现在很多人从 Hudson 迁移到 Jenkins,考虑使用Jenkins Template for PHP ,为您的PHPQATools的所有配置需求提供免费且方便的模板,例如 pdepend、phpmd、phpcs和 phpunit 在一个方便的模板中。

Freenode 上还有IRC 频道 #jenkins-php 以获取支持。

于 2011-03-19T09:54:51.673 回答
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>
于 2009-06-20T10:29:26.690 回答
4

我通常使用 CruiseControl 进行 PHP 测试(使用 CC 的Phing支持,而不是 phpundercontrol)。我只与 Hudson 合作过一点点,但已经让 Hudson 使用 phing 的 phpunit 支持成功地记录了 phpunit 测试。

以下说明假设您将使用 Phing(而不是 Ant)来管理您的 PHP 项目构建,并且您已安装必要的先决条件。它还假设您安装了 PHPUnit 3(尽管 PHPUnit 2.x 也应该可以工作)。

第 1 步:为 Phing/PHPUnit 设置项目

首先,您需要确保您的项目可以使用 Phing 进行测试。这是一个运行单元测试并创建与 JUnit 兼容的 XML 输出的示例 Phing build.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 作为独立包安装(我将其放在 /opt/phing-2.3.3 中)并在 Hudson 配置中配置 PHING_HOME 以指向该目录。您还应该能够使用 PEAR 安装的 Phing;但是,我还没有测试过。
  2. 配置 Hudson 以使用 Phing 构建您的项目。
  3. 配置 Hudson 以从您的项目中收集 JUnit 测试。我们的结果文件的名称是 test-results.xml。在上面的示例中,您将其配置为从报告/*.xml 收集文件。

第 3 步:构建!

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

另请参阅此Phing 演示文稿,或此Phing 演示文稿以了解有关 Phing 和(在较小程度上)PHPUnit 集成的更多信息。

祝你好运!

于 2009-02-06T14:55:45.870 回答
2

PHPUnit 发出的 XML 格式(当前)与 Hudson 不兼容,因为它与其他类似工具生成的 XML 不太一样。这就是您收到“没有任何测试报告包含任何结果”消息的原因。

没有修复 PHPUnit 以生成“更好”的 XML 或改进 Hudson 使其在接受的内容方面更灵活,唯一的解决方案是通过消除 <testuite> 元素的嵌套来修复 XML。我使用 sed 来更改 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
于 2009-03-29T11:57:33.813 回答
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>

这个对我有用。

于 2009-06-25T11:19:47.163 回答
2

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

与 Hudson 的 PHP 持续集成

于 2009-11-05T19:47:13.500 回答
0

上面的答案是有效的,但更简单,不改变你的构建过程:

于 2009-03-14T20:44:03.517 回答
0

我相信 xslt 可能必须根据使用的 phpunit 版本而有所不同。例如,hoschi 发布的样式表对我来说效果很好,使用 phpunit 版本 3.3.17

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

于 2009-06-30T21:30:41.647 回答