在运行时处理的 PHPUnit XML 文件中是否可能存在配置差异,以便根据执行平台配置设置?例如,在 Ubuntu 上使用 Color,但在 Windows 中则不行。
解释一下:
我使用了不同的开发平台,并且希望确保我们的代码适用于任一平台上的 Web 服务器。此外,我们使用的工具位于不同的平台上。例如,开发人员的内部后端服务器(PHPUnit、PHPDocs、Wiki、其他工具)位于 Ubuntu 计算机上。开发人员积极使用基于 Windows 的 PC。
当开发人员更改代码时,我们希望他们能够在将代码 checkin 我们的存储库之前测试其代码是否有效。因此,他们在本地计算机上运行 PHPUnit、PHP_CodeSniffer、PHPMD 和 PHPDocs,以查看是否可以提交。
然后,主系统将看到提交的代码,并将结合 Ubuntu 计算机上其他人的代码更改重新运行这些测试,更新公司范围内的测试结果、代码覆盖率等页面...这些测试甚至可以在具有不同操作系统/语言配置的不同计算机上运行。此时也开始通过 Selenium 进行 Web 浏览器测试,同样,跨许多不同的 Web 服务器/操作系统/浏览器版本。
随着我们引入新工具、不同的项目等...,XML 文件会随着排除文件、测试套件配置等而发生变化...因此,我们将此文件保留在源代码树中,以确保开发人员拥有运行测试时的最新设置。
我希望能够按平台不同地配置一些设置(这适用于我们的所有组合,因为我可以设置正在使用的任何变量),而不必在源之后复制不同的文件以确保更改已收到。
这合理吗?或者使用 Jenkins 之类的东西可以帮助我避免这个问题吗?不过,我试图让 Windows PC 上的工具尽可能基本,以便于开发人员快速运行它们,否则他们会忽略该步骤。
最佳答案
这个答案比预期的要长,但很合适。快速的答案是构建不同的配置文件。 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我把它们放在一起。
我不确定开发人员是否会更容易,因为他们根本不会做任何事情......
关于xml - 在 XML 配置文件存在差异的不同操作系统上运行 PHPUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019249/