我正在开展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
答案 0 :(得分:1)
您可以使用phpunit.xml
中的某些配置过滤将包含在coverage报告中的文件。例如,您不需要涵盖框架或其他第三方依赖项。
您可以将要包含的文件包括(白名单)或排除(列入黑名单)您不想要的文件。
开始只包含一些文件,看它是否有所作为。
复制<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输出。