python接口测试覆盖率统计_pytest文档57-计算单元测试代码覆盖率(pytest-cov)
前言
我们在做测试的时候,经常遇到领导的灵魂拷问:你的测试用例覆盖率是多少,达到100%了么?你如何保证你的测试质量?
测试用例的覆盖率如何统计呢,如何知道开发的代码,我们都测到了,不会存在漏测的情况。
pytest-cov
先命令行安装 pytest-cov 2.10.1版本
pip install pytest-cov==2.10.1
环境要求:
1.python3.6.6 版本
备注:其它版本没试过
python3.6.0会遇到以下问题
INTERNALERROR>raise CoverageException("Couldn't use data file {!r}:{}".format(self.filename, msg))
INTERNALERROR> coverage.misc.CoverageException: Couldn't use data file'C:\\Users\\Desktop\\Pytest\\.coverage':
Safety level may not be changed inside a transaction
解决办法:安装3.6.1以上版本
实现功能
在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,
比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。
单元测试的方法有:语句覆盖/判定覆盖/条件覆盖/路径覆盖
先看一个简单的案例,前端实现一个功能,根据接口返回的不同code值,判断支付的结果,给用户返回提示友好的信息
前端实现功能:根据接口返回的不同code值,判断支付的结果,给用户返回提示友好的信息
接口返回格式:
{
"code": 0,
"msg": "success!",
"data": []
}
错误码参照
0 - 成功
30000 - 参数错误
30001 - 余额不足
30002 - 达到当天最大额度
201102 - 银行卡被冻结
实现代码
'''
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
接口返回格式
{
"code": 0,
"msg": "success!",
"data": []
}
错误码参照
0 - 成功
30000 - 参数错误
30001 - 余额不足
30002 - 达到当天最大额度
201102 - 银行卡被冻结
'''
# pay.py
def pay_status(result):
'''根据接口返回code状态,给用户提示对应的结果'''
if result.get("code") == 0:
return "支付成功"
elif result.get("code") == 30000:
return "支付失败: %s" % result.get("msg")
elif result.get("code") == 30001:
return "支付失败: %s" % result.get("msg")
elif result.get("code") == 30002:
return "支付失败: %s" % result.get("msg")
elif result.get("code") == 201102:
return "支付失败: %s" % result.get("msg")
else:
return "支付失败: 系统异常,未知错误"
整个项目目录结构如下
src 是项目的源码
tests 是我们写的单元测试用例
src和tests放同一个项目的根目录下
用例设计
在tests/test_pay.py下写测试用例,先只写一个支付成功的案例
from src.pay import pay_status
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
def test_pay_success():
result = {
"code": 0,
"msg": "success!",
"data": []
}
assert pay_status(result) == "支付成功"
运行用例
运行用例的时候加上 --cov 参数
pytest --cov
运行结果
>pytest --cov
================================================= test session starts =================================================
platform win32 -- Python 3.6.6, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: D:\soft\pytest-demo-cov
plugins: change-report-1.0, cov-2.10.1, html-1.19.0, metadata-1.8.0
collected 1 item
tests\test_pay.py . [100%]
----------- coverage: platform win32, python 3.6.6-final-0 -----------
Name Stmts Miss Cover
---------------------------------------
src\__init__.py 0 0 100%
src\pay.py 13 9 31%
tests\__init__.py 0 0 100%
tests\test_pay.py 4 0 100%
---------------------------------------
TOTAL 17 9 47%
================================================== 1 passed in 0.10s ==================================================
从报告可以看出src\pay.py 的代码测试覆盖率是31%,其它文件都是100%覆盖,这就说明我们单元测试代码测试覆盖率是31%
还有一个指标是测试用例的执行率,测试用例在test_pay.py文件,执行率是100%,说明用例全部执行了。
coverage生成html报告
coverage 相关参数查看,使用pytest -h
> pytest -h
coverage reporting with distributed testing support:
--cov=[SOURCE] Path or package name to measure during execution (multi-allowed). Use --cov= to not do any
source filtering and record everything.
--cov-report=TYPE Type of report to generate: term, term-missing, annotate, html, xml (multi-allowed). term, term-
missing may be followed by ":skip-covered". annotate, html and xml may be followed by ":DEST"
where DEST specifies the output location. Use --cov-report= to not generate any output.
--cov-config=PATH Config file for coverage. Default: .coveragerc
--no-cov-on-fail Do not report coverage if test run fails. Default: False
--no-cov Disable coverage report completely (useful for debuggers). Default: False
--cov-fail-under=MIN Fail if the total coverage is less than MIN.
--cov-append Do not delete coverage but append to current. Default: False
--cov-branch Enable branch coverage.
--cov-context=CONTEXT
Dynamic contexts to use. "test" for now.
生成html的报告
pytest --cov --cov-report=html
执行完成,在项目根目录会生成 htmlcov 目录
运行 index.html 文件查看代码覆盖率
点开src\pay.py
想覆盖率达到100%,那得再继续写用例,让每个if分支情况都覆盖到
指定被测代码
如果我们想指定执行项目里面的某个模块,可以通过--cov=模块 来运行
pytest --cov=src
>pytest --cov=src
================================================= test session starts =================================================
platform win32 -- Python 3.6.6, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: D:\soft\pytest-demo-cov
plugins: change-report-1.0, cov-2.10.1, html-1.19.0, metadata-1.8.0
collected 1 item
tests\test_pay.py . [100%]
----------- coverage: platform win32, python 3.6.6-final-0 -----------
Name Stmts Miss Cover
-------------------------------------
src\__init__.py 0 0 100%
src\pay.py 13 9 31%
-------------------------------------
TOTAL 13 9 31%
================================================== 1 passed in 0.07s ==================================================
也可以指定具体的py模块名称
pytest --cov=src.pay
但不能写成pytest --cov=src/pay.py
python接口测试覆盖率统计_pytest文档57-计算单元测试代码覆盖率(pytest-cov)相关推荐
- python接口测试覆盖率统计_从 jacoco 报告数据分析,python 脚本实现增量覆盖率统计...
jacoco的增量覆盖率报告实现的逻辑和一些个人想法. jacoco报告分析 从jacococli.jar的使用方法可以看到,导出的文件格式有csv,xml,html等多种格式. 进行尝试后,可以看到 ...
- pytest文档57-计算单元测试代码覆盖率(pytest-cov)
前言 我们在做测试的时候,经常遇到领导的灵魂拷问:你的测试用例覆盖率是多少,达到100%了么?你如何保证你的测试质量? 测试用例的覆盖率如何统计呢,如何知道开发的代码,我们都测到了,不会存在漏测的情况 ...
- Python学习之批量word文档转pdf并统计其页码
pypdf2是一个Python模块,可以用来读取.写入和操作PDF文件.要安装pypdf2模块,请按照以下步骤操作: 确保你已经安装了Python.你可以在终端或命令提示符中输入python --ve ...
- python统计word词频_python统计word文档中的词频
如何将统计word文档中的词频呢?先用docx模块将word文档转变成txt格式,然后使用jieba模块进行分词,并统计词频.是不是很简单- #2020年3月10日 #Elizabeth from d ...
- Oracle并发(CONCURREMT)收集统计信息 (文档 ID 1555451.1)
Oracle并发(CONCURREMT)收集统计信息 (文档 ID 1555451.1) 编辑手记:从11.2开始,可以通过CONCURRENT参数,启用表或分区的并行扫描,加快统计信息的收集速度. ...
- 2021-01-26 Python自动化办公-处理word文档
Python自动化办公-处理word文档 年底项目投标,需要整理大量的内容,标书的很多内容是其实是之前的标书重复的,可以把对应的各个部分内容合并,然后再处理格式等.如果采用常规操作每次操作需要打开子目 ...
- python处理word或者pdf文件_利用python程序生成word和PDF文档的方法
一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用fr ...
- Python批量处理lrmx格式文档内指定内容
Python批量处理lrmx格式文档内指定内容 实现代码: import glob import random xing = [ '赵', '钱', '孙', '李', '周', '吴', '郑', ...
- PyPDF2--如何使用python操作你的PDF文档
PyPDF2–如何使用python操作你的PDF文档 前言 大家好!最近想操作一下PDF文档,总是收费,于是浅尝辄止地了解了一下python当中的PyPDF2这个库.借助本篇博客总结了一下个人所学到的 ...
- python爬虫爬取百度文档
使用python爬虫爬取百度文档文字 话不多说,直接上代码! import requests import reheaders = {"User-Agent": "Moz ...
最新文章
- 开始学习python
- 二十万字C/C++、嵌入式软开面试题全集宝典二
- rsync命令_浅谈利用rsync服务的攻击
- 基于以太坊网络的智能合约开发、部署和测试(入门)
- 物联网核心安全系列——智能家居与数据安全问题
- vba 判断目标单元格内容改变的代码_【VBA小代码】批量改变单元格部分字符格式...
- PowerDesigner数据库设计PDM基于Excel的导入导出总结
- 如何使用 AirPlay 在 Mac 上使用 HomePod?
- 架构之每天数十亿次请求的web应用经验分享
- 理解辐射校正、辐射定标、大气校正关系
- 我用Python爬取美食网站3032个菜谱并分析,真香!
- 什么是MBR/DPT/DBR/BPB?
- 华为云上云迁移工具案例实践:阿里云迁移到华为云
- 利用requests模块进行数据爬取的基本操作
- 数据表为什么又叫透明表?
- 穷人python入门教程视频_《穷》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
- 有故事的书单:June, 2018
- 【Python 实战基础】Python 中 PyQt6 的 QPen 介绍
- Multimodal Machine Learning: A Survey and Taxonomy/多模态机器学习综述
- 互联网晚报 | 11/22星期二 | 威马汽车上海全员工资打折;中国千万资产家庭达206万户;充电宝质量国家抽查不合格率达25%...