Php Laravel代码覆盖率非常慢

Php Laravel代码覆盖率非常慢,php,laravel,phpunit,Php,Laravel,Phpunit,我正在从事一个laravel项目,该项目有8000多行代码和550个单元测试,覆盖率约为75%。运行代码覆盖率报告需要35分钟,这使得与持续集成环境的集成变得不可能。phpunit花费这么长的时间为如此规模的项目生成覆盖率报告是正常的吗?有人知道有什么方法可以提高运行覆盖率报告的速度吗?我已经看了这一个和这一个,都没有被证明是有用的。增加php脚本的最大内存限制也没有效果 我的环境是: OSX 10.9.5, xDebug 2.2.7, PHP 5.6.5, PHPUnit 4.1.6您可以使用

我正在从事一个laravel项目,该项目有8000多行代码和550个单元测试,覆盖率约为75%。运行代码覆盖率报告需要35分钟,这使得与持续集成环境的集成变得不可能。phpunit花费这么长的时间为如此规模的项目生成覆盖率报告是正常的吗?有人知道有什么方法可以提高运行覆盖率报告的速度吗?我已经看了这一个和这一个,都没有被证明是有用的。增加php脚本的最大内存限制也没有效果

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

您可以使用
PHPUnit.xml
中的一些配置来筛选将包含在覆盖率报告中的文件。例如,您不需要涵盖框架或其他第三方依赖项

您可以这样做,包括(白名单)您想要覆盖的文件,或排除(黑名单)您不想要的文件

开始只包括一些文件,看看它是否有区别

复制自:


/路径/到/文件
/路径/到/文件
/路径/到/文件
/路径/到/文件

当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>


这对拉雷维尔很好,谢谢。实际上,我发现PHPUnit中的
addDirectoryToBlacklist
方法调用是所有其他测试中最慢的-如果我创建一个没有测试的新项目,PHPUnit会在
addDirectoryToBlacklist
循环中花费12秒来收集文件名。
<?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>