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

Phpunit 使用xdebug以外的其他代码覆盖率驱动程序,phpunit,xdebug,pcov,Phpunit,Xdebug,Pcov,我想使用而不是生成代码覆盖率 我正在使用Docker,我已经安装了xdebug 如果我运行以下命令,是否可以确保xdebug不会影响测试执行 php-d xdebug.default_enable=0-d pcov.enabled=1 path/to/phpunit——覆盖率文本 我读过,但据我所知,xdebug必须被禁用 是否最好执行以下操作以实现最快的覆盖率,而不是运行上述命令 删除/截断xdebug配置 运行测试 php -d pcov.enabled=1 path/to/phpunit

我想使用而不是生成代码覆盖率

我正在使用Docker,我已经安装了xdebug

如果我运行以下命令,是否可以确保xdebug不会影响测试执行

php-d xdebug.default_enable=0-d pcov.enabled=1 path/to/phpunit——覆盖率文本
我读过,但据我所知,xdebug必须被禁用

是否最好执行以下操作以实现最快的覆盖率,而不是运行上述命令

  • 删除/截断xdebug配置
  • 运行测试

    php -d pcov.enabled=1 path/to/phpunit --coverage-text
    
  • 恢复xdebug配置


  • 即使在以下情况下禁用xdebug,也会降低性能成本:

    xdebug.default_enable=0
    
    其影响不容忽视

    在运行测试之前,最好完全禁用
    xdebug
    扩展


    如果您使用
    pcov
    生成代码覆盖率,这将为您提供最佳性能。

    Xdebug和pcov都会使引擎的相同部分过载,因此它们不兼容,作者试图使它们兼容是没有意义的

    如果要使用PCOV作为php代码覆盖率的驱动程序,则不得加载Xdebug

    资料来源:我写了pcov

    是否最好执行以下操作以实现最快的覆盖率,而不是运行上述命令?[禁用/启用xdebug/pcov而不是加载它们]

    当您在命令行上运行php时,不需要处理调用phpunit的ini文件

    相反,您可以使用命令行参数显式地进行运行时配置,这通常提供了一种有趣的效果

    它与
    -n
    开关一起工作,即禁用所有配置文件(有关用法信息,请参阅
    php--help
    ):

    其中,
    […]
    代表特定于用例的参数,通常和特定于phpunit:

    php -n <php-file> [<php-file-argument>...]
    
           `------------ [...] --------------´ 
    
    
    php -n path/to/phpunit --coverage-text
    
           `--------- [...] -------------´
    
    然后,您的测试套件很可能还会测试需要扩展的代码路径。调用phpunit将在失败中突出显示这些。因此,您必须添加它们(例如,此处为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
    和代码覆盖率的情况下创建的。为清晰起见,输出示例已缩短。

    重新加载php服务是什么意思?使用
    cli
    sapi执行命令时,不使用
    fpm
    sapi或
    php-fpm
    服务。命令
    php/phpunit
    不使用任何服务,只使用
    php
    可执行文件。这个答案是正确的,但我想提供一个权威的答案,这样以后的读者就不会感到困惑了。。。您希望我编辑您的答案吗?
    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]
    
    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]