当我运行我的 PHPUnit 测试时,Xdebug 会生成一个很好的代码覆盖率报告,它可以准确地显示我在每个 PHP 文件中每行代码执行了多少次。
我想在正常使用一周的情况下为我的网站获得相同的报告,以便我可以在我的网站上找到可能不再使用的 PHP 行。它不是运行我的 PHP 代码的单元测试,而是 Web 服务器,但我应该能够获得相同的报告,对吧?
如何设置 Xdebug 以在实时站点上收集数据并生成代码覆盖率报告?
我会回答我自己的问题。Xdebug 提供了一个xdebug_start_code_coverage()
开始收集代码覆盖率信息的xdebug_get_code_coverage()
调用,以及一个检索关于哪些代码被覆盖的信息的调用。这很容易应用于单元测试,因为您通常只关心在受控情况下运行一系列测试所覆盖的代码。(打开覆盖,运行测试,然后你就得到了覆盖结果。)但是对于 Web 服务器应用程序上的任意命中,你可能需要在 preDispatch 中启动代码覆盖,然后让 postDispatch 将统计信息写入一个数据库(或以其他方式存储它们),以便稍后您可以将结果整理到报告中。这不是由 Xdebug 处理的。
Xdebug 可以收集 cachegrind 格式的分析信息,所以我会看看我是否可以使用它来帮助查找哪些代码没有被调用。