Python中利用coverage库生成测试用例代码覆盖率报告
前言:开发者测试(DT)工作中,往往需要在Tests文件夹目录下撰写业务/功能/算法代码的测试单元,从而在日常开发工作中更好的检验某些单元模块。本文将介绍如何使用python中自带的coverage库来生成所写测试用例覆盖率报告。
一、准备
code
├─ src
│ ├─ application.py……………………….业务代码(被测试代码)
└─ DT_test ……………………………………开发者测试模块
├─ test_application.py……………….单元测试
二、步骤
Step1:在Terminal 中利用命令行安装python自带的converage库和unittestreport库
pip install coverage
pip install unittestreport
step2:基于以下两种方法生成对应测试用例的代码覆盖率报告
方法一:利用IDLE工具栏做局部函数方法的代码覆盖率分析
1)右击指定测试单元执行用例的三角型,点击Run 'xxxx' with Coverage
2)运行对应的测试单元,将得到如下的覆盖率初步统计
3)点击上方工具栏第三个按钮“Generate Coverage Report”,填写路径,导出代码覆盖率报告,注意修改路径后,要保留htmlReport文件夹
4)在导出的代码覆盖率报告中,查看该测试用例的代码覆盖率,可以分Files、Functions、Classes维度去查看不同模块在测试用例执行过程中是否被覆盖到(百分比代表被执行代码行数占文件全量代码行数的占比)
方法二:自定义report脚本并运行测试用例覆盖率生成报告
1)在DT_test文件夹下创建report.py
code
├─ src
│ ├─ application.py………………………业务代码(被测试代码)
└─ DT_test ……………………………………开发者测试模块
├─ test_application.py……………….单元测试├─ report.py……………………………. 单元测试代码覆盖率报告
2)按如下代码模板,完成代码覆盖率报告生成的脚本开发
import os
import unittest
import coverage
from unittestreport import TestRunner
# 1)测试用例绝对路径
current_absolute_path = os.path.abspath(os.getcwd())
# 2)设置指定的某个测试用例单元
one_suit = unittest.TestLoader().loadTestsFromName("test_application.TestApplication.test_application_run")
# 2)设置指定的某个测试路径
test_suite = unittest.defaultTestLoader.discover(os.path.join(current_absolute_path, "DT_test"))
# 3)测量代码覆盖率
cov = coverage.Coverage()
cov.start()
# 4)设置代码覆盖率报告导出的路径
dir = os.path.join(current_absolute_path, "code_test_report")
if not os.path.exists(dir):
os.makedirs(dir)
# 5)定义测试单元实例,如果是测试某个具体的函数方法,第一个入参填ont_suit指定的测试用例方法
# 5)定义测试单元实例,如果是全量测试某些DT用例,第一个入参填test_suite指定的测试用例路径
one_runner = TestRunner(one_suit,
filename="xxxxxx测试报告.html",
report_dir=dir,
title="xxxxx测试报告",
tester="fty",
desc="xxxx测试报告")
one_runner.run()
# 6)停止测量代码覆盖率
cov.stop()
# 7)导出测试单元代码覆盖率分析报告
cov.html_report(directory=os.path.join(dir, 'cov'), title="xxxxx测试代码覆盖率报告")
3)执行report.py,DT_test文件目录下将自动生成code_test_report文件夹,点击文件夹中后缀为html的相关文件,即可得到对应的测试用例执行报告和相关的代码覆盖率统计分析报告。
code
├─ src
│ ├─ application.py………………………业务代码(被测试代码)
└─ DT_test ……………………………………开发者测试模块
├─ test_application.py……………….单元测试├─ report.py……………………………. 单元测试代码覆盖率报告生成脚本
├─ code_test_report………………….单元测试代码覆盖率报告文件夹
三、后话
上述代码是在笔者开发过程中实践出的简单易上手的方法,只是抛砖引玉,若需要系统掌握coverage库的用法,读者可以自行查阅相关使用技巧。
作者:TFY_Newone