在不同的操作系统上运行 PHPUnit,XML 配置文件不同

Posted

技术标签:

【中文标题】在不同的操作系统上运行 PHPUnit,XML 配置文件不同【英文标题】:Running PHPUnit on Different OS's with differences in XML configuration file 【发布时间】:2012-10-12 17:22:58 【问题描述】:

是否可以在运行时处理的 phpUnit XML 文件中存在配置差异,以便根据执行平台配置设置?例如,在 Ubuntu 上使用 Color,但在 Windows 中不行。

解释一下:

我正在使用不同的开发平台,并希望确保我们的代码适用于任一平台上的 Web 服务器。此外,我们使用的工具位于不同的平台上。例如,开发人员的内部后端服务器(PHPUnit、PHPDocs、Wiki、其他工具)位于 Ubuntu 计算机上。开发人员积极使用基于 Windows 的 PC。

当开发人员更改代码时,我们希望他们能够在将代码签入我们的存储库之前测试其代码是否有效。因此,他们在本地机器上运行 PHPUnit、PHP_CodeSniffer、PHPMD 和 PHPDocs 以查看是否可以提交。

然后,主系统将看到已提交的代码,并将重新运行这些测试以及 Ubuntu 机器上其他所有人的代码更改,用测试结果、代码覆盖率等更新公司范围的页面......这些测试甚至可以在具有不同操作系统/语言配置的不同计算机上运行。通过 Selenium 进行的 Web 浏览器测试也从此时开始,再次跨越许多不同的 Web 服务器/操作系统/浏览器版本。

随着我们引入新工具、不同项目等...,XML 文件随着排除文件、测试套件配置等而变化...因此,我们将此文件保存在源代码树中,以确保开发人员拥有运行测试时的最新设置。

我希望能够按平台不同地配置一些设置(这适用于我们所有的组合,因为我可以设置正在使用的任何变量),而不必在源代码之后复制不同的文件以确保更改收到了。

这是合理的,还是使用 Jenkins 之类的工具可以帮助我避免这个问题?但是,我试图让 Windows PC 上的工具尽可能地基本,以方便开发人员快速运行它们,否则他们将忽略该步骤。

【问题讨论】:

【参考方案1】:

这个答案比预期的要长,但它是合适的。快速的答案是只构建不同的配置文件。 phpunitwindows7.xml

phpunitubuntu.xml

phpunitmacosx.xml

等等……

但我认为你的问题是有这么多不同的配置,这样做会需要大量维护,所以我首先要做的是使用我想要的设置构建一个对象。将基础 phpunit.xml 加载到 SimpleXML 对象中

$sxe = simplexml_load_file('phpunit.xml);
// Modify a node
$sxe->phpunit = '<tessuites....>';

// You can access an element's attribute just like this :
$attribute = $sxe->phpunit->attributes()->$att;

$sxe->phpunit->attributes()->$verbose = $phpunitSettings->verbose;

// Saving the whole modified XML to a new filename
$sxe->asXml('windows7-cookie-cutter-phpunit.xml');

每个开发人员都会根据他们的操作系统/项目等将他们的构建配置设置为适当的 phpunit 配置文件。

Jenkins 当然会帮助你做到这一点,因为你可以在你的 Ant 构建文件中运行这个脚本来在 phpunit 运行之前更新这些 phpunit 配置文件,而不是手动运行它。

您可能会做的另一件事是使用

<?php 
    header ("Content-Type:text/xml");
?>

显示这样的动态文件

<phpunit setting="<?php echo $setting; ?>"

><!-- yada yada-->
</phpunit>

动态文件仍然需要通过 php 脚本访问,但可以使用 cUrl 轻松完成以获取内容 exe:

http://yoursite.com/apps/phpunit-config.php?os=windows7&project=cookiecutterblog

此外,如果您在开发人员机器上安装了 jenkins,则可以使用 Poll SCM 将其设置为每小时/每天运行一次,因此无论他们是否想使用它都没有关系,即使他们不知道也可以使用它它!

如果你在 eclipse 中使用 MakeGood 扩展,你可以预加载脚本来更新 phpunit 配置文件。

每次编辑然后保存文件时,它都可以在 IDE 中轻松加载和运行

这是我整理的MakeGood IDE setup tutorial。

我不确定开发人员是否会更容易,因为他们根本不会做任何事情......

【讨论】:

感谢您冗长而详细的回复。我将寻求在我们的测试环境中实现类似的东西。

以上是关于在不同的操作系统上运行 PHPUnit,XML 配置文件不同的主要内容,如果未能解决你的问题,请参考以下文章

在更改时运行PHPUnit测试

我如何在超过 1 个网站上执行 phpunit 测试

phpunit --debug仍然只显示点

PHPUnit实践001--环境搭建及简单用法

PHPUnit测试失败

如何从 phpunit.xml 而不是应用程序配置文件访问环境变量