2

是否可以在运行时处理的 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 上的工具尽可能基本,以方便开发人员快速运行它们,否则他们将忽略该步骤。

4

1 回答 1

2

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

phpunitubuntu.xml

phpunitmacosx.xml

ETC...

但我认为你的问题是有这么多不同的配置,这样做会需要大量的维护,所以我首先要做的是用我想要的设置构建一个对象。将基础 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 设置教程。

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

于 2013-02-18T07:05:08.140 回答