使用xdebug以外的其他代码覆盖率驱动程序

时间:2019-08-19 11:51:27

标签: phpunit xdebug pcov

我想使用pcov而不是xdebug来生成代码覆盖率。

我正在使用Docker,并且已安装xdebug。

如果运行以下命令,可以确定xdebug不会影响测试执行吗?

php -d xdebug.default_enable=0 -d pcov.enabled=1 path/to/phpunit --coverage-text

我读了pcov might be faster,但据我了解,必须禁用xdebug。

是否最好执行以下操作以达到最快的覆盖范围,而不是运行上述命令?

  1. 删除/截断xdebug配置
  2. 运行测试

    php -d pcov.enabled=1 path/to/phpunit --coverage-text
    
  3. 还原xdebug配置

3 个答案:

答案 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 和代码覆盖率的情况下创建的。为清楚起见,已缩短输出示例。