提升质量:利用Coverage分析Python Web项目的测试覆盖
提升质量:利用Coverage分析Python Web项目的测试覆盖
鉴于不同框架的运行机制各有差异,当利用Coverage工具对Python Web项目的测试覆盖率进行分析时,必须采取针对性的方法来确保获取精确的测试覆盖率数据。以下是我针对Django框架与Flask框架在使用Coverage方面的详尽总结。
Django框架
首先,我们需要在manage.py文件中添加coverage模块的相关代码,以实现测试覆盖率的统计。具体步骤如下:
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
import coverage
import uuid
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'atcap.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
# 初始化coverage对象,自定义生成的结果文件
cov = coverage.Coverage(data_file=f'.coverage.{str(uuid.uuid4())}')
# 开始统计覆盖率
cov.start()
# 执行测试代码
main()
# 停止统计覆盖率
cov.stop()
# 生成覆盖率报告
cov.report()
接下来,我们可以运行Django项目,并访问相关的接口以触发测试覆盖率的统计:
python manage.py runserver 0.0.0.0:8000


在访问完所需的接口后,使用Ctrl + C停止Django项目。请注意,由于coverage模块在实现上使用了atexit模块注册回调函数,在Python进程正常退出或以SIGINT(信号2)退出时,才会将内存中的覆盖率结果写入文件。因此,确保使用Ctrl + C或kill -2命令来停止项目,以避免覆盖率结果的丢失。
项目停止运行后,将在根目录下生成.coverage.*格式的结果文件。

为了生成统一的覆盖率报告,我们需要将这些结果文件合并为一个.coverage文件:
coverage combine


然后,使用以下命令在根目录下生成HTML格式的覆盖率报告:
coverage html


最后,通过访问htmlcov目录下的index.html文件,我们可以直观地查看项目的测试覆盖情况,并根据报告中的信息进行针对性的优化。

FastAPI框架
首先,我们需要在run.py文件中添加coverage模块的相关代码,以实现测试覆盖率的统计。具体步骤如下:
import uvicorn
import coverage
def run_coverage(app_module: str, app_name: str, host: str, port: int):
# 初始化coverage对象,自定义生成的结果文件
cov = coverage.Coverage()
try:
# 开始统计覆盖率
cov.start()
# 运行Uvicorn ASGI服务器
uvicorn.run(f"{app_module}:{app_name}", host=host, port=port, reload=False, log_config="uvicorn_loggin_config.json")
finally:
# 停止统计覆盖率并保存数据
cov.stop()
cov.save()
if __name__ == "__main__":
run_coverage("app", "app", "0.0.0.0", 9999)
接下来,我们可以运行FastAPI项目,并访问相关的接口以触发测试覆盖率的统计:
python run.py

在访问完所需的接口后,使用Ctrl + C停止Django项目。请注意,由于coverage模块在实现上使用了atexit模块注册回调函数,在Python进程正常退出或以SIGINT(信号2)退出时,才会将内存中的覆盖率结果写入文件。因此,确保使用Ctrl + C或kill -2命令来停止项目,以避免覆盖率结果的丢失。
项目停止运行后,将在根目录下生成.coverage结果文件。

然后,使用以下命令在根目录下生成HTML格式的覆盖率报告:
coverage html

最后,通过访问htmlcov目录下的index.html文件,我们可以直观地查看项目的测试覆盖情况,并根据报告中的信息进行针对性的优化。

Flask框架
首先,写一段基本的flask代码,如下:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/hello', methods=['GET'])
def hello():
res = {
"meg": "hello",
"code": 20000
}
return jsonify(res)
@app.route('/goodbye', methods=['GET'])
def goodbye():
res = {
"meg": "goodbye",
"code": 20000
}
return jsonify(res)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
接下来,我们可以使用coverage命令运行flask框架,并访问相关的接口以触发测试覆盖率的统计:
coverage run --parallel-mode cov_falsk.py


在访问完所需的接口后,使用Ctrl + C停止Django项目。请注意,由于coverage模块在实现上使用了atexit模块注册回调函数,在Python进程正常退出或以SIGINT(信号2)退出时,才会将内存中的覆盖率结果写入文件。因此,确保使用Ctrl + C或kill -2命令来停止项目,以避免覆盖率结果的丢失。
项目停止运行后,将在根目录下生成.coverage.*格式的结果文件。

为了生成统一的覆盖率报告,我们需要将这些结果文件合并为一个.coverage文件:
coverage combine


然后,使用以下命令在根目录下生成HTML格式的覆盖率报告:
coverage html


最后,通过访问htmlcov目录下的index.html文件,我们可以直观地查看项目的测试覆盖情况,并根据报告中的信息进行针对性的优化。

提升质量:利用Coverage分析Python Web项目的测试覆盖的更多相关文章
- Pycharm+django新建Python Web项目
这两天初学Python,首先是学习Python语法有PyCharm就可以运行Console程序了,因为是初学所以,尽量写的比较详细,包括参考的资料地址... 1.下载Python,并安装[本文版本 ...
- [深度分析] Python Web 开发框架 Bottle
[深度分析] Python Web 开发框架 Bottle(这个真的他妈的经典!!!) 作者:lhf2009913 Bottle 是一个非常精致的WSGI框架,它提供了 Python Web开发中需要 ...
- Java归去来第2集:利用Eclipse创建Maven Web项目
一.前言 如果还不了解剧情,请返回第一集的剧情 Java归去来第1集:手动给Eclipse配置Maven环境 二.利用Eclipse创建Maven Web项目 选择File-New- ...
- Linux06 /Python web项目部署
Linux06 /Python web项目部署 目录 Linux06 /Python web项目部署 1. 部署方式 2. 纯后端代码部署/CRM为例 1. 部署方式 2. crm项目详细部署步骤 3 ...
- 利用Gulp优化部署Web项目[长文慎入]
Gulp Gulp是一款项目自动化的构建工具,与Grunt一样可以通过创建任务(Task)来帮助我们自动完成一些工作流的内容.当然,今天我们的内容并不是讨论这二者的区别,仅仅是介绍介绍如何利用Gulp ...
- supervisor+gunicorn部署python web项目
有了Nginx,对于Tomcat没有必要详细了解. 有了supervisor,再也没有必要把一个程序设置成服务.驻留进程,supervisor真是一个相见恨晚的好工具. 在Tomcat中,所有的web ...
- idea 中利用maven创建java web 项目
转自:http://www.linuxidc.com/Linux/2014-04/99687.htm 本文主要使用图解介绍了使用IntelliJ IDEA 12创建Maven管理的Java Web项目 ...
- 利用Maven建立java web项目
方法一:在IntelliJ IDEA中创建maven web项目 一.在新建项目对话框中,选择“Maven”类型,设置好jdk,勾选“create from archetype”,在列表中选择“mav ...
- Python+Django(Python Web项目初体验)
参考:https://blog.csdn.net/qq_34081993/article/details/79229784 Django是一个开放源代码的Web应用框架,由Python写成. 安装Dj ...
- Python web 项目的依赖管理工具
Poetry可以帮助你声明.管理和安装Python项目的依赖项,确保你可以在任何地方都拥有正确的堆栈. Poetry支持Python 2.7 和Python 3以上 安装 Poetry提供了一个自定义 ...
随机推荐
- 命令行应用开发初学者指南:脚手架篇、UI 库和交互工具
在日常的前端开发工作中,我们经常依赖各种命令行工具来提高效率和代码质量.例如,create-react-app 和 eslint 等工具不仅简化了项目的初始化过程,还能自动执行代码检查和格式化任务.当 ...
- 对于web性能优化我有话说!
web性能是什么呢? 简单来说就是咱们的项目打开的快不快,举以下几个例子 表单提交 列表切换 动画的流程性 打开速度 MDN上对web性能的定义则是Web性能是网站或应用程序的客观度量和可感知的用户体 ...
- vue3版本下element-plus和antd-vue选哪个更好一些?
Vue 3 发布后,各家第三方库开始陆续重构并支持 Vue 3 ,国内两大知名框架 Element Plus 和 Ant Design Vue 也相续发布新版支持 Vue 3.到底应该怎么选择呢? E ...
- COSBrowser 文件夹分享——多端文件实时共享
您还在为临时分享某个文件夹而烦恼吗? 您是否对授权的复杂度感到震惊? 关于存储桶 Policy 权限,您是否很迷茫,不知如何设置? 不用着急,用 COSBrowser 开始文件夹分享,一键简化分享 ...
- 中电金信:技术实践|Flink维度表关联方案解析
导语:Flink是一个对有界和无界数据流进行状态计算的分布式处理引擎和框架,主要用来处理流式数据.它既可以处理有界的批量数据集,也可以处理无界的实时流数据,为批处理和流处理提供了统一编程模型. 维 ...
- Slate文档编辑器-TS类型扩展与节点类型检查
Slate文档编辑器-TS类型扩展与节点类型检查 在之前我们基于slate实现的文档编辑器探讨了WrapNode数据结构与操作变换,主要是对于嵌套类型的数据结构类型需要关注的Normalize与Tra ...
- 【Javaweb】【答卷】萌狼蓝天大二上学期期末Javaweb考试复习卷(一)
- Alpine介绍与apk的基本使用
前言 Alpine是一个面向安全的轻量级的Linux发行版,相比与CentOS,ubuntu体积小很多,大约只有5M左右,由于体积小的原因,在很多场景下都会使用它来按需制作一些轻量级镜像,虽然体积小但 ...
- Qt编写的项目作品21-网络请求客户端/服务器
一.实现原理 http请求就是tcp通信,所以第一步实例化QTcpServer类监听端口,并绑定newConnection信号槽. 一旦有新的连接,交给专门的解包类处理,将对应的数据解包,http请求 ...
- 编译Sophus报错: error: implicitly-declared 的参考解决方法
一.问题描述 自己在编译Sophus时遇到如下错误: /home/wong/Datum/third_party/Sophus-1.0.0-template/Sophus-1.0.0/test/core ...