我已经安装了 PHPUnit 框架来执行单元测试。我已经编写了测试用例,并且还使用了现有的 PHPUnit 库进行测试。
staging 和 production 环境中是否需要配置 PHPUnit 框架?如果是这样,phpunit 测试框架和相关文件在暂存和生产中占用了内存,这是不必要的。
在本地环境中使用 PHPUnit 测试框架是否足够?
如果您将单元测试保存在它们自己的顶级子目录中(例如,请参阅如何管理项目中的单元测试文件?您是否将它们添加到 git 中?tests
)然后您可以在 git checkout 后简单地删除该目录。或者,如果使用 ftp,则 ftp 除该目录之外的所有其他目录。或者,如果使用 rsync,则--exclude=tests/
.
但是,我发现我不同意迄今为止回答的其他人。为了高枕无忧,在登台和生产服务器上运行单元测试非常有用。如果测试在您的开发服务器上通过,但在登台或生产中失败,您就会收到一个大红旗。最好让您的单元测试告诉您您对实时服务器的依赖项之一是不同的版本,而不是让您的客户为您发现它!
但是,这需要小心。如果您的任何单元测试不是独立的,则不得运行它们。显而易见的情况是,如果他们使用数据库,并且单元测试不是从创建该数据库开始(其名称永远不会与生产数据库冲突)并通过删除它来完成。另一种情况是任何直接或间接导致磁盘文件更新的测试。尤其要考虑任何进行日志记录的功能。您应该注意的另一种类型的测试是那些需要很长时间才能完成或使用大量 CPU 或内存的测试。确保在生产服务器处于活动状态并承受负载时永远不会运行这些。
制作副本的一个想法phpunit.xml.dist
是明确列出那些安全且没有副作用的测试。然后用phpunit --configuration production_tests.xml
. 或者,在测试中,@group
用来标记安全或不安全的测试功能,然后像phpunit --group safe_for_production
或phpunit --exclude-group modifies_db
我想理想的场景是你有 3 个级别:开发、登台和生产。
开发是您保留 phpunit 和调试器的地方,但是这台机器可能与生产完全不同。例如,在这里您可以在 Windows 上进行开发,即使您要在 ubuntu 上进行部署
登台机器也可以保留 phpunit 和调试器,但如果与服务器不同,它必须具有非常接近的架构,并且可能访问真实数据库的副本。它必须具有与生产服务器相同的 linux 风格、相同版本的 apache/php/mysql/libraries。访问真实数据有时也会产生影响。
生产机器不应该有 phpunit 或调试器工具。那个甚至不应该在你作为开发人员的控制之下。也许首席开发人员和系统管理员正在那里部署代码并根据需要微调应用程序,并准备回滚或其他突发事件。
不,正如 GordonM 所说,这样做对安全性不利。此外,您应该在将其放入生产环境之前对其进行测试,所以您为什么要这样做。一些调试工具(不是专门的 PHPUnit,而是其他一些工具)也会降低应用程序的效率。