提升质量:利用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提供了一个自定义 ...
随机推荐
- Java垃圾回收器总结
什么是Java垃圾回收器 Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的自动分配(Memory Allocation).自动回收( ...
- 加密 DB2 Universal Database 中的数据值
在本文中,我们演示了 IBM DB2 Universal Database Version 7.2 中新的加密函数如何提供简单方式来加密敏感数据. 评论: Bruce BenfieldIBM Ric ...
- Displaying XML in a Swing JTree
Overview It seems obvious enough: You have an XML document or fragment. XML is hierarchical. A Swing ...
- 新型大语言模型的预训练与后训练范式,Meta的Llama 3.1语言模型
前言:大型语言模型(LLMs)的发展历程可以说是非常长,从早期的GPT模型一路走到了今天这些复杂的.公开权重的大型语言模型.最初,LLM的训练过程只关注预训练,但后来逐步扩展到了包括预训练和后训练在内 ...
- Reverse the Rivers 题解
原题链接https://codeforces.com/problemset/problem/2036/E (暂时不会弄翻译,所以不上原题了) 说一下我对题意的理解吧 有n个国家,每个国家有k个区域,用 ...
- WinForm 通用权限框架,简单实用支持二次开发
前言 开发一个安全.灵活且易于维护的应用程序是至关重要的.特别是在企业级应用中,权限管理不仅涉及到用户访问控制,还关系到数据的安全性和系统的稳定性. 推荐一款 WinForm 通用.完整的权限架构开发 ...
- 跨语言国密SM4加解密实战:Java与Golang无缝对接
概述 本文详细介绍了如何在Java和Golang中使用SM4算法进行对称加密和解密操作.通过使用CBC模式和PKCS5填充,成功实现了跨语言的数据加密和解密.无论是Java加密后在Golang解密,还 ...
- Javadoc 使用详解
很多程序对Javadoc都不重视,认识不到Javadoc的作用,很多人都是这样认为的:"我只要写好功能就够了,写Javadoc太浪费时间,也没啥作用,还不如用写Javadoc的时间再多些个功 ...
- Win7下C盘无法创建文件解决办法
Win7下C盘无法创建文件解决办法: To fix it, just turn off the User Account Control (UAC). In Windows 8, do not tur ...
- leetcode 05 回文字符串
leetcode 05 回文字符串 1. 描述 给你一个字符串,找到里面最长的回文字符串 2. 事例 示例 1: 输入:s = "babad" 输出:"bab" ...