是否可以为单个存储库获取单独的前端和后端测试报告?
似乎有一种可能的方法是将lcov报告连接成一个然后运送到工作服,如本问题所述.
但是,我想知道是否有办法查看前端和后端的单独代码覆盖率报告,或者为lcov工作服提供两个文件.如果是这样,怎么样?
我已经将Karma配置为报告我的JavaScript代码的覆盖范围.以下是karma.conf.js文件中配置的一部分:
coverageReporter: {
reporters: [
{
type: 'html',
dir: 'build/karma/coverage'
},
{
type: 'lcov',
dir: 'build/karma/coverage',
subdir: '.'
},
{
type: 'cobertura',
dir: 'build/karma/coverage'
}
]
},
Run Code Online (Sandbox Code Playgroud)
我的lcov.info文件格式如下:
TN:
SF:./app/scripts/app.js
FN:16,(anonymous_1)
FN:26,(anonymous_2)
FNF:2
FNH:1
FNDA:1,(anonymous_1)
FNDA:0,(anonymous_2)
DA:2,1
DA:20,1
DA:29,0
DA:34,0
LF:4
LH:2
BRF:0
BRH:0
end_of_record
Run Code Online (Sandbox Code Playgroud)
不幸的是,在Sonarqube JavaScript的插件,仅考虑与启动线SF:,DA:或BRDA:(CF LCOVParser).
因此,LCOV HTML报告(由伊斯坦布尔制作)使我在相同数据上的代码覆盖率高于Sonar.
有没有办法改变lcov.info生成的格式?
如果我查看伊斯坦布尔代码,我可以想象不同标签的含义:
BRF,BRH,BRDA是分支机构.FN,FNF …我最近开始使用lcov来可视化我的代码覆盖率.这是一个很棒的工具.
我注意到的一件事是它为我正在使用的所有文件生成代码覆盖率报告 - 包括那些我不感兴趣的文件.例如,它将为我提供boost和mysql ++文件的代码覆盖率报告.
是否有一种简单的方法可以强制lcov仅生成特定文件的覆盖率报告?
我试过像这样使用-k参数:
/usr/bin/lcov -q -c -i -b . -d .obj -k src/ -k include/ -o app_base.info
{run unit tests now}
/usr/bin/lcov -q -c -b . -d .obj -k src/ -k include/ -o app_test.info
/usr/bin/lcov -q -a app_base.info -a app_test.info -o app_total.info
/usr/bin/genhtml -q -o lcov_output_directory app_total.info
(这意味着我只想要"include"和"src"目录的覆盖文件.)
但是,这似乎不起作用.该报告仍然显示了所有无关的文件.任何建议都非常感谢.谢谢!
今天我的任务是将单元测试覆盖率分析添加到我们的代码库中.今天也是iOS 7.1与XCode 5.1一起发布的日子.从发行说明:
用于代码覆盖测试的gcov工具已重新实现.新版本使用LLVM项目中的llvm-cov工具.对于所有重要功能,它在功能上等同于旧版本.Xcode中gcov的位置也已移动,使用xcrun来调用它.如果您发现问题,请提交错误报告.对于此版本,您仍然可以使用GCC的旧版gcov,它以gcov-4.2的形式提供.11919694已更新
我只是在遵循几篇教学 博客 文章后才意识到这一点,正确设置我的环境 - 在测试时在模拟器的构建文件夹中生成.gcda/.gcno文件 - 并且在此处生成报告生成工具尝试将它们解析为报告.(这是一个./getcov脚本,它收集您的环境变量以传递给lcov-1.10脚本以生成报告)
第一个障碍是新的捆绑gcov程序不支持-v获取版本的参数,这是lcov初始化的第一步.看起来就像一个非首发,但是阅读上面的发行说明我修改了lcov脚本以使用旧gcov-4.2版本并解决了问题.
但是,lcov在处理我的覆盖数据文件时很早就出错了.这会在我的项目中按字母顺序生成一个可能包含前10个文件的报告.不是特别有用.错误输出是最小的,也是无益的:
geninfo:错误:GCOV(build_artifacts)/(class_that_errored).gcda失败了!
我修改了lcov脚本以打印它所获得的错误(11遗憾的是,它只能在gcov(-io).c代码中找不到任何引用)并继续操作而不是退出,所以我留下了更多报告中的文件,但仍有85%的源文件出错,如上所述.
我能够在报告中成功结束的文件与发生错误的文件之间辨别的唯一模式是任何使用内联块声明的文件都失败了.没有任何传递过的文件以任何方式阻止,我检查过的所有文件都包含块.奇怪.
后来我想通了,我可以在打开单个文件.gcda 封面,其中包括曾在出错的那些lcov脚本.在coverage报告下面的消息窗口中,所有出错的文件都有警告消息:
(class_that_errored).gcno:'__copy_helper_block_'没有行
(class_that_errored).gcno:'__destroy_helper_block_'没有行
在这一点上我最好的假设是新的XCode 5.1生成.gcda文件,旧gcov-4.2程序没有配备有关块声明的处理.
但是我已经筋疲力尽了我想要尝试的一切,所以我在这里询问是否有人知道我错过了什么,或者有什么想法可以进一步调试.或者,如果有人成功测量了今天的XCode 5.1更新后的测试覆盖率gcov,我很想知道你必须做出的任何改变.
我用它lcov在我的项目中创建覆盖信息.但我只能得到线路覆盖和功能覆盖统计信息.
lcov version:1.10, gcov version:4.4.5
Run Code Online (Sandbox Code Playgroud)
我使用的命令是:
lcov -d $OSPL_HOME/src -d $OSPL_OUTER_HOME/src -c -o /work/li/log/lcov-raw.info
lcov -r /work/li/log/lcov-raw.info "*.ll" "*.yy" "*.yy.c" yaccpar "TAO161*" "/usr/include/*" "*/testsuite/*" -o /work/li/log/lcov.info
Run Code Online (Sandbox Code Playgroud)
在这两个命令之后,我得到的结果是:
Deleted 23 files
Writing data to /work/li/log/lcov.info
Summary coverage rate:
lines......: 45.4% (65087 of 143496 lines)
functions..: 46.1% (5575 of 12102 functions)
**branches...: no data found**
Run Code Online (Sandbox Code Playgroud)
所以没有分支覆盖结果.为什么?所以发生了什么事?这怎么可能发生?我在这里很困惑.
在第一个命令之后,我收到了很多这样的警告:
geninfo: WARNING: cannot find an entry for ..#..#code#accum.c.gcov in .gcno file, skipping file!
geninfo: WARNING: cannot find an entry for ..#..#code#at.c.gcov in .gcno …Run Code Online (Sandbox Code Playgroud) 我正在尝试将lcov用于代码覆盖率指标,但我无法使分支机构覆盖工作.
这是我如何使用它:
g++ -ggdb3 --coverage src/read.c tests/test.cpp -o bin/test
lcov --zerocounters --directory $PWD
lcov --capture --initial --directory $PWD --output-file coverage_output
./bin/test
lcov --no-checksum --directory $PWD --capture --output-file coverage_output
genhtml --branch-coverage --highlight --legend --output-directory out coverage_output
Run Code Online (Sandbox Code Playgroud)
但我得到:
整体覆盖率:
线......:100.0%(60行中60个)
函数..:100.0%(26个函数中的26个)
分支...:未找到数据
有任何想法吗?
我们正在使用LCOV/GCOV来为我们的项目提供测试覆盖率.最近我们尝试另外启用分支覆盖.但看起来,这只是不会产生我们从高级开发人员视图中预期的结果.
在C++中使用branch-coverage可以在整个地方分支报表.我们怀疑(正如搜索问题所示)主要是异常处理代码创建这些"隐藏分支".GCOV/LCOV似乎没有跳过这些.
我创建了一个小测试项目来显示问题:https://github.com/ghandmann/lcov-branch-coverage-weirdness
目前我们使用的是Ubuntu 16.04.有:
我们的生产代码是在启用c ++ 11的情况下构建的.最小的例子不是在启用c ++ 11的情况下构建的,但是当我们尝试使用所有不同的选项(c ++标准,优化-fno-exceptions)时,我们没有得到可通过的结果.
有人有想法吗?的窍门?我们使用的是错误的方式吗?这是否 - 如其他地方所述 - 真正预期的行为?
更新:
正如gcc-help邮件列表中指出的那样,这些"隐藏分支"由于异常处理而发生.因此,将-fno-exceptions开关添加到gcc会为"简单"程序产生100%的分支覆盖率.但是当禁用异常时,gcc拒绝编译实际使用异常的代码(例如try-catch,throw).因此,对于实际生产代码,这不是一种选择.看起来,在这种情况下,你必须简单地宣布约50%的覆盖率为新的100%.;)
我们正在使用Jasmine进行JavaScript单元测试.我们有一个SpecRunner.html文件来运行测试.是否存在可以将路径传递给SpecRunner.htmlJavaScript 的工具以及JavaScript(而不是规范)文件的路径,它会生成LCOV报告.例如,像这样:
phantomjs jasmine_lcov.js SpecRunner.html WebContent/js
Run Code Online (Sandbox Code Playgroud) 如何使用Xcode 5和iOS7生成代码覆盖?
在升级之前,我得到的代码覆盖率很好.现在我看不到正在生成任何*.gcda文件.
我正在使用的cmd-line是:
xcodebuild -workspace ${module.name}.xcworkspace test -scheme ${module.name} -destination OS=${module.sdk.version},name=iPad -configuration Debug
Run Code Online (Sandbox Code Playgroud)
适用于AppCode
适用于Xcode IDE
我开始使用lcov大约一个月前.覆盖范围似乎不一致.第一轮报告的线路覆盖率约为75%,而第二轮报告的线路覆盖率仅为19%.使用的测试套件对于两次运行都是一些.我在lcov期间看到以下警告 - 删除.有什么建议?
lcov:警告:在tracefile all.info中找到负数
这有什么值得担心的吗?
提前致谢.
lcov ×10
gcov ×3
c++ ×2
javascript ×2
testing ×2
branch ×1
c ×1
coveralls ×1
jasmine ×1
karma-runner ×1
objective-c ×1
sonarqube ×1
unit-testing ×1
xcode ×1
xcode5 ×1
xcode5.1 ×1