我正在使用Docker,并且已安装xdebug。
如果运行以下命令,可以确定xdebug不会影响测试执行吗?
php -d xdebug.default_enable=0 -d pcov.enabled=1 path/to/phpunit --coverage-text
我读了pcov might be faster,但据我了解,必须禁用xdebug。
是否最好执行以下操作以达到最快的覆盖范围,而不是运行上述命令?
运行测试
php -d pcov.enabled=1 path/to/phpunit --coverage-text
还原xdebug配置
答案 0 :(得分:4)
Xdebug和PCOV都使引擎的相同部分过载,因此它们不兼容,并且作者试图使它们兼容是没有道理的。
如果要使用PCOV作为php-code-coverage的驱动程序,则必须不加载Xdebug 。
来源:我写了pcov ...
答案 1 :(得分:0)
即使通过以下方式禁用xdebug,它也会降低性能:
xdebug.default_enable=0
影响不可忽略。
最好在运行测试之前完全禁用xdebug
扩展名。
如果您使用pcov
来生成代码覆盖率,这将为您带来最佳性能。
答案 2 :(得分:0)
是否最好执行以下操作来实现最快的覆盖率而不是运行上述命令? [禁用/启用 xdebug/pcov 而不是加载它们]
当您在命令行上运行 php 时,您不需要摆弄调用 phpunit 的 ini 文件。
相反,您可以使用命令行参数使运行时配置显式,这通常会提供一个有趣的效果。
它与 -n
开关配合使用,即禁用所有配置文件(有关使用信息,请参阅 php --help
):
php -n [...]
其中 [...]
代表专门用于用例的参数,一般来说,这里是 phpunit 的专用参数:
php -n <php-file> [<php-file-argument>...]
`------------ [...] --------------´
php -n path/to/phpunit --coverage-text
`--------- [...] -------------´
-n
开关/选项使运行时真正裸露,因此您可以从头开始。
首先,运行 phpunit 可能根本不起作用,并且对于某些功能(例如读取配置文件)也不起作用,因为 phpunit 需要一些 php 扩展和 -n
控制不加载任何 php 扩展(即 php只有核心扩展或那些被编译并且不能被停用的扩展)。
因此您必须添加它们,例如用于 XML 配置文件的 Dom 和用于生成 HTML 代码覆盖率报告的 Tokenizer(很快):
php -n -d extension=dom -d extension=tokenizer [...]
那么您的测试套件很可能还会测试需要扩展的代码路径。调用 phpunit 将在失败中突出显示这些。因此你必须添加它们(例如这里的 json):
php -n -d extension=dom -d extension=tokenizer -d extension=json [...]
这可能是有趣的部分,因为您了解了代码的扩展要求(至少对于单元测试而言)。
最后添加选择的覆盖扩展。我们以 pcov 为例:
php -n -d extension=dom -d extension=tokenizer -d extension=json \
-d extension=pcov -d pcov.enabled=1 [...]
然后你会得到你的结果:
PHPUnit 9.5.4 by Sebastian Bergmann and contributors.
Runtime: PHP 7.4.20 with PCOV 1.0.8
Configuration: phpunit-cfg.xml
............... 15 / 15 (100%)
Time: 00:00.191, Memory: 6.00 MB
OK (15 tests, 33 assertions)
Generating code coverage report in HTML format ... done [00:00.021]
与 xdebug 比较?为什么不:
hp -n -d extension=dom -d extension=tokenizer -d extension=json \
-d zend_extension=xdebug -d xdebug.mode=coverage [...]
^^^^^
并得到结果:
PHPUnit 9.5.4 by Sebastian Bergmann and contributors.
Runtime: PHP 7.4.20 with Xdebug 3.0.4
Configuration: phpunit-cfg.xml
............... 15 / 15 (100%)
Time: 00:00.222, Memory: 8.00 MB
OK (15 tests, 33 assertions)
Generating code coverage report in HTML format ... done [00:00.024]
暗示的 phpunit-cfg.xml
文件是在启用 phpunit --generate-configuration
和代码覆盖率的情况下创建的。为清楚起见,已缩短输出示例。