我构建了基于ChromeDriver Selenium的爬虫,当我的自动爬虫爬行应用程序时,我想测量web应用程序的代码覆盖率。
因此,我的问题是如何使用Xdebug (我在这方面比较新)来实现这个功能。我在PHP上安装了Xdebug,但不知道如何启动?有人能想到给我一个步骤,因为我没有找到任何资源来帮助我。
发布于 2021-06-04 13:30:16
我没有一个直接的例子,但我会以以下的方式来处理这个问题。代码未经测试,可能需要更改才能工作,请将此作为的起点。
在任何情况下,您都想做以下事情:
收集每个请求的代码覆盖率()
传统上,使用PHPUnit为单元测试生成代码覆盖率。PHPUnit使用一个单独的库PHP代码覆盖率来收集、合并和为每个测试收集的覆盖率生成报告。你可以单独使用这个图书馆。
为了收集数据,我将执行composer require phpunit/php-code-coverage,然后创建一个auto_prepend文件,其中包含如下内容:
<?php
require 'vendor/autoload.php';
use SebastianBergmann\CodeCoverage\Filter;
use SebastianBergmann\CodeCoverage\Driver\Selector;
use SebastianBergmann\CodeCoverage\CodeCoverage;
use SebastianBergmann\CodeCoverage\Report\Html\Facade as HtmlReport;
$filter = new Filter;
$filter->includeDirectory('/path/to/directory');
$coverage = new CodeCoverage(
(new Selector)->forLineCoverage($filter),
$filter
);
$coverage->start($_SERVER['REQUEST_URI']);
function save_coverage()
{
global $coverage;
$coverage->stop();
$data = $coverage->getData();
file_put_contents('/tmp/path/crawler/' . bin2hex(random_bytes(16)), serialize($data) . '.serialized', $data->get );
}
register_shutdown_function('save_coverage');
?>(我从php代码覆盖率README.md中的介绍中复制了其中的大部分内容)
当您现在爬过您的网站时,您应该在/tmp/path/crawler/中获得一个包含每个请求的代码覆盖范围的文件,但要确保该目录首先存在。
合并代码覆盖率
对于这个步骤,您需要编写一个脚本来加载每个生成文件(查看盖布()),并将它们合并在一起。
PHP覆盖率也有一个方法。它看起来应该是:
<?php
require 'vendor/autoload.php';
use SebastianBergmann\CodeCoverage\Filter;
use SebastianBergmann\CodeCoverage\Driver\Selector;
use SebastianBergmann\CodeCoverage\CodeCoverage;
use SebastianBergmann\CodeCoverage\Report\Html\Facade as HtmlReport;
$filter = new Filter;
$filter->includeDirectory('/path/to/directory');
$coverage = new CodeCoverage(
(new Selector)->forLineCoverage($filter),
$filter
);
foreach ( glob('/tmp/path/crawler/*.serialize') as $file)
{
$data = unserialize( file_get_contents( $file ) );
$fileCoverage = new CodeCoverage(
(new Selector)->forLineCoverage($filter),
$filter
);
$fileCoverage->setData( $data );
$coverage->merge( $fileCoverage );
}
/* now generate the report, as per the README.md again */
(new HtmlReport)->process($coverage, '/tmp/code-coverage-report');
?> 如果我有时间的话,我会拍一段视频。
https://stackoverflow.com/questions/67812731
复制相似问题