Python代码覆盖率工具之Coverage

在软件开发过程中,确保代码覆盖率是质量控制的关键一环。通过测量代码覆盖率,开发者可以了解哪些部分的代码正在被测试执行,哪些部分尚未被覆盖,从而优化测试策略,提高代码质量。在Python中,Coverage是一个非常流行且功能强大的代码覆盖率工具。本文将详细介绍如何使用Coverage工具来测量Python程序的代码覆盖率。

一、安装Coverage工具

使用Coverage工具之前,首先需要安装它。可以通过Python的包管理工具pip来进行安装:

pip install coverage

安装完成后,可以通过命令coverage --version来检查是否安装成功。

二、使用Coverage工具

Coverage工具提供了两种主要的使用方式:命令行方式和API方式。

1. 命令行方式

假设我们有一个简单的Python程序main.py,内容如下:

def print_hi(name):
if "cnblogs" in name:
print(f'Hi, 博客园')
elif "test-gang" in name:
print(f'Hi, 小罡测试笔记')
else:
print(f'Hi, python') if __name__ == '__main__':
print_hi('test-gang')

我们可以使用以下步骤来测量这个程序的代码覆盖率:

  • 执行覆盖率测试:
coverage run main.py

这条命令会运行main.py,同时记录哪些代码被执行了。

  • 生成覆盖率报告:
coverage report

这条命令会在控制台输出一个简单的覆盖率报告,显示哪些代码被执行了,哪些没有。

  • 生成HTML格式的覆盖率报告:
coverage html

这条命令会生成一个HTML格式的覆盖率报告,打开生成的htmlcov/index.html文件,可以直观地查看代码的覆盖率情况。

命令概览

您可以通过执行coverage help命令来查阅coverage工具所提供的各项命令:

用法: coverage <command> [options] [args]

命令列表:
annotate 为源文件添加执行信息注释。
combine 将多个数据文件进行合并。
debug 展示coverage.py的内部调试信息。
erase 清除之前收集的覆盖率数据。
help 获取关于如何使用coverage.py的帮助信息。
html 生成HTML格式的覆盖率报告。
json 生成JSON格式的覆盖率报告。
lcov 生成LCOV格式的覆盖率报告。
report 报告各个模块的覆盖率统计数据。
run 运行Python程序并测量其代码执行情况。
xml 生成XML格式的覆盖率报告。

如需进一步了解各个coverage命令的详细参数,可以分别执行coverage <command> --help命令,例如:coverage combine --help

用法: coverage combine [options] <path1> <path2> ... <pathN>  

此命令用于合并来自多个覆盖率数据文件的数据。合并后的结果将保存到一个单独的文件中,该文件代表所有输入数据的并集。位置参数可以是指向数据文件或包含数据文件的目录的路径。如果未提供路径,则默认合并当前目录下名为默认数据文件的数据。  

选项:
-a, --append 将覆盖率数据追加到现有的.coverage文件中,而不是每次运行都清空该文件。
--data-file=DATAFILE 指定要操作的数据文件的基本名称,默认为“.coverage”。[环境变量: COVERAGE_FILE]
--keep 保留原始数据文件,而不是在合并后删除它们。
-q, --quiet 静默模式,不打印任何执行过程中的消息。
--debug=OPTS 设置调试选项,多个选项之间用逗号分隔。[环境变量: COVERAGE_DEBUG]
-h, --help 显示此命令的帮助信息。
--rcfile=RCFILE 指定配置文件的路径。默认情况下,将尝试使用“.coveragerc”、“setup.cfg”、“tox.ini”和“pyproject.toml”。[环境变量: COVERAGE_RCFILE]

2. API方式

除了命令行方式,Coverage还提供了API方式,可以在Python代码中直接使用Coverage类来测量覆盖率。以下是一个简单的示例:

import coverage

def print_hi(name):
if "cnblogs" in name:
print(f'Hi, 博客园')
elif "test-gang" in name:
print(f'Hi, 小罡测试笔记')
else:
print(f'Hi, python') if __name__ == '__main__':
cov = coverage.Coverage() # 创建Coverage对象
cov.start() # 开始测量
print_hi('test-gang') # 需要测量的代码块
cov.stop() # 结束测量
cov.save() # 保存结果
cov.report() # 生成控制台报告
cov.html_report() # 生成HTML报告

Python代码覆盖率工具之Coverage的更多相关文章

  1. coverage python 代码覆盖率工具使用(django 使用)

    1. 安装包 pip install coverage 2.启动程序 coverage run -m pytest 3.获取html格式的报告文件 coverage html 4.创建配置文件 .co ...

  2. Python 代码覆盖率统计工具 coverage.py

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...

  3. 利用coverage工具进行Python代码覆盖率测试

    Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率情况. Coverage安装 1.安装命令:pip install coverage 2.查看cov ...

  4. Python代码覆盖率分析工具Coverage

    简介 在测试中,为了度量产品质量,代码覆盖率被作为一种测试结果的评判依据,在Python代码中用来分析代码覆盖率的工具当属Coverage.代码覆盖率是由特定的测试套件覆盖被测源代码的程度来度量,Co ...

  5. python代码覆盖率coverage简介与用法

    如果衡量单元测试对相应代码的测试重量,覆盖率是一个必要非充分条件,因此统计代码的覆盖率,检视单测是否充分,就尤为的重要.这里针对python-unittest的单测的覆盖率coverage进行使用说明 ...

  6. python代码覆盖率统计-coverage

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...

  7. C++代码覆盖率工具Coverage Validator

    市面上的C++代码覆盖率工具大都收费,Coverage Validator也不例外.Coverage Validator应该少有人听过,我也是在stackoverflow里听别人介绍的.所以下载了试用 ...

  8. JAVA代码覆盖率工具JaCoCo-原理篇

    JAVA代码覆盖率工具JaCoCo-原理篇 1.2 JAVA覆盖率工具介绍 1.3.3 Apache Maven方式 1.3.4 Eclipse EclDmma Plugin方式 JAVA代码覆盖率工 ...

  9. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

  10. Python开发工具PyCharm个性化设置(图解)

    Python开发工具PyCharm个性化设置,包括设置默认PyCharm解析器.设置缩进符为制表符.设置IDE皮肤主题等,大家参考使用吧. JetBrains PyCharm Pro 4.5.3 中文 ...

随机推荐

  1. 【docker-compose】Redis安装教程

    仅供学习参考 ,请勿轻易在生产环境使用 0. 文件目录 下面的文件按照这个目录层级放置,首先创建 /docker/redis 文件夹,/docker/redis 对应下边图中 REDIS. 1. 创建 ...

  2. springboot 实现通用责任链模式

    1.概述 在我们平时的工作中,填写分布填写数据,比如填入商品的基本信息,所有人信息,明细信息,这种情况就可以使用责任链模式来处理. 2.代码实现 2.1商品对象 public class Produc ...

  3. spring ai 函数调用

    1.概要 我们使用AI大模型开发程序时,比如我需要查一下平台中有多少个客户.这个时候大模型肯定时不知道的,如果大模型不知道,他可能会回答不知道或者胡乱回答,这个时候就需要借助函数时调用来解决这些问题. ...

  4. Visual Studio 2017 rc 资源文件 预处理 宏 无效

    在属性c++下的预处理宏不会影响rc资源文件的,需要对rc资源文件单独设置. 右键rc资源文件,点击属性,在预处理器定义添加需要的宏

  5. 01编程语言简介与C++

    编程语言是编程的工具 计算机系统是分层的 图1: 图2: 编程语言是软件,也是分层的 图3: 图4: 图5: 图6: visual studio.vscode .dev-c++是三种用于C++编程的集 ...

  6. mac上遇到的错误sed command a expects followed by text

    上简单的替换操作 sed -i 's/apple/mac/g' full-path-file 执行后报错,"sed: 1: command a expects \ followed by t ...

  7. vue3项目中报错:Unexpected mutation of "xxx" prop

    vue3 中element 弹窗绑定需要通过v-model,这个时候父级会传个dialogVisible(boolean值)过来,结果会报eslint的错. Unexpected mutation o ...

  8. 为什么在 Windows 下用 Ctrl+Z 退出 Python 而 Linux 下用 Ctrl+D 呢?

    打开我们的命令行,输入 python ,我们会进入 python 的交互模式. 当我们想退出 python ,返回我们的 shell 时,你将如何退出? 如上,两个行之有效的方法是输入 exit() ...

  9. Java子线程无法获取Attributes的解决方法

    在Java多线程编程中,开发者经常会遇到子线程无法获取主线程设置的Attributes的问题.Attributes通常用于存储与当前线程相关的数据,尤其在Web应用中,它们常用于请求上下文的管理.然而 ...

  10. OpenMMLab AI实战营 第四课笔记

    OpenMMLab AI实战营 第四课笔记 目录 OpenMMLab AI实战营 第四课笔记 目标检测与MMDetection 1.什么是目标检测 1.1 目标检测的应用 1.1.1 目标检测 in ...