首页 > 解决方案 > 将覆盖率和 codecov.io 与 pytest 单元测试和定制的内联测试一起使用

问题描述

我的一个 Python 项目的代码库包含大量测试。这些测试足够广泛和宽敞,我称它们为“健壮的”。我想知道它们到底有多强大,所以我设置了工具coverage.pycodecov.io帐户

该项目有两种类型的测试:

  1. 一套单元测试,从一开始就编写并运行pytest——即没有unittest基于遗留的测试,并且pytest夹具和钩子被大量利用。
  2. 每个模块的内联测试功能套件,用一个简单的定制测试运行器编写。这些看起来都像这样:
# -*- coding: utf-8 -*-
import sys # …etc

# «module code»

def test():

    from clu.testing.utils import inline

    @inline.precheck
    def show_some_initial_values():
        """ Precheck function description """
        # «pre-check code»

    @inline
    def test_one():
        """ Test one’s description """
        # «test code»

    @inline
    def test_two():
        """ Test two’s description """
        # «test code»

    @inline.diagnostic
    def show_some_final_values():
        """ Diagnostic function description """
        # «post-run diagnostic code»

    return inline.test(100) # runs test functions 100 times;
                            # prechecks and diagnostics run once

if __name__ == '__main__':
    sys.exit(test())

......他们输出报告如下:

内联测试套件报告截图

... 内联测试可以在每个模块的基础上运行,直接从编辑器。它们也可以通过收集和运行定义内联测试的所有模块nox设置来集体运行。

所以现在,关于和 codecov.io - 将套件与这些工具coverage.py集成起来非常容易。pytest我对一个现成的.coveragerc文件进行了一些调整,安装了pytestcodecov.io 插件,就是这样——那些测试将它们的覆盖率报告给 codecov.io 就好了。

我的问题是,如何为内联测试集成覆盖率报告?

标签: pythonunit-testingautomated-testscode-coveragecoverage.py

解决方案


Coverage.py 对测试一无所知。它所做的只是告诉您代码的哪些部分由某个程序运行。通常该程序是一个测试运行程序,但coverage.py 不在乎。

如果您现在使用 运行测试python mytestrunner.py,请将命令更改为coverage run mytestrunner.py,您将获得数据。


推荐阅读