如何在单个HTML文件中获取Django覆盖率报告

高拉夫·纳格帕尔(Gaurav Nagpal)

我正在运行我的单元测试用例,并想在html文件中生成覆盖率报告。

我知道我们有一个命令

coverage html --include=myproject/*.*

它会在我的项目目录中生成一个“ htmlcov”文件夹,在这里我们可以单独找到所有html格式的应用程序/文件覆盖率报告。但是我只需要一个HTML文件(或者您可以说htmlcov文件夹中的index.html文件),即可为我提供项目的覆盖范围。我不想生成所有文件。如何使用覆盖率做到这一点?或是否有其他好的方法可以将我的单元测试覆盖率报告生成为单个html文件?

马修·辛克尔

我已经完成了大部分的工作。coverage html在此阶段,它与输出紧密相关它是非破坏性的,尽管如果碰巧有一个文件htmlcov/coverage.html,则它将覆盖该文件。

import codecs
import os

from bs4 import BeautifulSoup

scripts = []
styles = []
bodies = []
processed = []


def explode(filename):
    # We want to turn the body element into a div so we can use it
    # in one page with all of the other body elements.
    processed.append(filename)
    soup = BeautifulSoup(codecs.open(filename, encoding='utf-8'))
    body = soup.body
    body.name = 'div'
    body['id'] = filename
    body['class'] = 'body'
    bodies.append(body)

    # Ensure that we grab all of the scripts that are required by
    # this page.
    for script in soup.find_all('script'):
        if 'src' in script.attrs:
            content = codecs.open(script['src'], encoding='utf-8').read()
        else:
            content = script.string
        if content not in scripts:
            scripts.append(content)

    # Likewise for the link[stylesheet] elements.
    for link in soup.find_all('link'):
        content = codecs.open(link['href'], encoding='utf-8').read()
        if content not in styles:
            styles.append(content)

    for a in soup.find_all('a'):
        # Make sure all local-links are rewritten to point to a more
        # fully-qualified name (these are line number links).
        if a['href'][0] == '#':
            anchor = u'{}-{}'.format(filename, a['href'][1:])

            a['href'] = u'#{}'.format(anchor)
            a.parent['id'] = anchor
        elif a['href'] in processed:
            # Pages we have already seen, we want to have a local link.
            a['href'] = u'#{}'.format(a['href'])
        else:
            # Otherwise, we want to see if we have a file that matches
            # the href, and embed that. Yay recursion.
            try:
                explode(a['href'])
            except IOError:
                pass
            else:
                a['href'] = u'#{}'.format(a['href'])


TEMPLATE = u'''<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
    <title>Coverage report</title>
    <style>{styles}</style>
    <script>{scripts}</script>
  </head>
  <body>
    {body}
  </body>
</html>
'''

# Fire off the tree walking with htmlcov/index.html
os.chdir('htmlcov')
explode('index.html')

# Override the toggle_lines function to limit it to just our code block.
scripts.append('''
coverage.toggle_lines = function (btn, cls) {
    btn = $(btn);
    var hide = "hide_"+cls;
    if (btn.hasClass(hide)) {
        btn.closest('.body').find("#source ."+cls).removeClass(hide);
        btn.removeClass(hide);
    }
    else {
        $("#source ."+cls).addClass(hide);
        btn.addClass(hide);
    }
};
''')

result = TEMPLATE.format(
    styles=u'\n'.join(styles),
    scripts=u'\n'.join(scripts),
    body=u'\n'.join([unicode(x) for x in bodies])
)

codecs.open('coverage.html', 'w', encoding='utf-8').write(result)
os.chdir('..')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在单个HTML文件中获取Django覆盖率报告

来自分类Dev

如何获取外部API的覆盖率报告?

来自分类Dev

HTML中的Jest覆盖率报告缺少覆盖率值

来自分类Dev

使“覆盖率报告”仅显示当前目录中的文件?

来自分类Dev

使“覆盖率报告”仅显示当前目录中的文件?

来自分类Dev

如何忽略Coverage.py中覆盖率为100%的报告文件

来自分类Dev

如何在伊斯坦布尔覆盖率报告中忽略函数_interopRequireDefault?

来自分类Dev

如何关闭PHPStorm 9中的测试覆盖率报告?

来自分类Dev

如何在测试代码覆盖率中覆盖catchError

来自分类Dev

在Gunicorn中运行时如何从Django应用程序获取覆盖率数据

来自分类Dev

如何在GO中检测分离文件夹的代码覆盖率?

来自分类Dev

如何在模型的覆盖率测试中获得100%?

来自分类Dev

如何在Python中获得100%的代码覆盖率?

来自分类Dev

如何在Golang中获得100%的代码覆盖率?

来自分类Dev

如何在 Sonarqube 中获得新的代码覆盖率?

来自分类Dev

phpunit仅针对特定文件夹生成html格式的覆盖率报告

来自分类Dev

如何获取类似于Sonarqube的Salesforce代码覆盖率报告

来自分类Dev

如何使用Android gradle插件0.10.0或更高版本获取jacoco覆盖率报告?

来自分类Dev

Jenkins REST API:获取覆盖率报告

来自分类Dev

如何从业力代码覆盖率报告中排除文件?

来自分类Dev

如何在流星/速度中生成测试覆盖率报告?

来自分类Dev

Django中代码覆盖率的可视化报告

来自分类Dev

Django中代码覆盖率的可视化报告

来自分类Dev

如何使用pytest为覆盖率报告设置不同的html输出目录?

来自分类Dev

如何使用鼻子2从给定的包装中获得覆盖率报告

来自分类Dev

如何从phpunit覆盖率报告中排除目录

来自分类Dev

如何多次运行php单元并连接覆盖率报告?

来自分类Dev

如何使用 Xcode 11 生成 JSON 覆盖率报告?

来自分类Dev

Jenkins中的Mule的MUnit覆盖率报告

Related 相关文章

  1. 1

    如何在单个HTML文件中获取Django覆盖率报告

  2. 2

    如何获取外部API的覆盖率报告?

  3. 3

    HTML中的Jest覆盖率报告缺少覆盖率值

  4. 4

    使“覆盖率报告”仅显示当前目录中的文件?

  5. 5

    使“覆盖率报告”仅显示当前目录中的文件?

  6. 6

    如何忽略Coverage.py中覆盖率为100%的报告文件

  7. 7

    如何在伊斯坦布尔覆盖率报告中忽略函数_interopRequireDefault?

  8. 8

    如何关闭PHPStorm 9中的测试覆盖率报告?

  9. 9

    如何在测试代码覆盖率中覆盖catchError

  10. 10

    在Gunicorn中运行时如何从Django应用程序获取覆盖率数据

  11. 11

    如何在GO中检测分离文件夹的代码覆盖率?

  12. 12

    如何在模型的覆盖率测试中获得100%?

  13. 13

    如何在Python中获得100%的代码覆盖率?

  14. 14

    如何在Golang中获得100%的代码覆盖率?

  15. 15

    如何在 Sonarqube 中获得新的代码覆盖率?

  16. 16

    phpunit仅针对特定文件夹生成html格式的覆盖率报告

  17. 17

    如何获取类似于Sonarqube的Salesforce代码覆盖率报告

  18. 18

    如何使用Android gradle插件0.10.0或更高版本获取jacoco覆盖率报告?

  19. 19

    Jenkins REST API:获取覆盖率报告

  20. 20

    如何从业力代码覆盖率报告中排除文件?

  21. 21

    如何在流星/速度中生成测试覆盖率报告?

  22. 22

    Django中代码覆盖率的可视化报告

  23. 23

    Django中代码覆盖率的可视化报告

  24. 24

    如何使用pytest为覆盖率报告设置不同的html输出目录?

  25. 25

    如何使用鼻子2从给定的包装中获得覆盖率报告

  26. 26

    如何从phpunit覆盖率报告中排除目录

  27. 27

    如何多次运行php单元并连接覆盖率报告?

  28. 28

    如何使用 Xcode 11 生成 JSON 覆盖率报告?

  29. 29

    Jenkins中的Mule的MUnit覆盖率报告

热门标签

归档