coverage代码覆盖率测试工具:基本原理分析与使用
发布日期:2021-07-25 13:04:54 浏览次数:13 分类:技术文章

本文共 1829 字,大约阅读时间需要 6 分钟。

coverage环境描述

本文环境python3.5.2coverage版本4.3.1

coverage概述

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

coverage的基本使用

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

import sys

import osdef test_a():    a = 1def test_b():    b = 2def run():    if 1:        r = 1    else:        r = 2    test_a()    ret = rrun()

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

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 sysdef trace(frame, event, arg_unused):    if event == 'line':        print(frame.f_lineno, event, arg_unused)    return tracesys.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 None3 line None6 line None10 line None14 line None23 line None16 line None19 line None7 line None20 line None

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

总结

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

转载地址:https://blog.csdn.net/qq_33339479/article/details/88419604 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:代码覆盖率原理分析:sys.settrace流程分析
下一篇:locust压测工具:测试信息输出与分布式模式

发表评论

最新留言

很好
[***.229.124.182]2024年04月05日 03时16分42秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章