FastAPI 学习之路(四十九)WebSockets(五)修复接口测试中的问题

其实代码没有问题,但是我们忽略了一个问题,就是在正常的开发中,肯定是遇到过这样的情况,我们频繁的有客户端链接,断开连接,需要统一的管理这些链接,那么应该如何管理呢。其实可以声明一个类去管理这些链接。接下来我们看下该如何优化。

一、优化测试接口方法

1.定义链接管理类,处理所有链接

"""
websocket 链接管理
"""from typing import List, Dictfrom starlette.websockets import WebSocketclass ConnectionManager:def __init__(self):"""存放链接"""self.active_connections: List[Dict[str, WebSocket]] = []async def connect(self, user: str, ws: WebSocket):"""链接"""self.active_connections.append({"user": user, "ws": ws})async def disconnect(self, user: str, ws: WebSocket):"""断开链接,移除"""self.active_connections.remove({"user": user, "ws": ws})

2.修改应用代码

我们增加了链接,移除链接的操作,那么对应修改下代码

from connection_tool import ConnectionManager
from starlette.websockets import WebSocketDisconnect
ws_manager = ConnectionManager()@app.websocket("/items/ws")
async def websocket_endpoint(websocket: WebSocket,cookie_or_token: str = Depends(get_cookie_or_token),
):await websocket.accept()await ws_manager.connect(cookie_or_token, websocket)try:while True:data = await websocket.receive_text()await websocket.send_text(f"Message is: {data}")except WebSocketDisconnect as e:await ws_manager.disconnect(cookie_or_token, websocket)

3.测试 

这样我们在链接处理的时候就可以正常处理了。之前报错是因为我们没有正常的关闭链接导致的,那么我们再测试一下

"""
测试websockets
"""from fastapi.testclient import TestClient
from main import appdef test_websocket():client = TestClient(app)with client.websocket_connect("/items/ws?token=fake-token") as websocket:websocket.send_text("Hello, this is testing websocket")data = websocket.receive_text()print(data)assert str(data) == f"Message is: Hello, this is testing websocket"if __name__ == '__main__':test_websocket()

此时,发现代码不会再报错 

 二、增加测试用例并优化

1.增加用例代码

import unittestfrom fastapi.testclient import TestClientfrom main import appclass FastApiTestWeb(unittest.TestCase):def setUp(self) -> None:self.client = TestClient(app)def tearDown(self) -> None:self.client = Nonedef test_websocket(self):with self.client.websocket_connect("/items/ws?token=fake-token") as websocket:websocket.send_text("Hello, this is using test case to test websocket")data = websocket.receive_text()print(data)assert str(data) == "Message is: Hello, this is using test case to test websocket"def test_websocket_again(self):with self.client.websocket_connect("/items/ws?token=fake-token") as websocket:websocket.send_text("Hello, this is using test case to test websocket again")data = websocket.receive_text()print(data)assert str(data) == "Message is: Hello, this is using test case to test websocket again"if __name__ == '__main__':unittest.main()

2.执行用例

这样我们的一个测试用例就更加的完整了。我们执行正常是没有报错的

3. 查看代码的覆盖率 

pip install coverage

我们想要看下代码的覆盖率,应该如何看呢。我是用的coverage。

然后再report

  我们想看html测试报告,可以运行下 coverage html。

然后打开index.html

因为我的main.py还有其他的方法,我们还需要点进去看我们对应方法的覆盖率。

如果想要将覆盖率都达到100%,还需要针对其他方法增加测试用例。

到这里,我们对于WebSockets接口测试完毕,但是如果我们想实现上线通知,下线通知,如何实现呢?见下一节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习算法 —— BP神经网络

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 目录 BP神经网络简介和应用算法简介BP神经网络的优点BP神经网络的缺点算法应用实战演示库函数导入模型训练模型参数查看数据和模型可视化模型预测基于BP神经网络的乳腺癌分类实践BP神经网络简介和…

怎样优化 PostgreSQL 中对复杂的排序规则和排序方向的查询?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样优化 PostgreSQL 中对复杂的排序规则和排序方向的查询一、理解复杂排序规则和排序方向二、优化索引…

vue前端实现导出页面为word(两种方法)

将vue页面导出为word文档,不用写模板,直接导出即可。 第一种方法(简单版) 第一步:安装所需依赖 npm install html-docx-js -S npm install file-saver -S第二步:创建容器,页面使用方法 注意:在当前页面引…

SortTracker稳定追踪算法

此算法为基于Hungarian算法和KalmanTracker算法所实现的稳定追踪算法。算法需要依赖opencv库,请确保安装opencv库并正确引入所需头文件。使用时请包含头文件./include/SortTracker.hpp,以及opencv库文件。源文件为./src/SortTracker.cpp。 调用接口 算法整体包含在命名空间…

Linux进程信号总结

目录 信号入门 生活中的信号 技术应用角度的信号 信号的发送与记录 信号处理常见方式概述 产生信号 通过终端按键产生信号 通过系统函数向进程发信号 由软件条件产生信号 ​编辑 由硬件异常产生信号 阻塞信号 信号其他相关常见概念 在内核中的表示 sigset_t …

【Python】Arcpy将excel点生成shp文件

根据excel点经纬度数据,生成shp,参考博主的代码,进行了修改,在属性表中保留excel中的数据。 参考资料:http://t.csdnimg.cn/OleyT 注意修改以下两句中的数字。 latitude float(row[1]) longitude float(row[2])imp…

ARIMA模型(AutoRegressive Integrated Moving Average Model)

ARIMA模型(AutoRegressive Integrated Moving Average Model)是一种广泛应用于时间序列数据分析和预测的统计模型。该模型结合了自回归(AR)、差分(I)和移动平均(MA)三个主要组件&…

为什么MySQL会选择B+树作为索引

为什么MySQL会选择B树作为索引 在数据库管理系统中,索引是提升查询效率的关键技术之一。MySQL作为广泛使用的关系型数据库管理系统,其核心存储引擎InnoDB选择B树作为其索引结构,这一选择背后蕴含了深刻的性能和存储效率考量。本文将简要介绍…

输出调节求解跟踪问题(二阶线性系统)

本文研究了一种基于增广系统的领导者-跟随者控制框架,旨在实现跟随者系统对领导者参考信号的精确跟踪。首先,建立了跟随者和领导者的独立状态空间方程,分别描述了它们的动态行为和输出关系。随后,通过将两者的状态空间方程结合成增…

在Windows环境下安装pycharm

Python环境搭建 第一步下载安装python 等待安装完成 验证python是否安装成功 Python开发工具安装部署 JetBrains: Essential tools for software developers and teams PyCharm: the Python IDE for data science and web development 下载社区版本的PyCharm 双击打开下载好的…

Web 中POST为什么会发送两次请求

文章目录 前言一、浏览器的重试机制二、跨域请求与预检请求三、表单的自动提交四、服务器配置问题五、前端代码的重复执行六、同源策略与CORS总结 前言 我们在做Web开发时,经常会使用浏览器F12查看请求参数是否正确,但是会发现POST请求,一个地…

【运维资料大全】运维全套资料整理(word原件完整版)

信息安全类、运维类资料整合: 1. 等保测评模板 2. 安全检查表(IDS,Linux,数据库,Tomcat,防火墙等) 3. 服务器安全巡检表 4. 网络定向攻击风险分析表 5. 应用系统常规检测表 6. 企业漏洞管理50个…

TS 入门(三):Typescript函数与对象类型

目录 前言回顾1. 函数类型a. 基本函数类型b. 可选参数和默认参数c. 剩余参数 2. 对象类型a. 基本对象类型b. 可选属性和只读属性 3. 类型别名和接口a. 类型别名b. 接口扩展 4. 类型推断和上下文类型a. 类型推断b. 上下文类型 扩展知识点:函数重载结语 前言 在前两章…

【银河麒麟操作系统】虚机重启lvs丢失现象分析及处理建议

了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区:https://product.kylinos.cn 环境及现象描述 40台虚机强制重启后,其中8台虚机找不到逻辑卷导致启动异常,后续通过pvcreate 修复重建pv,激活vg和lv并修复…

大模型基础知识-LoRA与QLoRA

介绍 LoRA 与 QLoRA 1. LoRA (Low-Rank Adaptation) LoRA 是一种用于大规模语言模型 (LLM) 的参数高效微调技术,旨在减少微调大模型所需的计算资源和存储空间。LoRA 的核心思想是将全量参数更新分解为低秩矩阵的形式,从而显著减少参数数量和计算开销。 …

WSL-Ubuntu20.04训练环境配置

1.YOLOv8训练环境配置 训练环境配置的话就仍然以YOLOv8为例,来说明如何配置深度学习训练环境。这部分内容比较简单,主要是安装miniAnaconda以及安装torch和torchvision. 首先是miniAnaconda的安装(参考官网的教程Miniconda — Anaconda ),执行…

CH552G使用IAP下载

常见下载中的方式ISP,IAP,ICP 参考,CH552G中文手册,参考1 ISP:In System Programing,在系统编程。是常见的,使用软件,先将某个引脚(例如boot)连接到合适的电…

Spring源码注解篇三:深入理解@Component注解

Component及其派生注解的源码 Spring框架作为Java开发中不可或缺的一部分,其依赖注入机制的核心是通过注解来实现的。本文将深入探讨Spring中Component及其派生注解的源码实现,分析Spring如何通过类路径扫描(Classpath Scanning)和…

【笔记】一起齿轮箱的故障和相应的数学模拟实验

1.齿轮箱故障一例 出处:设备的故障识别 GearBox的频谱图,原作者不知道是从哪里拷贝来的,待会儿确认一下。 齿轮啮合频率GMF等于齿数乘以齿轮转速频率: ★齿轮啮合频率两边有边频,间距为1X(这是由冲击响应…

JS【实用教程】(2024最新版)

JS 简介 JavaScript 简称 JS,可运行于浏览器 或 node 环境。 JS 的特点 单线程——同一时间只能执行一个任务,多个任务时会排队,后续任务必须等到前一个任务结束才能开始执行。 为什么JavaScript不能有多个线程? 因为作为浏览器脚…