2

我正在使用 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

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

4

1 回答 1

0

解决方案 1

他们使用re.matchinlcov_cobertura.py来申请excludes

在 python 文档中,re.match它是这样写的:

re.match(模式,字符串,标志=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 通配符模式...

删除操作的结果将被写入标准输出或使用 -o 指定的跟踪文件。

于 2017-04-25T13:02:50.433 回答