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