提升质量:利用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 + Ckill -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 + Ckill -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 + Ckill -2命令来停止项目,以避免覆盖率结果的丢失。

项目停止运行后,将在根目录下生成.coverage.*格式的结果文件。

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

coverage combine

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

coverage html

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

提升质量:利用Coverage分析Python Web项目的测试覆盖的更多相关文章

  1. Pycharm+django新建Python Web项目

    这两天初学Python,首先是学习Python语法有PyCharm就可以运行Console程序了,因为是初学所以,尽量写的比较详细,包括参考的资料地址...   1.下载Python,并安装[本文版本 ...

  2. [深度分析] Python Web 开发框架 Bottle

    [深度分析] Python Web 开发框架 Bottle(这个真的他妈的经典!!!) 作者:lhf2009913 Bottle 是一个非常精致的WSGI框架,它提供了 Python Web开发中需要 ...

  3. Java归去来第2集:利用Eclipse创建Maven Web项目

    一.前言 如果还不了解剧情,请返回第一集的剧情          Java归去来第1集:手动给Eclipse配置Maven环境 二.利用Eclipse创建Maven Web项目 选择File-New- ...

  4. Linux06 /Python web项目部署

    Linux06 /Python web项目部署 目录 Linux06 /Python web项目部署 1. 部署方式 2. 纯后端代码部署/CRM为例 1. 部署方式 2. crm项目详细部署步骤 3 ...

  5. 利用Gulp优化部署Web项目[长文慎入]

    Gulp Gulp是一款项目自动化的构建工具,与Grunt一样可以通过创建任务(Task)来帮助我们自动完成一些工作流的内容.当然,今天我们的内容并不是讨论这二者的区别,仅仅是介绍介绍如何利用Gulp ...

  6. supervisor+gunicorn部署python web项目

    有了Nginx,对于Tomcat没有必要详细了解. 有了supervisor,再也没有必要把一个程序设置成服务.驻留进程,supervisor真是一个相见恨晚的好工具. 在Tomcat中,所有的web ...

  7. idea 中利用maven创建java web 项目

    转自:http://www.linuxidc.com/Linux/2014-04/99687.htm 本文主要使用图解介绍了使用IntelliJ IDEA 12创建Maven管理的Java Web项目 ...

  8. 利用Maven建立java web项目

    方法一:在IntelliJ IDEA中创建maven web项目 一.在新建项目对话框中,选择“Maven”类型,设置好jdk,勾选“create from archetype”,在列表中选择“mav ...

  9. Python+Django(Python Web项目初体验)

    参考:https://blog.csdn.net/qq_34081993/article/details/79229784 Django是一个开放源代码的Web应用框架,由Python写成. 安装Dj ...

  10. Python web 项目的依赖管理工具

    Poetry可以帮助你声明.管理和安装Python项目的依赖项,确保你可以在任何地方都拥有正确的堆栈. Poetry支持Python 2.7 和Python 3以上 安装 Poetry提供了一个自定义 ...

随机推荐

  1. (Redis基础教程之十) 如何在Redis中运行事务

    介绍 Redis是一个开源的内存中键值数据存储.Redis允许您计划一系列命令,然后一个接一个地运行它们,这一过程称为_transaction_.每个事务都被视为不间断且隔离的操作,以确保数据完整性. ...

  2. 鸿蒙ArkUI-X已更新适配API13啦

    ArkUI-X 5.0.1 Release版配套OpenHarmony 5.0.1 Rlease,API 13,新增适配部分API 13接口支持跨平台:框架能力进一步完善,支持Android应用非压缩 ...

  3. mindoc 迁移

    1.备份数据库 mysqldump --databases mindoc_db > mindoc_db.sqlmysqldump -u USER_NAME -p PASSWORD [其他选项] ...

  4. HarmonyOS Next 入门实战 - 导航框架:HMRouter

    基础知识 目前官方推荐的最佳解决方案,是官方对于Navigation导航组件的封装,使用更简单便捷.如果熟悉Navigation的话,使用起来很快上手. 首先先集成HMRouter模块 使用命令行安装 ...

  5. Python 潮流周刊#80:Django 项目性能调优(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  6. Kettle连接MySQL数据库时提示Driver class 'org.gjt.mm.mysql.Driver' could not be found

    使用Kettle连接MySQL数据库时,提示以下连接提示信息导致我们无法对数据库进行连接: Driver class 'org.gjt.mm.mysql.Driver' could not be fo ...

  7. Excel VLOOKUP 函数入门教程

    一.引言 在日常工作中,Excel 是处理数据的强大工具之一,而 VLOOKUP 函数作为 Excel 中最常用的查找函数之一,能够帮助用户在表格或数值数组中快速定位并返回所需的数据.它的工作原理是在 ...

  8. 实用干货分享(3)- Git常用操作干货分享

    官方学习地址 https://git-scm.com/book/zh/v2 简单的代码提交流程 1. git status 查看工作区代码相对于暂存区的差别: 2. git add . 将当前目录下修 ...

  9. JunitGenerator

    ######################################################################################## ## ## Avail ...

  10. Qt编写地图综合应用4-仪表盘

    一.前言 仪表盘在很多汽车和物联网相关的系统中很常用,最直观的其实就是汽车仪表盘,这个以前主要是机械的仪表,现在逐步改成了智能的带屏带操作系统的仪表,这样美观性和拓展性功能性大大增强了,上了操作系统的 ...