Python覆盖徽章,如何获得它们?

问题描述 投票:11回答:6

我正在使用Python覆盖来测试我的应用程序。看看GitHub上的其他开发者,我看到他们有一个小徽章,显示了覆盖率。使用coverage,我该如何生成这些徽章?

我正在看下面的覆盖徽章。

更新:有包生成徽章,即nose-htmloutput!凉

python django code-coverage
6个回答
4
投票

如果您想自己生成徽章,可以尝试加载总覆盖率百分比,然后创建一个图像,如下所示:

from PIL import Image, ImageDraw, ImageFont
from coverage import coverage

cov = coverage()
cov.load()
total = cov.report()

# total = 79.0

im = Image.new("RGB", (120, 20))
fnt = ImageFont.load_default()
d = ImageDraw.Draw(im)

d.text((10, 5), "coverage:", fill=(255, 255, 255), font=fnt)
d.rectangle([(80, 0), (150, 20)], fill=(220, 0, 0))
d.text((90, 5), "{:.0f}%".format(total), fill=(0, 0, 0), font=fnt)


9
投票

您可以单击这些徽章,它通常会将您带到提供它们的服务。

保险范围徽章由https://coveralls.io/提供:

Coveralls是一项Web服务,可帮助您跟踪代码覆盖率,并确保完全覆盖您的所有新代码。

只有一个先决条件:

  • 您的代码必须托管在GitHub上

一旦您在开发时注册并包含所需的配置和集成或包,您将获得一个图像URL以包含在项目文档中; python-coveralls项目有:

.. image:: https://coveralls.io/repos/z4r/python-coveralls/badge.png?branch=master
    :target: https://coveralls.io/r/z4r/python-coveralls

例如,在他们的README中,它呈现为:

1


1
投票

根据Carsten的回答,现在有一个关于PyPI的MIT许可工具,用于生成SVG覆盖徽章:

https://github.com/dbrgn/coverage-badge https://pypi.python.org/pypi/coverage-badge


1
投票

您可以使用http://badge.kloud51.com上托管的徽章

源代码可以在Github上找到:https://github.com/SavandBros/badge你可以查看代码,看看它是如何生成的,如果你想了解它。


1
投票

我编写了一个python徽章生成包,可以在视觉上与主徽章服务类似地生成徽章。它非常灵活,您可以在您的python代码中导入和使用,或从命令行运行。它简单而且独立。

您可以设置徽章标签和值,也可以根据阈值设置颜色。有针对pylint,coverage和管道成功的预建设置,但您可以创建自己喜欢的任何徽章。

以下是github项目的链接,其中包含更详细的文档:https://github.com/jongracecox/anybadge

使用pip install anybadge安装

示例python代码:

import anybadge

# Define thresholds: <2=red, <4=orange <8=yellow <10=green
thresholds = {2: 'red',
              4: 'orange',
              6: 'yellow',
              10: 'green'}

badge = anybadge.Badge('pylint', 2.22, thresholds=thresholds)

badge.write_badge('pylint.svg')

命令行使用示例:

anybadge --label pylint --value 2.22 --file pylint.svg 2=red 4=orange 8=yellow 10=green

1
投票

以上所有答案都取决于某些图书馆或第三方提供商(工作服等)。

就我而言,我需要为代码覆盖生成这样的徽章。我希望它很简单,不要用不必要的库加载我的docker镜像,并且CPU密集度更低。我意识到在这种情况下,有一个image/svg+xml比生成一个png文件更有意义。

这是一个简单的bash代码脚本,下面是我认为生成jpeg / png文件的优点

# generate coverage icon
COVERAGE_BADGE="${COVERAGE_DIR}/coverage.svg"

#Get this coverage from whatever tool you are using. In our case it was go tool cover
COVERAGE_TEXT="78.3%"
SVG_XML_DATA='<svg xmlns="http://www.w3.org/2000/svg" width="124" height="20">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="a">
<rect width="124" height="20" rx="3" fill="#fff"/>
</mask>
<g mask="url(#a)">
<path fill="#555" d="M0 0h52v20H0z"/>
<path fill="#97CA00" d="M52 0h72v20H52z"/>
<path fill="url(#b)" d="M0 0h124v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="Verdana,DejaVu Sans,Geneva,sans-serif" font-size="11">
<text x="26" y="15" fill="#010101" fill-opacity=".3">gocov</text>
<text x="26" y="14">gocov</text>
<text x="87" y="15" fill="#010101" fill-opacity=".3">PLACEHOLDER</text>
<text x="87" y="14">PLACEHOLDER</text>
</g>
</svg>'

SVG_XML_DATA_FILLED=$(sed "s/PLACEHOLDER/$COVERAGE_TEXT/g" <<<"$SVG_XML_DATA")
echo "$SVG_XML_DATA_FILLED" > $COVERAGE_BADGE

# upload bagde to s3
aws s3api put-object \
    --bucket dev.team \
    --content-type "image/svg+xml" \
    --key "coverage/${CODEBUILD_SOURCE_VERSION}.svg" \
    --body "${COVERAGE_BADGE}"

我们使用s3来托管svg但你在技术上将它托管在任何http服务器上

png代的优势非常明显

  1. 不依赖于任何库
  2. 大多数浏览器都支持渲染image / svg + xml
  3. 这是所有文本,没有二进制生成。这在我们的案例中至关重要,因为每次提交都会运行代码覆盖,我们希望减少AWS CPU时间。
© www.soinside.com 2019 - 2024. All rights reserved.