微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法让 PCOV 使用 Xampp 在 Windows 上进行手动测试

如何解决无法让 PCOV 使用 Xampp 在 Windows 上进行手动测试

我正在尝试让 PCOV 与运行在 PHP 7.4.13 上的 PHP 应用程序 (Drupal) 一起使用,该应用程序在带有 XAMPP 的 Windows 机器上运行。

我从 https://windows.php.net/downloads/pecl/releases/pcov/1.0.9/php_pcov-1.0.9-7.4-ts-vc15-x64.zip 安装了 PCOV 1.0.9 线程安全版本,并将 PHP_pcov.dll 复制到 xampp 下的 PHP/ext 文件夹并在 PHP.ini 中启用它。我在 PHP.ini 中有以下配置

extension=pcov
pcov.enabled = 1
pcov.directory = "<full_local_path_to_web>\web\modules\custom"

我的 index.PHP 中有以下代码

use SebastianBergmann\CodeCoverage\Filter;
use SebastianBergmann\CodeCoverage\Driver\Selector;
use SebastianBergmann\CodeCoverage\CodeCoverage;
use SebastianBergmann\CodeCoverage\Driver\PHPdbgDriver;

use SebastianBergmann\CodeCoverage\Report\Html\Facade as HtmlReport;

$autoloader = require_once 'autoload.PHP';

$current_dir = __DIR__;

$filter = new Filter;
$filter->includeDirectory('./modules/custom/*');
$selector = new Selector();

$coverage = new CodeCoverage(
    $selector->forLineCoverage($filter),$filter
);

$test_name = preg_replace("/[^A-Za-z0-9]/",'-',$_SERVER['REQUEST_URI']);
$coverage->start($test_name);

function end_coverage()
{
    global $test_name;
    global $coverage;
    global $filter;
    global $current_dir;
    $coverageName = $current_dir . '/sites/default/files/private/code_coverage/coverage-' . $test_name . '-' . microtime(true);
    
    try
    {
        $coverage->stop();
        $writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade; 
        $writer->process($coverage,$current_dir . '/report/');
        $writer = new SebastianBergmann\CodeCoverage\Report\PHP();
        $coverageName =  $current_dir . '/sites/default/files/private/code_coverage/coverage-'. $test_name . '-' . microtime(true);
        $writer->process($coverage,$coverageName . '.PHP');
    }
    catch (Exception $ex)
    {
        file_put_contents($coverageName . '.ex',$ex);
    }
}

register_shutdown_function('end_coverage');

我看到 Facade PHP 文件是在相应的文件夹中创建的,但是当我尝试使用以下代码创建组合报告时,我看到 0 代码覆盖率,当我查看源视图时,所有行都出现了执行。

<?PHP
include_once("autoload.PHP");
$coverages = glob("sites/default/files/private/code_coverage/*.PHP");

use SebastianBergmann\CodeCoverage\Filter;
use SebastianBergmann\CodeCoverage\Driver\Selector;
use SebastianBergmann\CodeCoverage\CodeCoverage;
use SebastianBergmann\CodeCoverage\Driver\PHPdbgDriver;

use SebastianBergmann\CodeCoverage\Report\Html\Facade as HtmlReport;

#increase the memory in multiples of 128M in case of memory error
ini_set('memory_limit','1800M');

$filter = new Filter;
$filter->includeDirectory('./modules/custom/*');
$selector = new Selector();

$coverage = new CodeCoverage(
    $selector->forLineCoverage($filter),$filter
);

$final_coverage = $coverage;

$count = count($coverages);
$i = 0;
foreach ($coverages as $coverage_file)
{
    $i++;
    echo "Processing coverage ($i/$count) from $coverage_file<br>". PHP_EOL;
    require_once($coverage_file);
    $final_coverage->merge($coverage);
}

echo "Generating final report...<br>" . PHP_EOL;
$report = new \SebastianBergmann\CodeCoverage\Report\Html\Facade;
$report->process($final_coverage,"sites/default/files/private/code_coverage_reports");
echo "Report generated succesfully<br>". PHP_EOL;

为什么 PCOV 报告代码覆盖率为 0? PCOV 工作正常吗?还是我必须做更多的事情才能通过手动测试启用代码覆盖率测试?预先感谢您的意见。

方法基于这篇文章 - https://tarunlalwani.com/post/php-code-coverage-web-selenium/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。