在不需要代码覆盖时加速PHPUnit启动

时间:2015-09-01 09:01:47

标签: phpunit code-coverage codeception

我在我的Codeception单元测试中使用PHPUnit。我对代码覆盖不感兴趣,所以我想完全禁用它,特别是因为它将我的测试延迟了8..12秒。当测试配置为在文件更改时自动运行时,这会变得很烦人。

我调试了PHPUnit代码,看看为什么它启动这么久,发现它在getCodeCoverageFilter内循环getBlacklistedDirectories并收集调用addDirectoryToBlacklist的文件名时花费最多12秒。< / p>

有没有办法在Codeception或PHPUnit中禁用处理getCodeCoverageFilter而不直接破解其代码?

这是我目前在Laravel 5项目根目录下的phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./tests/</directory>
        </testsuite>
    </testsuites>
    <filter>
        <blacklist>
            <directory>./vendor/</directory>
            <directory>./database/</directory>
            <directory>./public/</directory>     
            <directory>./resources/</directory>
            <directory>./storage/</directory>
            <directory>./tests/</directory>
        </blacklist>
        <whitelist>
            <directory suffix=".php">app/</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>
</phpunit>

2 个答案:

答案 0 :(得分:1)

只需删除

行即可
<log type="coverage-html" target="coverage"/>
来自phpunit.xml

实际上,我使用了两个xml文件。

在远程代码检查服务上使用的一个标准phpunit.xml,以及我在没有代码覆盖的情况下专门命名为phpunit_no_code_coverage.xml的标准,我在开发时使用本地。

您可以通过phpunit的c标志指定要使用的xml文件,例如:

./phpunit -c tests/phpunit_no_code_coverage.xml --testsuite suite_name

结果相当巨大,我的测试套件现在运行得相当快,平均需要大约15秒,而之前需要110秒。

答案 1 :(得分:0)

根据codeception documentationcodeception.yml启用了代码覆盖率。尝试:

coverage:
    enabled: false

或删除密钥。