coverage代码覆盖率测试工具:基本原理分析与使用

2023-11-16

coverage环境描述

本文环境python3.5.2
coverage版本4.3.1

coverage概述

代码覆盖率工具主要是为了检查测试用例覆盖了多少业务处理代码,在Django项目中,通过编写的测试用例,来检查后端业务逻辑接口的逻辑覆盖程度,以达到全面测试,根据需要覆盖的重要的业务代码,从而提供测试用例的全面性,提高测试质量。

coverage的基本使用

首先我们先创建示例代码,代码如下:
import sys

import os


def test_a():
    a = 1


def test_b():
    b = 2


def run():
    if 1:
        r = 1
    else:
        r = 2
    test_a()
    ret = r


run()

此时,我们在终端中输入命令行;

coverage run test_file.py

命令输入完成后,在同级目录下就会生成一个.coverage的文件,该文件就包含了测试执行的时候的相关执行的输出信息;

!coverage.py: This is a private format, don't read it directly!{"lines":{"/Users/wuzi/workpy/eyaos_signature/server/test_file.py":[17,2,4,21,8,7,24,20,11,15]}}

该段信息主要记录了对应的文件,并记录了所执行的行数。此时我们可以进一步通过coverage提供的report命令来更直观的查看所执行的具体情况,此时在终端中输入:

coverage html -d html_test

此时就会生成一个html_test的文件夹,此时打开对应的html_test/index.html页面。此时页面如下:

页面内容

此时我们进一步点击test_file.py查看详细内容,如下图所示:

详细内容

此时,对比.coverage文件里面的内容,可知,标绿的行数都为记录的行数。coverage最基本的用法使用完成之后,我们具体实现一个自己的代码检查脚本。

动手实现一个简单的代码覆盖检查脚本

为了实现coverage对应的功能,脚本需要知道执行的过程中,分一行都执行的位置,其本质就是需要知道在python脚本运行的时候能够调试该脚本,此时我们就联想到了Python提供的sys.settrace()函数,该函数就是设置系统的跟踪功能,允许您在Python中实现Python源代码调试器。 该函数是特定于线程的; 对于支持多线程的调试器,必须使用settrace()为每个正在调试的线程注册它。详细信息大家可以参考官方文档

此时我们根据该思路编写代码;

import sys


def trace(frame, event, arg_unused):
    if event == 'line':
        print(frame.f_lineno, event, arg_unused)
    return trace


sys.settrace(trace)

with open('test_file.py', "rb") as f:
    source = f.read()

code = compile(source, 'test_file.py', 'exec')
exec(code)

通过编译和执行对应的test_file.py文件,使在运行的时候就通过注册的调试函数trace,然后输出和打印相关信息,此时终端的输出信息如下:

1 line None
3 line None
6 line None
10 line None
14 line None
23 line None
16 line None
19 line None
7 line None
20 line None

由该输出可知,输出的行号与我们使用coverage生成的.coverage中输出的行号是一致的,至此,简单的检查代码覆盖的脚本的最简单的执行思路就是如上所述,大家有兴趣可自行运行。

总结

本文主要就是简单的使用了代码覆盖率检查工具coverage,执行分析完成脚本之后输出相关信息,然后根据该特性,我们自行编写了一个最简单的代码覆盖率检查的脚本,该脚本只是简单的打印出了脚本中所执行的代码的行号,大家可以基于该方法去扩写出其他功能。鉴于本人才疏学浅,如有疏漏请批评指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

coverage代码覆盖率测试工具:基本原理分析与使用 的相关文章

  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk

随机推荐

  • 从结果集中取出某一列的值组装成新的数组

    从结果集中取出某一列的值组装成新的数组 package main import fmt func main data map string string name z age 18 sex nan name l age 19 sex nv
  • 【导航算法】S型速度规划笔记

    S型速度规划笔记 一 S型速度规划逻辑整理 1 根据q1 q0和速度 判断是否在约束条件下 可以规划出S型速度规划 2 假设可以找到合适的S型速度规划 确定相应的参数v max和a max a 判断是否可以达到最大速度 v max 和加速度
  • Nacos用做配置中心时启动报错SocketTimeoutException http://localhost:8848

    当使用nacos作为注册中心时 很顺利 进如下配置 仅仅配置了ip和端口 启动类加 EnableDiscoveryClient注解 nacos作为配置中心 当继续将nacos作为配置中心时 添加加依赖
  • Oracle 中的外键约束

    一 前言 在Oracle数据库中 外键是用来实现參照完整性的方法之中的一个 打个比喻 外键是指定义外键的表的列的值必须在还有一个表中出现 被參照的表称之为父表 parent table 创建外键的表称之为子表 child table 子表中
  • Samba CentOS 7 安装

    安装步骤 Samba是在Linux与Windows系统间共享文件和打印机的标准协议 要在CentOS上安装Samba 可以按以下步骤操作 安装Samba相关包 yum install samba samba client samba com
  • 【Linux】SSH、shell

    最近GET到一个学习方法 了解一个新知识是什么的最快方法 就是去看它官网首页最大的那行字 一 比如SSH到底是什么 如下图 答案 SSH就是一个安全的shell应用程序 SSH是一个软件包 使系统登陆和文件传输都建立在一个安全的网络上 二
  • C++11新特性——智能指针之shared_ptr

    此课件及源代码来自B站up主 码农论坛 该文章仅作为本人学习笔记使用 1 智能指针shared ptr shared ptr共享它指向的对象 多个shared ptr可以指向 关联 相同的对象 在内部采用计数机制来实现 当新的shared
  • Java-如何使用Java将图片和文字拼接在一起(并非是给图片加水印)

    之前有遇到一个问题 问题背景 项目中 有一个功能 管理端可以将客户创建的小程序码下载到本地 方便客户将对应门店的小程序码打印出来并张贴到门店 做门店的引流和会员入会 具体问题 当小程序码的数量较少的时候 我们是后端将小程序码的分组信息和小程
  • OnCheckedChangeListener和setChecked之间冲突问题解决

    今天遇到一个奇怪的问题 hdmi设备的usb触屏线 Usb接口 在拔掉的时候 界面的Checkbox Switch等控件会响应CompoundButton OnCheckedChangeListener 很明显 通过debug debug模
  • bugku ctf web4 (看看源代码吧)

    打开打开 刚刚有个sb问我借lol号玩 浪费时间 继续干正事 随便输入后 提示 再好好看看 出题人语文肯定不好 应该是这个 再 吧 那我们查看源码
  • 深聊性能测试,从入门到放弃之:Locust性能自动化(一)初识Locust

    初识Locust 1 Locust基本介绍 1 1 引言 1 2 简介 2 Locust安装方式 2 1 安装 locust 2 2 安装pyzmq 2 3 安装成功确认 3 Locust 参数说明 3 1 参数信息 3 2 参数信息解析
  • Android视频开发

    http www jianshu com u a32db45d4859
  • Windows 批量重命名文件(支持正则表达式)

    今天整理了一批文件 命名有点上乱 所以想批量修改一下 在网上找了一工具 叫Ant Renamer 相当不错 主界面如下 操作步骤很简单 1 添加文件或文件夹 支持自动递所有子目录 2 操作 在这里设置重命名的参数 3 然后点击 开始 即可
  • 读取文件大小(小数点后保留两位)

    获取文件大小 public static String getSize File file double d DecimalFormat df new DecimalFormat 00 long length file length if
  • 配额限制出现“limit函数未实现”解决方法

    磁盘配额限制的步骤分为 安装quota和xfsprogs软件包 制定挂载条件 mount o usrquota grpquota dev 卷组名 逻辑卷名 限制磁盘使用量空间 xfs quota x c limit u bsoft 80M
  • 时序图中if else画法

    进入扩展程序安装 File gt Settings gt Plugins gt Browse Repositories 搜索 SequenceDiagram 点击右边 Install 安装 然后重启 IDEA 在需要生成流程时序图的方法 右
  • 企业网络安全设计与综合实施方案

    1 企业网络安全需求 企业网络安全需求大致分为三部分 但是在设计对应的网络安全技术方案时 通常根据企业结构划分网络 从五个方面制定方案 某游戏公司当前的企业网络拓扑如右图所示 考虑到该公司运行的业务可能面临众多安全威胁 需要网络实施工程师针
  • 《离散数学》速成-练习题答案(含题目)

    离散数学 速成 https blog csdn net aiqq136 article details 113445181 课时1 课时2 课时3 课时4 课时5 课时6 课时7 课时8 课时9 课时10 课时11 课时12 课时13 课时
  • Scrapy初识与创建

    Scrapy 是一套基于基于Twisted的异步处理框架 纯python实现的爬虫框架 用户只需要定制开发几个模块就可以轻松的实现一个爬虫 用来抓取网页内容以及各种图片 非常之方便 一 安装 Scrapy框架因为功能十分强大 所以依赖很多库
  • coverage代码覆盖率测试工具:基本原理分析与使用

    coverage环境描述 本文环境python3 5 2 coverage版本4 3 1 coverage概述 代码覆盖率工具主要是为了检查测试用例覆盖了多少业务处理代码 在Django项目中 通过编写的测试用例 来检查后端业务逻辑接口的逻