Python 报道徽章,如何获得?
Python coverage badges, how to get them?
我正在使用 Python 覆盖范围来测试我的应用程序。查看 GitHub 上的其他开发人员,我看到他们有一个小徽章,显示覆盖率。使用覆盖率,我如何生成这些徽章?
报道徽章就是我在下面看到的那个。
更新:有生成徽章的包,即 nose-htmloutput!酷
您可以点击这些徽章,它通常会将您带到提供它们的服务。
报道徽章由https://coveralls.io/提供:
Coveralls is a web service to help you track your code coverage over time, and ensure that all your new code is fully covered.
There is but one prerequisite:
- Your code must be hosted on 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 中,呈现为:
如果你想自己生成徽章,你可以尝试加载总覆盖百分比,然后创建一个图像,有点像这样:
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)
根据 Carsten 的回答,PyPI 上现在有一个 MIT 许可的工具用于生成 SVG 覆盖徽章:
https://github.com/dbrgn/coverage-badge
https://pypi.python.org/pypi/coverage-badge
您可以使用托管在 http://badge.kloud51.com
的 Badge
源代码可在 Github 获得:https://github.com/SavandBros/badge 如果您想了解它,您可以查看代码并了解它是如何生成的。
我编写了一个 python 徽章生成包,它生成的徽章在视觉上与主要徽章服务非常相似。它非常灵活,您可以在 python 代码中导入和使用,或从命令行 运行 导入和使用。它简单且独立。
您可以设置徽章标签和值,还可以根据阈值设置颜色。有针对 pylint、覆盖率和管道成功的预置设置,但您可以创建任何您喜欢的徽章。
这是 github 项目的 link,其中包含更详细的文档: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
以上所有答案都取决于某些图书馆或第三方提供商(coveralls 等)。
就我而言,我需要为代码覆盖率生成这样的徽章。我希望它简单,不要用不必要的库加载我的 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 生成的优势非常明显
- 不依赖任何库
- 大部分浏览器都支持渲染
image/svg+xml
- 全是文本,没有二进制生成。这很关键
在我们的例子中,每次提交的代码覆盖率 运行,我们希望
减少我们的 AWS CPU 时间。
要完成 ,您现在可以使用 genbadge
命令行工具(与 pip install genbadge
一起安装)为包括 pytest
、coverage
和 flake8
。提供了使用 shields.io
HTTP API 或包中包含的本地 SVG 模板生成此徽章的选项,生成的徽章如下:
命令
> genbadge coverage
应该符合您的需要。有关详细信息,请参阅 genbadge
documentation,尤其是了解如何使这些徽章将用户重定向到 test/coverage/flake8 报告。 (顺便说一句,我是作者 ;) )
我花了大概一天的时间来展示这个徽章,最后我选择了Github Action
+Codecov
,步骤不能太简单:
我正在使用 Python 覆盖范围来测试我的应用程序。查看 GitHub 上的其他开发人员,我看到他们有一个小徽章,显示覆盖率。使用覆盖率,我如何生成这些徽章?
报道徽章就是我在下面看到的那个。
更新:有生成徽章的包,即 nose-htmloutput!酷
您可以点击这些徽章,它通常会将您带到提供它们的服务。
报道徽章由https://coveralls.io/提供:
Coveralls is a web service to help you track your code coverage over time, and ensure that all your new code is fully covered.
There is but one prerequisite:
- Your code must be hosted on 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 中,呈现为:
如果你想自己生成徽章,你可以尝试加载总覆盖百分比,然后创建一个图像,有点像这样:
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)
根据 Carsten 的回答,PyPI 上现在有一个 MIT 许可的工具用于生成 SVG 覆盖徽章:
https://github.com/dbrgn/coverage-badge
https://pypi.python.org/pypi/coverage-badge
您可以使用托管在 http://badge.kloud51.com
的 Badge源代码可在 Github 获得:https://github.com/SavandBros/badge 如果您想了解它,您可以查看代码并了解它是如何生成的。
我编写了一个 python 徽章生成包,它生成的徽章在视觉上与主要徽章服务非常相似。它非常灵活,您可以在 python 代码中导入和使用,或从命令行 运行 导入和使用。它简单且独立。
您可以设置徽章标签和值,还可以根据阈值设置颜色。有针对 pylint、覆盖率和管道成功的预置设置,但您可以创建任何您喜欢的徽章。
这是 github 项目的 link,其中包含更详细的文档: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
以上所有答案都取决于某些图书馆或第三方提供商(coveralls 等)。
就我而言,我需要为代码覆盖率生成这样的徽章。我希望它简单,不要用不必要的库加载我的 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 生成的优势非常明显
- 不依赖任何库
- 大部分浏览器都支持渲染 image/svg+xml
- 全是文本,没有二进制生成。这很关键 在我们的例子中,每次提交的代码覆盖率 运行,我们希望 减少我们的 AWS CPU 时间。
要完成 genbadge
命令行工具(与 pip install genbadge
一起安装)为包括 pytest
、coverage
和 flake8
。提供了使用 shields.io
HTTP API 或包中包含的本地 SVG 模板生成此徽章的选项,生成的徽章如下:
命令
> genbadge coverage
应该符合您的需要。有关详细信息,请参阅 genbadge
documentation,尤其是了解如何使这些徽章将用户重定向到 test/coverage/flake8 报告。 (顺便说一句,我是作者 ;) )
我花了大概一天的时间来展示这个徽章,最后我选择了Github Action
+Codecov
,步骤不能太简单: