我有两个clover.db文件;这些clover.db文件是在两个不同的时间创建的;但底层(仪表化)代码根本没有变化;我只编了两次;创建了两个单独的WAR文件;并将这两个单独的WAR文件和clover.db复制到两个单独的服务器上。
对这两个已部署的服务器执行不同的测试后;并收集了clover.db *文件。
我使用mvn clover2:aggregate clover2:clover <options>
运行了maven,并为每个单独的服务器生成了两组三叶草覆盖文件。它们导致一定比例的覆盖率(在这种情况下,14%和19%)
现在,我想将这两个汇总成一个报告;但我似乎无法弄清楚如何做到这一点;我尝试的每一种方式(下面列出)我最终得到0%的覆盖率或单个服务器的覆盖率(三叶草的代码度量标准正确填写)。
以下是我尝试过的各种方法和结果:
从一台服务器复制clover.db
,从两台服务器复制clover.db*
个文件,然后运行mvn clover2:aggregate clover2:clover <options>
。这导致仅显示两个服务器之一的覆盖范围(初始clover.db
所属的那个)。
将clover.db
从两台服务器复制到一个单独的位置(将.db文件重命名为唯一的)。正在运行mvn clover2:aggregate clover2:merge <options>
。这会产生一个合并的.db文件(据我所知)。然后我将合并的.db文件用作clover.db
文件;从两台服务器复制clover.db*
个文件,然后运行mvn clover2:aggregate clover2:clover <options>
。我在pom.xml
文件中使用以下内容来指示此合并:
<cloverMergeDatabase>/tmp/clover/Merged/newMerge.db</cloverMergeDatabase>
<baseDir>/tmp/clover/Merged</baseDir>
在此之后,我将新创建的newMerge.db
复制到mvn
期待clover.db
文件的位置(并将其重命名为clover.db
,因为那是mvn
期待)。这是我运行aggregate命令的时候。这导致显示0%的覆盖率(文件生成,但绝对没有指示覆盖)。
正如您在附图中看到的那样,文件正在正确创建,它实际上并没有找到任何覆盖范围。第一张照片是我做#1:
第二个是当我做#2时:
希望我已经解释了我所面临的问题;但是,如果你认为你可以帮助但不理解我说的话,请提出问题。这让我很烦恼!
答案 0 :(得分:1)
第一点合并查找Clover数据库。然后它查找匹配数据库的覆盖文件,它将db filename与coverage文件名匹配。因此,例如,如果db名为 clover.db ,它将找到与该名称匹配的所有coverage文件,例如 clover.db * (或类似地 cloverdatabase - &gt; cloverdatabase *&lt; - coverage文件)
在第一步中,Clover最有可能找到所有覆盖文件,但从第二台服务器复制的文件与 clover.db 不匹配,因此被丢弃。 (Clover保存有关检测和测试执行会话的信息。一些元数据必须匹配)
在第二步中,当您重命名第二个数据库时,所有coverage文件都与第一个数据库匹配(因为名称冲突),然后其中一半被丢弃,因为元数据不匹配(与第一步中相同的机制)。由于您已重命名第二个数据库,Clover无法找到该数据库的任何覆盖文件。
我不能100%在这里,但仅仅重命名文件可能还不够你不能简单地重命名文件。
我建议生成具有唯一名称的数据库,例如cloverWAR1.db,cloverWAR2.db。然后运行测试,将dbs复制到报告机器以进行聚合和报告生成。您应该使用 cloverDatabase 属性like this。在测试运行时期间,您可能必须使用 initstring 属性指定db的位置。这是因为它不是默认名称,Clover无法自动找到它。