Clover XML 报告 - 类和特征覆盖率公式

Posted

技术标签:

【中文标题】Clover XML 报告 - 类和特征覆盖率公式【英文标题】:Clover XML Report - Classes and Trait coverage formula 【发布时间】:2021-02-24 23:47:28 【问题描述】:

我正在开发一个自定义应用程序来解析clover.xml 报告。 只是想知道是否有人知道获得Classes and Traits 总覆盖率百分比的正确公式。

这是我找到的 LinesFunctions&Methods 覆盖率的公式:

// TPC = (coveredconditionals + coveredstatements + coveredmethods) / (conditionals + statements + methods)
phpMetric.project = (((phpMetric.coveredconditionals + phpMetric.coveredstatements + phpMetric.coveredmethods) / (phpMetric.conditionals + phpMetric.statements + phpMetric.methods))) * 100;
// Lines coverage formula - LTPC = (coveredstatements / statements) * 100
phpMetric.lines =  ((phpMetric.coveredstatements / phpMetric.statements)* 100);
// Functions and Methods coverage formula - FMTPC = (coveredmethods / methods) * 100
phpMetric.functions =  ((phpMetric.coveredmethods / phpMetric.methods)* 100);

这是来自 clover.xml 的 metrics

<metrics files="10070" loc="1354443" ncloc="1110810" classes="8575" methods="46082" coveredmethods="31707" conditionals="0" coveredconditionals="0" statements="561696" coveredstatements="371009" elements="607778" coveredelements="402716"/>

更新: 我想从报告中提取的信息是列Classes and Traits,即总覆盖率%。

谢谢!

【问题讨论】:

你到底想从 xml 中提取什么? @JackFleeting - 我正在尝试提取每个覆盖类别的整体覆盖数据,例如:行覆盖、函数和方法覆盖以及类和特征。对于行和函数/方法,我已经从 xml 中获取了数据,但对于类覆盖率我没有。 恐怕还不清楚,因为我不知道这些东西是什么。关注 xml:你有一个名为 &lt;metrics&gt; 的元素,它具有多个属性(fileslocncloc 等),每个属性都有一个属性值(1007013544431110810,分别等)。为了创建报告,您需要具体提取其中哪些? 是的,这就是我要找的。例如:在元素 metrics 中,我们有方法信息:methods="46117" coveredmethods="31733" - 我如何提取总覆盖率:TCP = (coveredmethods / methods) * 100。不幸的是,我没有将coveredClasses 标识到元素metrics 中。不确定如何/在哪里是被覆盖的类元素或其他东西。该元素的值是classes="8579",但不是coveredClasses。谢谢@JackFleeting 【参考方案1】:

我对三叶草一无所知,但是-如果我理解正确-您可以使用 php(在您的问题中标记)执行以下操作。显然,您可以根据需要对其进行修改:

$cloverstr = <<<SOMEXML
<root>
   <metrics files="10070" loc="1354443" ncloc="1110810" classes="8575" methods="46082" coveredmethods="31707" conditionals="0" coveredconditionals="0" statements="561696" coveredstatements="371009" elements="607778" coveredelements="402716" />
</root>    
SOMEXML;
$xml  = simplexml_load_string ($cloverstr);

$coveredmethods = $xml->xpath("//metrics/@coveredmethods");
$methods = $xml->xpath("//metrics/@methods");

$coveredstatements = $xml->xpath("//metrics/@coveredstatements");
$statements = $xml->xpath("//metrics/@statements");

$coveredelements = $xml->xpath("//metrics/@coveredelements");
$elements = $xml->xpath("//metrics/@elements");

$TCP = ($coveredmethods[0] / $methods[0]) * 100;
$LTPC = ($coveredstatements[0] / $statements[0]) * 100;
$XYZ = ($coveredelements[0] / $elements[0]) * 100;

echo ("TCP: " . $TCP . ' </br> ');
echo ("LTPC: " . $LTPC . ' </br> ');
echo ("XYZ: " . $XYZ);

输出:

TCP: 68.805607395512 
 LTPC: 66.0515652595 
 XYZ: 66.260377966955 

【讨论】:

以上是关于Clover XML 报告 - 类和特征覆盖率公式的主要内容,如果未能解决你的问题,请参考以下文章

以 Clover XML 格式生成代码覆盖率报告 ... PHP 致命错误:无法声明类 ...,因为名称已在

php CLI上简单漂亮的打印覆盖检查器。从终端中phpunit的coverage-clover xml文件打印指标。可用于整合机智

使用 Cobertura 从代码覆盖中排除方法

如何为单个包生成覆盖率 xml 报告?

如何在 React 项目中获取覆盖率报告为 jacocoTestReport.xml

Sonarqube:为多模块导入 Jacoco xml 报告