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

时间:2015-03-27 08:11:00

标签: python django code-coverage

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

我正在看下面的保险徽章。

badges

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

7 个答案:

答案 0 :(得分: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
例如,在他们的自述文件中,

呈现为:

1

答案 1 :(得分: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)

simple coverage badge

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

您可以使用http://badge.kloud51.com

托管的徽章

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

答案 4 :(得分: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

答案 5 :(得分:1)

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

就我而言,我需要为代码覆盖范围生成这样的徽章。我希望它很简单,并且不要在我的docker映像中加载不必要的库,并减少CPU占用率。 我意识到在这种情况下,拥有mod_wsgi (pid=7152): Exception occurred processing WSGI script '/home/nikos/public_html/app.py' OSError: Apache/mod_wsgi failed to write response data: Broken pipe. 比生成png文件更有意义。

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

image/svg+xml

我们使用s3托管svg,但从技术上讲,您将其托管在任何http服务器上

与png生成相比,优势非常明显

  1. 不依赖任何库
  2. 大多数浏览器支持渲染 图片/ svg + xml
  3. 全是文本,没有二进制生成。这很关键 在我们的案例中,每次提交都涉及代码覆盖,我们希望 减少我们的AWS CPU时间。

答案 6 :(得分:0)

要完成 Carsten's answer and the associated comments,您现在可以使用 genbadge 命令行工具(随 pip install genbadge 一起安装)为一些工具生成徽章,包括 pytest、{{1 }} 和 coverage。提供了使用 flake8 HTTP API 或包中包含的本地 SVG 模板生成此徽章的选项,从而生成徽章,例如:

enter image description here

命令

shields.io

应该适合您的需求。有关详细信息,请参阅 genbadge documentation,特别是了解如何使这些徽章将用户重定向到 test/coverage/flake8 报告。 (顺便说一下,我是作者;))