我们使用构建链设置了 TeamCity 构建,因此我们的单元测试和集成测试可以在提交触发时并行运行:
- 构建链 - 依赖于:
- 单元测试
- 集成测试
我正在寻找一种方法,我们可以组合/合并构建链中单元和集成测试生成的覆盖率数据,以便我们可以更好地了解两者组合覆盖了多少实际代码。
然后计划是能够监控已提交代码覆盖率的变化,如果百分比下降,可能会导致构建失败!
我们使用构建链设置了 TeamCity 构建,因此我们的单元测试和集成测试可以在提交触发时并行运行:
我正在寻找一种方法,我们可以组合/合并构建链中单元和集成测试生成的覆盖率数据,以便我们可以更好地了解两者组合覆盖了多少实际代码。
然后计划是能够监控已提交代码覆盖率的变化,如果百分比下降,可能会导致构建失败!
我已经设置了“构建链”目标,以便单元和集成目标中的覆盖文件(*.em、*.ec)可供它使用。
我专门为构建链目标创建了一个 ant 构建文件(在 emma doco 的帮助下!):
<project name="coverage-merge" basedir="." default="all">
<!-- directory that contains emma.jar and emma_ant.jar: -->
<property name="emma.dir" value="${basedir}/lib"/>
<property name="coverage.dir" location="${basedir}/coverage"/>
<path id="emma.lib">
<pathelement location="${emma.dir}/emma-teamcity-3.1.1.jar"/>
<pathelement location="${emma.dir}/emma_ant-2.0.5312.jar"/>
</path>
<taskdef resource="emma_ant.properties" classpathref="emma.lib"/>
<target name="all" depends="-report"/>
<target name="-report">
<emma>
<report sourcepath="${src.dir}" sort="+block,+name,+method,+class"
metrics="method:70,block:80,line:80,class:100">
<infileset dir="${coverage.dir}" includes="**/*.em, **/*.ec"/>
<!-- for every type of report desired, configure a nested
element; various report parameters
can be inherited from the parent <report>
and individually overridden for each report type:
-->
<txt outfile="${coverage.dir}/coverage.txt" depth="package"
columns="class,method,block,line,name"/>
<xml outfile="${coverage.dir}/coverage.xml" depth="package"/>
<html outfile="${coverage.dir}/coverage.html" depth="method"
columns="name,class,method,block,line"/>
</report>
</emma>
</target>
</project>
...将所有覆盖文件合并到一个报告中!
的metrics
参数report
设置 html 报告的高亮阈值,以便低于阈值的包和文件的百分比以红色突出显示。
修改 xml 输出将允许我使用类似andariel 之类的东西在结果上运行 xpath,然后在未达到阈值时强制构建失败!
所有coverage.* 文件都在构建开始时被删除,因此您必须确保在构建中执行源的完全重新编译以获得实际的coverage.em 文件。
我为解决此问题所做的工作如下:
-out emma.em
,并确保merge
将选项设置true
为保留检测数据。<move file="$YOUR_PATH/emma.em" tofile="$YOUR_PATH/coverage.em"/>
重命名为默认的。希望这可以帮助任何拥有累积艾玛覆盖率报告的人。
我遇到的大多数代码覆盖率工具似乎都没有办法组合来自不同或重叠子系统的测试结果。正如您所指出的,这是一个非常有用的能力。
我们的SD 测试覆盖工具 确实具有这种能力,并且可用于 Java、C、C++、C#、PHP 和 COBOL。事实上,SD 测试覆盖率工具可以将来自多种语言的测试覆盖率数据组合成一个单一的结果,这样您就可以获得多语言应用程序的测试覆盖率概览。它能够显示所有涉及的源语言的覆盖范围,并提供摘要报告。