来自 澳门威尼斯人平台 2020-03-22 17:58 的文章
当前位置: 澳门威尼斯人平台 > 澳门威尼斯人平台 > 正文

代码测试覆盖率

1. 关于代码覆盖率

衡量代码覆盖率有很多种层次,比如行覆盖率,函数/方法覆盖率,类覆盖率,分支覆盖率等等。代码覆盖率也是衡量测试质量的一个重要标准,对于黑盒测试来说,如果你不确定自己的测试用例是否真正跑过了系统里面的每一行代码,在测试的完整性上总要打些折扣。因此,业界几乎对各种编程语言都有自己的一套代码覆盖率解决方案。世界上最美的语言PHP当然也不例外。PHPUnit和Spike PHPCoverage提供了一套基于xdebug的代码覆盖率测试方案。在本文中,我将针对自己碰到的特定业务场景,讲述一下自己进行PHP代码函数覆盖率测试的解决方案。

写在前头

看了阿里开发手册 “单元测试第八条的推荐”

单元测试的基本目标:语句覆盖率达到 70% ;核心模块的语句覆盖率和分支覆盖率都
要达到 100%

之前在公司实习的时候,组内一个老哥对这个测试十分的看重,几乎要达到100%的覆盖面积。

我当时特别的不是很理解,感觉自己测试下每个分支就好了,不用搞的那么复杂,后期又难以维护。

后来渐渐发觉,这是对自己代码的不负责任,也是对用户不负责任

Python里面的代码覆盖率测试工具叫做Coverage
大神根据Coverage也为Django量身设计了Django_coverage
Django_coverage官方网址:https://bitbucket.org/kmike/django-coverage
GitHub地址:https://github.com/kmike/django-coverage

2. 业务背景

假设我们在线开发了一个网站,交给业务测试的同事去进行功能测试。那他们是怎么测试的呢?通常情况下,无非是开发人员把网站部署好了,然后测试人员把网上所有功能都试用一遍,包括一些异常使用情况。对于业务测试来说,只要我把所有的功能点都测了,把所有异常使用情况也测到了,那就完成了。但是对于开发来说,我比较好奇的是,你是否把我写的所有代码都跑到了?会不会存在一些代码,只有在很特殊的情况下才能触发,而你从来没有测到过这些情况?这时,可能就需要代码覆盖率来出马了。

其实我首先想到了xdebug来测试覆盖率,只需要两三个函数即可,如下:

xdebug_start_code_coverage(); //开始收集代码行覆盖情况

xdebug_get_code_coverage(); //获取截至目前所跑过的代码文件名和行号

xdebug_stop_code_coverage(); //停止收集代码行覆盖情况

xdebug提供的接口可以用于测试行覆盖率,这是否能满足要求呢?其实,行覆盖率颗粒度有点细,实际项目中,开发人员可能会对代码进行微调。比如,这次测试,你跑过了A.php文件的第10行,但是我有一天对A.php进行了微调,在A.php第9行和第10行之间又加了两行代码。于是,原来的第10行变为了第12行,而xdebug的行覆盖信息只记录了行号……这样之前的数据岂不是不准确了么。。。考虑再三,我觉得函数覆盖是个不错的颗粒度。在相对成熟的项目中,很少有大规模函数变动的情况。不过问题是,xdebug并没有提供函数覆盖的接口。

于是,我们现在碰到的场景是:

【1】希望测到某次测试中所覆盖的所有函数列表,知道这个项目总共有多少个函数,计算一下覆盖率是否足够高。

【2】测试完成之后,要生成一份覆盖率报告,将代码的覆盖情况可视化。

【3】完整测试的流程如下:

图片 1

其中插桩的意思是在测试执行之前的一些准备工作。

Jacoco代码覆盖率

JaCoCo is a free code coverage library for Java, which has been created by the EclEmma team based on the lessons learned from using and integration existing libraries for many years.

JaCoCo是一个免费的Java代码覆盖库,由EclEmma团队根据多年来使用和集成现有库的经验教训创建。

这是其官网介绍,也就是说,这个插件可以检测到你写了多少个测试。

而这些测试又对你的代码覆盖了多少

如何安装

本人使用环境:python3.4, django1.8,时间2016-06-21
截止目前,使用pip install django_coverage安装,无法运行,因为pypi仓库的版本比较老。所以只能下载源代码在手动setup.py安装。
git clone https://github.com/kmike/django-coverage.git
cd django_coverage
python setup.py install
安装成功。

本文由澳门威尼斯人平台发布于澳门威尼斯人平台,转载请注明出处:代码测试覆盖率

关键词: