如何解决无法让 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"
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 举报,一经查实,本站将立刻删除。