新闻详情

新闻详情

首页 / 资讯中心 / 详情

用 TestClient 完成 FastAPI WebSocket 测试的完整流程

发布时间:2026/9/14 16:58:18来源:尧图网络
用 TestClient 完成 FastAPI WebSocket 测试的完整流程
用 TestClient 完成 FastAPI WebSocket 测试的完整流程【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi消息推送功能上线前你怎么确认连接能建立、第一条消息不会错序、断开不会把服务搞挂FastAPI WebSocket 测试的答案就一行用TestClient.websocket_connect()模拟真实客户端连进端点收消息、做断言。不需要起真实服务也不需要第三方库。结论先行用和 HTTP 测试同一个 TestClient。它是内置的进程内客户端直接驱动你的应用不走真实网络。测试函数里只写收消息 断言。建连和断开都由with块自动完成。测试函数必须写成同步def。TestClient 在内部驱动异步应用你不需要写await。一个最小可运行的 WebSocket 测试场景换成聊天房间用户进入 77 号房间时服务端推送一条入群通知。端点和测试一共 14 行from fastapi import FastAPI, WebSocket from fastapi.testclient import TestClient app FastAPI() app.websocket(/room/{room_id}) async def join_room(socket: WebSocket, room_id: str): await socket.accept() await socket.send_json({event: joined, room: room_id}) await socket.close() def test_join_notification(): client TestClient(app) with client.websocket_connect(/room/77) as socket: payload socket.receive_json() assert payload {event: joined, room: 77}端点只做三件事接连接、发通知、关连接。测试断言收到的第一条 JSON 等于期望字典。这段代码到底发生了什么你在端点里写await socket.accept()框架完成握手连接才进入可读状态。你进入with client.websocket_connect(/room/77)框架在进程内完成握手不监听端口。应用是 ASGI 应用即一套框架与服务端约定的通信接口。你调用receive_json()框架读走服务端发出的第一帧解码成 Python 字典。assert做值比较pytest 据此记通过或失败。你退出with时框架关闭连接并释放会话。with块就是上下文管理器意思是块结束时代码会自动帮你做清理。它像一次通话拿起建立连接挂断拆除一切。按消息类型选断言写法按消息类型匹配客户端和服务端的方法再对返回值断言文本消息服务端send_text()测试端receive_text()断言assert text xxx。JSON 消息服务端send_json()测试端receive_json()断言assert data {event: joined}。推荐默认用它结构一目了然。二进制消息服务端send_bytes()测试端receive_bytes()断言assert raw b...。同一条连接混用多种类型时按服务端发出的顺序依次读取用对应的receive_*逐个消费。三个容易翻车的点 ⚠️1. 在 async def 测试里用 TestClient错误症状连接无响应或抛出事件循环相关错误。# ❌ 反例 pytest.mark.anyio async def test_room(): client TestClient(app) # 异步上下文里没有可用事件循环正确写法把测试改回同步def。TestClient 只能在同步调用栈里工作。2. 收发顺序和服务端错位错误症状测试卡死或突然抛出WebSocketDisconnect。# ❌ 服务端只发一次测试却收两次 with client.websocket_connect(/room/77) as socket: first socket.receive_json() second socket.receive_json() # 没有第二帧阻塞正确写法把服务端的send_*列表和测试的receive_*列表逐条对齐一一对应。3. 应用靠 lifespan 初始化数据lifespan 是应用启动和停止时执行的回调常用来预置房间、令牌等数据。直接写client TestClient(app)时lifespan 不会运行端点里的数据还是空壳。# ✅ 两层 with 嵌套 with TestClient(app) as client: with client.websocket_connect(/room/77) as socket: payload socket.receive_json()正确写法外层with启动应用内层with管理这条连接两层都要写。跑完后的自查清单测试函数是同步 def函数体里没有 await每次 receive 都能在服务端找到对应的 send依赖 lifespan 时写成了嵌套的 with TestClient(app)服务端 close() 后断连路径有显式断言直接运行 pytest 能一次跑绿想继续深入读官方教程 Testing WebSockets看断连异常类型的再导出源码 fastapi/websockets.py对比异步测试写法 async-tests.md。需要直接可抄的完整示例参考 docs_src/app_testing/tutorial002_py310.py。【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Cilium 基于磁盘文件的 Network Policy:static-cnp-path 实现策略即文件与实时热更新 2026/9/14 17:31:22

Cilium 基于磁盘文件的 Network Policy:static-cnp-path 实现策略即文件与实时热更新

Cilium 基于磁盘文件的 Network Policy:static-cnp-path 实现策略即文件与实时热更新 【免费下载链接】cilium eBPF-based Networking, Security, and Observability 项目地址: https://gitcode.com/GitHub_Trending/ci/cilium Cilium 的 Network Policy 通常…

阅读更多 →
Automatisch ClickUp 集成动作实战指南:创建文件夹、列表、任务与按 ID 查找任务 2026/9/14 17:31:22

Automatisch ClickUp 集成动作实战指南:创建文件夹、列表、任务与按 ID 查找任务

Automatisch ClickUp 集成动作实战指南:创建文件夹、列表、任务与按 ID 查找任务 【免费下载链接】automatisch The open source Zapier alternative. Build workflow automation without spending time and money. 项目地址: https://gitcode.com/GitHub_Trendin…

阅读更多 →
MATLAB自编码器在工业传感器异常检测中的应用 2026/9/14 17:31:22

MATLAB自编码器在工业传感器异常检测中的应用

1. 项目概述:传感器数据异常检测的工程挑战在工业物联网和智能监测领域,传感器生成的一维时间序列数据(如温度、振动、压力等)的异常检测是保障设备健康运行的关键环节。传统基于阈值或统计的方法(如3σ原则&#xff0…

阅读更多 →
Matlab实现PCA-BP多元回归预测:降维可视化与一键出图全流程 2026/9/14 17:31:22

Matlab实现PCA-BP多元回归预测:降维可视化与一键出图全流程

我最早接触PCA-BP神经网络这个组合,是在做一个多因子回归预测项目的时候。当时手里的数据有二十多个候选特征,温度、压力、流量、浓度这些变量彼此高度相关,直接扔进BP神经网络里训练,训练集的R能做到0.99,切换到测试集…

阅读更多 →
Hindsight Go 实战:构建按用户隔离记忆的 Go 内存增强服务(Per-User Memory Bank) 2026/9/14 17:31:22

Hindsight Go 实战:构建按用户隔离记忆的 Go 内存增强服务(Per-User Memory Bank)

Hindsight Go 实战:构建按用户隔离记忆的 Go 内存增强服务(Per-User Memory Bank) 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight 本文以仓库…

阅读更多 →
easy-vibe 计算机基础:数据表示原理全解 —— 从字符编码、存储层次到可靠传输的完整链路 2026/9/14 17:28:21

easy-vibe 计算机基础:数据表示原理全解 —— 从字符编码、存储层次到可靠传输的完整链路

easy-vibe 计算机基础:数据表示原理全解 —— 从字符编码、存储层次到可靠传输的完整链路 【免费下载链接】easy-vibe 💻 vibe coding 101|The first course for AI-native product builders. 项目地址: https://gitcode.com/GitHub_Trendi…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞