我正在使用Python覆盖率来测试我的应用程序。看看GitHub上的其他开发人员,我看到他们有一个小徽章,显示覆盖率的百分比。使用覆盖率,我如何生成这些徽章?我在下面看到的是覆盖率徽章。
更新:有一些包可以生成徽章,比如nose-htmloutput!酷
mkshixfv1#
你可以点击这些徽章,它通常会带你到提供它们的服务。覆盖率标记由https://coveralls.io/提供:Coveralls是一个Web服务,可以帮助您跟踪代码覆盖率,并确保所有新代码都被完全覆盖。只有一个先决条件:
*代码必须托管在GitHub上
一旦您注册并在开发时包含所需的配置和集成或包,您将获得一个图像URL以包含在项目文档中;python-coveralls项目:
python-coveralls
.. image:: https://coveralls.io/repos/z4r/python-coveralls/badge.png?branch=master :target: https://coveralls.io/r/z4r/python-coveralls
例如,在他们的自述文件中,呈现为:
1zmg4dgp2#
如果你想自己生成徽章,你可以尝试加载总覆盖率百分比,然后创建一个图像,类似这样:
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)
lpwwtiir3#
根据Carsten的回答,现在在PyPI上有一个MIT许可的工具来生成SVG覆盖徽章:https://github.com/dbrgn/coverage-badgehttps://pypi.python.org/pypi/coverage-badge
dohp0rv54#
我写了一个python badge生成包,它生成的badge在视觉上非常类似于主要的badge服务。它非常灵活,你可以在你的python代码中导入和使用,或者从命令行运行。它很简单,而且是自包含的。您可以设置徽章标签和值,也可以根据阈值设置颜色。pylint、coverage和pipeline成功有预构建的设置,但您可以创建任何您喜欢的徽章。以下是github项目的链接,其中包含更详细的文档:https://github.com/jongracecox/anybadge使用pip install anybadge安装Python代码示例:
pip install anybadge
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
vawmfj5a5#
上面的所有答案都依赖于一些库或第三方提供商(coveralls等人)。在我的例子中,我需要为代码覆盖率生成这样一个徽章。我希望它简单,不要用不必要的库加载我的docker图像,并且CPU占用较少。我意识到在这种情况下,使用image/svg+xml比生成png文件更有意义。这里是一个简单的bash代码脚本,下面是我认为生成jpeg/png文件的优点
image/svg+xml
# 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.不依赖任何库1.大多数浏览器都支持呈现image/svg+xml1.这在我们的案例中至关重要,因为代码覆盖率在每次提交时都会运行,我们希望减少AWS CPU时间。
3pvhb19x6#
您可以使用托管在http://badge.kloud51.com上的Badge源代码可以在Github上找到:https://github.com/SavandBros/badge如果你想了解它,你可以看看代码,看看它是如何生成的。
ef1yzkbh7#
要完成Carsten's answer and the associated comments,您现在可以使用genbadge命令行工具(与pip install genbadge一起安装)为一些工具(包括pytest,coverage和flake8)生成徽章。提供了使用shields.io HTTP API或包中包含的本地SVG模板生成此徽章的选项,生成的徽章如下:
genbadge
pip install genbadge
pytest
coverage
flake8
shields.io
命令
> genbadge coverage
应该满足您的需求。有关详细信息,请参阅genbadge documentation,特别是了解如何使这些标记将用户重定向到test/coverage/flake 8报告。(顺便说一下,我是作者;))
vmjh9lq98#
下面是我在一个特殊的用例中是如何做到的。Python包。Sphynx文档。我想点击徽章并转到一个覆盖率html表。我的Python包名为pycax。这需要pytest、coverage和coverage-badge Python包。在我的文档/Makefile中
coverage-badge
codecov: python3 -m pytest -rxs --cov=pycax --cov-report term-missing ../pycax @coverage html -d $(BUILDDIR)/html/_codecoverage @rm $(BUILDDIR)/html/_codecoverage/.gitignore @coverage-badge -o $(BUILDDIR)/html/coverage.svg @echo @echo "Code coverage finished. The HTML pages are in $(BUILDDIR)/html/_codecoverage."
为了使我的文档运行(好吧,实际上它发生在GitHub Action中)
cd docs make html codecov
在我的index.rst文件中
index.rst
|coverage| <body> .. |coverage| image:: https://<username>.github.io/pycax/coverage.svg :target: https://<username>.github.io/pycax/_codecoverage
注意,文档是在docs/_build/html中构建的,并且它被推送到远程的gh-pages分支
ippsafx79#
我花了大约一天的时间来展示这个徽章,最后我选择了Github Action + Codecov,步骤不能太简单:参见https://github.com/codecov/codecov-action
Github Action
Codecov
9条答案
按热度按时间mkshixfv1#
你可以点击这些徽章,它通常会带你到提供它们的服务。
覆盖率标记由https://coveralls.io/提供:
Coveralls是一个Web服务,可以帮助您跟踪代码覆盖率,并确保所有新代码都被完全覆盖。
只有一个先决条件:
*代码必须托管在GitHub上
一旦您注册并在开发时包含所需的配置和集成或包,您将获得一个图像URL以包含在项目文档中;
python-coveralls
项目:例如,在他们的自述文件中,呈现为:
1zmg4dgp2#
如果你想自己生成徽章,你可以尝试加载总覆盖率百分比,然后创建一个图像,类似这样:
lpwwtiir3#
根据Carsten的回答,现在在PyPI上有一个MIT许可的工具来生成SVG覆盖徽章:
https://github.com/dbrgn/coverage-badge
https://pypi.python.org/pypi/coverage-badge
dohp0rv54#
我写了一个python badge生成包,它生成的badge在视觉上非常类似于主要的badge服务。它非常灵活,你可以在你的python代码中导入和使用,或者从命令行运行。它很简单,而且是自包含的。
您可以设置徽章标签和值,也可以根据阈值设置颜色。pylint、coverage和pipeline成功有预构建的设置,但您可以创建任何您喜欢的徽章。
以下是github项目的链接,其中包含更详细的文档:https://github.com/jongracecox/anybadge
使用
pip install anybadge
安装Python代码示例:
命令行使用示例:
vawmfj5a5#
上面的所有答案都依赖于一些库或第三方提供商(coveralls等人)。
在我的例子中,我需要为代码覆盖率生成这样一个徽章。我希望它简单,不要用不必要的库加载我的docker图像,并且CPU占用较少。我意识到在这种情况下,使用
image/svg+xml
比生成png文件更有意义。这里是一个简单的bash代码脚本,下面是我认为生成jpeg/png文件的优点
我们使用s3来托管svg,但从技术上讲,您可以将其托管在任何http服务器上
相对于png生成的优势非常明显
1.不依赖任何库
1.大多数浏览器都支持呈现image/svg+xml
1.这在我们的案例中至关重要,因为代码覆盖率在每次提交时都会运行,我们希望减少AWS CPU时间。
3pvhb19x6#
您可以使用托管在http://badge.kloud51.com上的Badge
源代码可以在Github上找到:https://github.com/SavandBros/badge如果你想了解它,你可以看看代码,看看它是如何生成的。
ef1yzkbh7#
要完成Carsten's answer and the associated comments,您现在可以使用
genbadge
命令行工具(与pip install genbadge
一起安装)为一些工具(包括pytest
,coverage
和flake8
)生成徽章。提供了使用shields.io
HTTP API或包中包含的本地SVG模板生成此徽章的选项,生成的徽章如下:命令
应该满足您的需求。有关详细信息,请参阅
genbadge
documentation,特别是了解如何使这些标记将用户重定向到test/coverage/flake 8报告。(顺便说一下,我是作者;))vmjh9lq98#
下面是我在一个特殊的用例中是如何做到的。Python包。Sphynx文档。我想点击徽章并转到一个覆盖率html表。我的Python包名为pycax。
这需要
pytest
、coverage
和coverage-badge
Python包。在我的文档/Makefile中
为了使我的文档运行(好吧,实际上它发生在GitHub Action中)
在我的
index.rst
文件中注意,文档是在docs/_build/html中构建的,并且它被推送到远程的gh-pages分支
ippsafx79#
我花了大约一天的时间来展示这个徽章,最后我选择了
Github Action
+Codecov
,步骤不能太简单:参见https://github.com/codecov/codecov-action