前言

我们在做测试的时候,经常遇到领导的灵魂拷问:你的测试用例覆盖率是多少,达到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 - 银行卡被冻结

实现代码

# pay.py
'''
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
接口返回格式
{"code": 0,"msg": "success!","data": []
}错误码参照
0 - 成功
30000 - 参数错误
30001 - 余额不足
30002 - 达到当天最大额度
201102 - 银行卡被冻结
'''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 itemtests\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 anysource 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=CONTEXTDynamic 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 itemtests\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

2020年第五期《python接口自动化+测试开发》课程,10月11号开学(火热报名中!)本期上课时间:10月11号-1月3号,每周六、周日晚上20:30-22:30联系微信/QQ:283340479

createprocess失败代码2_pytest文档57单元测试代码覆盖率(pytestcov)相关推荐

  1. 断言失败的vc++文档_了解C / C ++中的断言

    断言失败的vc++文档 In this article, we'll take a look at using the concept of assertions, using the assert ...

  2. 基于JavaWeb平台的常用物联网硬件接口对接代码总结文档_田超凡

    基于JavaWeb平台的常用物联网硬件接口对接代码总结文档                                                                       ...

  3. 微软对外开放更多软件技底层代码术文档

    微软对外开放更多软件技底层代码术文档 [url]http://www.sina.com.cn[/url] 2008年04月09日 07:17  新浪科技 新浪科技讯 北京时间4月9日消息,据国外媒体报 ...

  4. 不给代码写文档,让代码文档化

    这是程序员讨论了很久的一个话题:要不要给代码写文档?值得给代码写文档吗? 我曾经觉得这个话题实在是让人难以应付.也认为除去一些特殊的情况(比如编写公用 API),代码文档并不是那么必要.直到有一天,我 ...

  5. MD500E源码和代码解析文档 代码包含了同步机FOC控制算法、电阻、电感、磁链、反电动势

    MD500E源码和代码解析文档 代码包含了同步机FOC控制算法.电阻.电感.磁链.反电动势.死区补偿.过调制限制.弱磁等算法,支持无感和有感,亲自带电机运行过. ID:6715672157800168 ...

  6. 该死的“代码就是文档”

    我在<专业嵌入式软件开发>一书中指出,编写言简意骇的文档是实施高质高效软件开发的关键要素之一.在此结合自己的工作体会,再谈一谈软件开发活动中文档的重要性.切入正题之前,先让我们浏览二个工作 ...

  7. Linux SDIO WIFI Marvell8801/Marvell88w8801(一) --- 代码及文档介绍

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  8. 搭建去中心化交易所——分享一个简单的DEX项目代码及文档

    分享一个简单的DEX项目代码及文档 Dex.top项目源码及文档分享 // DEx.top - Instant Trading on Chain // // Author: DEx.top Teamp ...

  9. python如何读取公共盘的文档_如何使用 Sphinx 给 Python 代码写文档 | Linux 中国

    最好将文档作为开发过程的一部分.Sphinx 加上 Tox,让文档可以轻松书写,并且外观漂亮.-- Moshe Zadka Python 代码可以在源码中包含文档.这种方式默认依靠 docstring ...

最新文章

  1. 编写python高质量python代码的59个有效方法
  2. 做程序员的纠结在哪里
  3. 【C语言基础】C语言异常捕获机制 - assert
  4. 又拍云php表单,又拍云的表单api提交
  5. so库调用java函数_linux下so动态库调用主程序函数
  6. 合肥python招聘_2020年合肥京东方招聘官网招聘-合肥京东方招聘官网招聘求职信息-拉勾招聘...
  7. 广告学计算机平面设计(1)形考5,中等职业学校计算机平面设计专业教学标准 (1)...
  8. 计算机网络学习笔记(29. DNS概述)
  9. android——数据库版本升/降级问题
  10. 计算机辅助设计autocad2005(建筑)四级考试,计算机辅助设计(AutoCAD平台)
  11. 8位单片机003兼容替换意法半导体STM8S003F3P6
  12. 公文流转 java_javaweb 公文流转系统制作
  13. 北京邮电大学计算机导论试题,2020年秋季《北京邮电大学网络教育》各种考试题目汇总.docx...
  14. 什么是独立主机?独立主机的优势有些?
  15. 清歌输入法 for Mac(最好用的五笔输入法
  16. 怎样P漫画脸?这三个简单方法分享给你
  17. 2015年高教社杯全国大学生数学建模竞赛A题 “互联网+”时代的出租车资源配置
  18. 开始使用MarkDown
  19. iOS安全–看了这个,你还敢用分身版微信吗?
  20. 20世纪英国癌症三级预防研究

热门文章

  1. Nginx启动后无法访问页面
  2. 第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 [计算机组成原理笔记]
  3. 【剑指offer】面试题27:二叉树的镜像(Java)
  4. Leetcode--448. 找到所有数组中消失的数字
  5. 计算机丢失first,求大神解答硬盘驱动丢失怎么办
  6. excel模糊搜索_Excel进阶篇:星号*用法,学会这些功能的,都按时加班了
  7. python实现栈的操作入站出站查找元素等_Python实现的栈(Stack)
  8. memcached客户端_分布式算法真是吊炸天 – memcached - 第287篇
  9. Halcon算子学习:get_sheet_of_light_result
  10. 1.MySQL数据库的介绍