python - 将覆盖率和 codecov.io 与 pytest 单元测试和定制内联测试结合使用

标签 python unit-testing automated-tests code-coverage coverage.py

我的 Python 项目的代码库包含大量测试。这些测试足够广泛和广泛,我称它们为“稳健”。我想确切地知道它们有多强大,所以我设置了 the coverage.py tool ,以及 codecov.io account .

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

  1. 一套单元测试,从一开始就编写为 pytest 运行– 即没有基于 unittest 的遗留测试,并且大量利用了 pytest 固定装置和 Hook 。
  2. 每个模块内联测试功能套件,用 a simple bespoke test runner 编写。这些看起来都像这样:
# -*- 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())

…他们输出这样的报告:

inline test suite report screenshot

...内联测试可以直接从编辑器中按模块运行。它们也可以通过 a nox setup 集体运行收集并运行 all modules that define inline tests .

现在,对于 coverage.py 和 codecov.io - 将 pytest 套件与这些工具集成起来非常容易。我对现成的 .coveragerc 文件进行了一些调整,安装了 pytest codecov.io 插件,就是这样 – 这些测试向 codecov 报告其覆盖范围.io 就好了。

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

  • 是否有一种简单的方法来配置 coverage.py 以“理解”这些测试函数,或者内联测试是否需要将其结果报告给覆盖率工具?
  • 可以在 .coveragerc 文件中设置类似的内容吗?还是更复杂?
  • 此外,我是否还应该考虑使用其他工具来补充或替代我当前使用的工具?

最佳答案

Coverage.py 不了解有关测试的任何内容。它所做的只是告诉您代码的哪些部分由某个程序运行。通常该程序是测试运行程序,但coverage.py并不关心。

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

关于python - 将覆盖率和 codecov.io 与 pytest 单元测试和定制内联测试结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60864784/

相关文章:

C# 解析和更改 yaml 中的字符串

Python 2.7 语法极客 - 列表推导式中的 Lambda

python sqlalchemy - 无法使级联删除工作 - 在 mssql 管理器中

angularjs - 测试 Chrome 存储 API 包装器

unit-testing - 测试以检查功能是否未运行?

python - 连体网络,下部使用密集层而不是欧氏距离层

oracle - PL/SQL : Execute procedure in another procedure

Selenium Webdriver等待来自另一个元素的元素

python - 在 Selenium 中通过带有特定文本的标签名称选择元素

java - 如何在没有地址栏的情况下获取浏览器窗口大小Java?