如何在将js coverage lcov文件转换为cobertura XML时排除特定文件

时间:2015-02-26 10:10:18

标签: python jenkins code-coverage cobertura lcov

我使用python脚本将lcov文件转换为cobertura格式,以便我可以使用Jenkins插件在作业中显示报告。我需要排除一些包和一些文件,python脚本只提供排除包的选项。还有其他解决方法吗?

https://github.com/eriwen/lcov-to-cobertura-xml

排除整个包裹, python lcov_cobertura.py lcov.info --excludes sources.modules.web.services.transport -o coverage1.xml

我想在传输包下的“BundleService.js”中排除, (这不起作用) python lcov_cobertura.py lcov.info --excludes sources.modules.web.services.transport.BundleService -o coverage2.xml

尝试了多个正则表达式,但仍然没有运气。

1 个答案:

答案 0 :(得分:0)

解决方案1 ​​

他们使用lcov_cobertura.py中的re.match来应用excludes

re.match的python文档中写道:

  

re.match(pattern,string,flags = 0)

     

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的MatchObject实例。如果字符串与模式不匹配,则返回None;请注意,这与零长度匹配不同。

这意味着它从包名称的开头搜索。您应该指定如下所示的参数以避免任何起始符号:

-e ".*sources.modules.web.services.transport"

需要引号来避免*的shell扩展(对于像bash这样的Linux shell很重要) 完整的命令如下所示:

python lcov_cobertura.py lcov.info --excludes ".*sources.modules.web.services.transport" -o coverage1.xml

解决方案2

也许在lcov中删除有关特定包的数据是更好的主意:

lcov --capture --directory $BINDIR --output-file lcov.info
lcov --remove lcov.info "*sources.modules.web.services.transport" --output-file lcov.info

man lcov中所述:

  

如果要从跟踪文件中删除特定文件集的覆盖率数据,请使用此开关。其他命令行参数将被解释为shell通配符模式...

     

remove操作的结果将写入stdout或使用-o。

指定的tracefile