我使用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
尝试了多个正则表达式,但仍然没有运气。
答案 0 :(得分:0)
他们使用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
也许在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