【问题标题】:Regex for Gitlab CI Test coverage parsing用于 Gitlab CI 测试覆盖率解析的正则表达式
【发布时间】:2017-06-26 21:22:03
【问题描述】:

我一直在努力寻找可以在“CI/CD 管道”页面上的“测试覆盖解析”输入中工作的正则表达式。示例显示不一致的示例无济于事,即一些转义括号和其他没有,与百分比符号相同,一些捕获$1 中的显式结果等。无论如何,这是我的文本 - 正则表达式是什么?

CI 徽章:

![coverage](https://gitlab.com/mycompany/master/badges/master/coverage.svg?job=coverage)

输出文本:

Unit test coverage:
   10.01% blocks
   10.01% lines

到目前为止尝试过:(添加斜线只是为了表示前面的空格或正则表达式)

/ \(\d+\.\d+\%\) blocks/
/ (\d+\.\d+\%) blocks/
/ (\d+\.\d+%) blocks/
/ (\d+\.\d+)% blocks/

【问题讨论】:

    标签: gitlab code-coverage gitlab-ci


    【解决方案1】:

    这个正则表达式应该获取块覆盖:

    ^\s*(\d+(?:\.\d+)?%)\s*blocks
    

    如果您想获取线路覆盖范围,请使用:

    ^\s*(\d+(?:\.\d+)?%)\s*lines
    

    GitLab 会自动添加前导和尾随 /,因此您无需将它们添加到您的正则表达式中。

    为了将来参考,GitLab 是用 Ruby 编写的,因此您可以在 rubular.comrubular.com 上用 Ruby 测试这个正则表达式

    【讨论】:

    • 我认为你可以通过让它稍微灵活一些来改进它——匹配任何空格而不是仅仅匹配空格,使空格可选(“blocks”或“lines”关键字很重要),转义小数点并匹配不带小数位的百分比。 rubular.com/r/7m5Z48JRcQ
    • @tmt 我已经更新了我的答案以使用你的一些建议。
    • 这个正则表达式对我不起作用。具体应该捕获什么?它应该是小数,即“10.01”,还是百分比,即“10.01%”或更多? @BrokenBinary 提供的正则表达式有多个捕获。
    • 它应该捕获十进制数和百分号10.01%,或整数和百分号95%
    • 另外,它只有一个捕获组。 (?: ) 组是一个非捕获组,由它开头的?: 表示。
    【解决方案2】:

    问题在于覆盖 URL 查询“?job=coverage”不正确。至于正则表达式,我使用了:

    \W(\d+(?:\.\d+)%)\sblocks
    

    【讨论】:

      【解决方案3】:

      有一个有用的 Ruby 正则表达式网页。

      http://www.rubular.com/

      我的 GitLab 代码覆盖率解析没有帮助我。我认为这是因为在 GitLab 中似乎注册了一个针对正则表达式问题的错误。 https://gitlab.com/gitlab-org/gitlab-ce/issues/21495

      【讨论】:

        猜你喜欢
        • 2022-10-13
        • 2022-06-11
        • 2021-09-05
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多