我应该在暂存/生产环境中使用PHPUnit吗?

时间:2012-06-18 07:31:47

标签: php phpunit

我已经安装了PHPUnit框架来执行单元测试。我编写了测试用例,并使用现有的PHPUnit库进行测试。

是否有必要在登台和生产环境中配置PHPUnit框架?如果是这样,phpunit测试框架和相关文件在分段和生产中占用了内存,这是不必要的。

在本地环境中使用PHPUnit测试框架是否足够?

3 个答案:

答案 0 :(得分:5)

如果您将单元测试保存在他们自己的顶级子目录中(例如,请参阅How do you manage the unit test files in projects? do you add them in git?),那么您只需在git结帐后删除tests目录。或者如果使用ftp,则ftp除了那个之外的所有其他目录。或者如果使用rsync,则--exclude=tests/

但是,我发现我不同意到目前为止回复的其他人。为了安心,在登台和生产服务器上运行单元测试非常有用。如果测试在您的开发服务器上传递但在暂存或生产时失败,则会出现大红旗。最好让您的单元测试告诉您,您对实时服务器的依赖性是一个不同的版本,而不是让您的客户为您发现它!

然而,这需要小心。如果您的任何单元测试不是自包含的,则不得运行它们。显而易见的情况是,如果他们使用数据库,并且单元测试不是通过创建该数据库(具有永远不会与生产数据库冲突的名称)开始,而是通过删除它来完成。另一种情况是直接或间接导致磁盘文件更新的任何测试。特别想想任何记录功能。您应该注意的另一种类型的测试是那些需要很长时间才能完成,或者使用大量CPU或内存的测试。确保在生产服务器处于活动状态并且遇到负载时,它们永远不会运行。

制作phpunit.xml.dist副本的一个想法是明确列出那些安全且没有副作用的测试。然后使用phpunit --configuration production_tests.xml运行它。或者,在测试中,使用@group标记安全或不安全的测试函数,然后使用phpunit --group safe_for_productionphpunit --exclude-group modifies_db

答案 1 :(得分:1)

我认为理想的情况是你有3个级别:开发,升级和生产。

开发是你保存phpunit和调试器的地方,但是这台机器可能与生产完全不同。在这里,您可以在Windows上进行开发,例如,即使您要在ubuntu上部署

登台机器还可以保留phpunit和调试器,但如果与服务器不相同,它必须具有非常接近的体系结构,并且可能访问真实数据库的副本。它必须具有相同的linux风格,与生产服务器相同的apache / php / mysql /库版本。访问实际数据有时也会产生影响。

生产机器不应该有phpunit或调试工具。那个人甚至不应该作为开发人员在你的控制之下。也许首席开发人员和系统管理员在那里部署代码并根据需要对应用程序进行微调,并准备回滚或其他突发事件。

答案 2 :(得分:0)

没有。正如GordonM所说,这样做对安全性有害。此外,您应该在将其放入生产环境之前对其进行测试,以便为什么要这样做。一些调试工具(特别是PHPUnit,但其他一些调试工具)也会降低应用程序的效率。