【问题标题】:phpdbg hits memory limit when mutation testing with Infection使用 Infection 进行突变测试时,phpdbg 达到内存限制
【发布时间】:2019-10-24 14:52:45
【问题描述】:

尝试使用 phpdbg 运行感染测试时,我不断收到内存耗尽错误。我试过设置-d memory_limit,但它似乎被忽略了。

以下是一些示例输出:

$ phpdbg -qrr -d memory_limit=1G vendor/bin/infection
You are running Infection with phpdbg enabled.
     ____      ____          __  _
    /  _/___  / __/__  _____/ /_(_)___  ____
    / // __ \/ /_/ _ \/ ___/ __/ / __ \/ __ \
  _/ // / / / __/  __/ /__/ /_/ / /_/ / / / /
 /___/_/ /_/_/  \___/\___/\__/_/\____/_/ /_/

Running initial test suite...

PHPUnit version: 7.5.11

    4 [============================]  1 sec

 [ERROR] Project tests must be in a passing state before running Infection.

         Infection runs the test suite in a RANDOM order. Make sure your tests do not have hidden dependencies.

         You can add these attributes to `phpunit.xml` to check it: <phpunit executionOrder="random"
         resolveDependencies="true" ...

         If you don't want to let Infection run tests in a random order, set the `executionOrder` to some value, for
         example <phpunit executionOrder="default"

         Check the executed command to identify the problem: '/usr/local/Cellar/php@7.2/7.2.18/bin/phpdbg' '-qrr'
         '~/Project/vendor/phpunit/phpunit/phpunit' '--configuration'
         '/var/folders/05/qbcbz9cn08jdty7r35dwkgdm0000gn/T/infection/phpunitConfiguration.initial.infection.xml'

         PHPUnit reported an exit code of 255.

         Refer to the PHPUnit's output below:

         STDOUT:

         PHPUnit 7.5.11 by Sebastian Bergmann and contributors.

         Random seed:   1560152243

         [PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 65536 bytes) in
         ~/Project/vendor/sebastian/exporter/src/Exporter.php on line
         219]
         [PHP Stack trace:]
         [PHP   1. {main}()
         ~/Project/vendor/phpunit/phpunit/phpunit:0]

使用我的infection.json.dist 文件:

{
    "timeout": 10,
    "source": {
        "directories": [
            "src"
        ]
    },
    "logs": {
        "text": "infection.log"
    },
    "mutators": {
        "@default": true
    }
}

【问题讨论】:

    标签: php phpunit mutation-testing phpdbg infection


    【解决方案1】:

    您希望 memory_limit=-1 在您的开发环境的 php.ini 配置文件中。

    【讨论】:

    • 这是在我们的 CI 中运行的。我已经研究过更改 ini 中的值,但希望有一种“更简单”的方法来简单地更新命令。但我认为感染在没有内存限制设置的情况下运行 phpunit 测试,因此希望在配置文件中进行设置。我猜我得更新 CI。
    【解决方案2】:

    您可以事先收集覆盖范围,然后将其提供给 Infection。

    vendor/bin/phpunit --coverage-xml=build/logs/coverage-xml \
                       --log-junit=build/logs/junit.xml
    vendor/bin/infection --coverage=build/logs --show-mutations
    

    由于您不会同时运行 Infection 和 PHPUnit,您可以完全避免内存限制问题。如果没有,运行具有更高内存限制的程序应该很容易:

    php -d memory_limit=-1 vendor/bin/...
    

    这样,您还可以在修复测试后重新运行 Infection 以查看您是否杀死了一个突变,而无需重新收集覆盖率数据。

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 2019-03-23
      • 2013-01-11
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 2016-11-23
      • 2014-02-06
      • 1970-01-01
      相关资源
      最近更新 更多