Laravel代码覆盖率非常慢

时间:2015-02-17 15:24:38

标签: php laravel phpunit

我正在开展laravel项目,该项目只有8000多行代码和550个单元测试,覆盖率约为75%。运行代码覆盖率报告需要35分钟,这使得无法与持续集成环境集成。 phpunit花费这么长时间为这个大小的项目生成覆盖率报告是否正常?有谁知道如何提高运行覆盖率报告的速度?我查看了其他question和此article,但都没有证明有用。增加php脚本的最大内存限制也没有效果。

我的环境是: OSX 10.9.5, xDebug 2.2.7, PHP 5.6.5, PHPUnit 4.1.6

2 个答案:

答案 0 :(得分:1)

您可以使用phpunit.xml中的某些配置过滤将包含在coverage报告中的文件。例如,您不需要涵盖框架或其他第三方依赖项。

您可以将要包含的文件包括(白名单)或排除(列入黑名单)您不想要的文件。

开始只包含一些文件,看它是否有所作为。

PHPUnit docs

复制
<filter>      
  <whitelist processUncoveredFilesFromWhitelist="true">
    <directory suffix=".php">/path/to/files</directory>
     <file>/path/to/file</file>
    <exclude>
      <directory suffix=".php">/path/to/files</directory>
      <file>/path/to/file</file>
    </exclude>
  </whitelist>
</filter>

答案 1 :(得分:1)

当PHPUnit似乎需要很长时间时,我通常会发现问题是它试图通过太多代码执行覆盖。如果它完成了,你可能会发现你也在供应商目录中的所有库上获得了数字。

在phpunit.xml文件中,我倾向于使用完整的过滤器,以确保只运行我的主要源代码(在类中),并在其上收集代码覆盖率。这是我的基于Symfony2的项目,具有嵌入式资源。

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
<filter>
    <blacklist>
        <directory>./vendor/</directory>
        <!-- and other directories,  -->
    </blacklist>

    <whitelist>
        <directory>./app</directory>
        <directory>./src</directory>
        <exclude>
            <directory>./app/cache/</directory>
            <directory>./src/*/*Bundle/Resources</directory>
            <directory>./src/*/*Bundle/Tests</directory>
            <directory>./vendor/</directory>
        </exclude>
    </whitelist>
</filter>

在某种程度上,通过这种设置,对于125个src /文件和8,800个非注释代码行,我需要大约40秒来运行我的160个测试子集 - 440个断言,并生成HTML输出。