使用 FastAPI 创建 TDD 和 BDD 实时聊天应用

在不断发展的 Web 开发领域,实时服务已成为现代应用程序不可或缺的一部分。FastAPI是一个Python网络框架,它为构建健壮、可扩展的实时服务提供了一种有效的方法。在本文中,我们将探讨如何利用 FastAPI,使用测试驱动开发(TDD)和行为驱动开发(BDD)方法创建实时服务。

1. 设置环境:

在开始开发之前,请确保您的计算机上安装了 Python。创建虚拟环境并安装 FastAPI 和必要的依赖项。

python -m venv venv
source venv/bin/activate # On Windows, use 'venv\Scripts\activate'
pip install fastapi[all] uvicorn

2. 设计实时服务:

定义实时服务的结构。在本文中,让我们创建一个具有实时功能的简单聊天应用程序。

# main.py

from fastapi import FastAPI, WebSocket

app = FastAPI()

@app.websocket("/ws/{username}")
async def websocket_endpoint(username: str, websocket: WebSocket):
    await websocket.accept()
    while True:
        data = await websocket.receive_text()
        await websocket.send_text(f"Message from {username}: {data}")

3. 使用 TDD 编写单元测试:

首先编写单元测试以确保 WebSocket 功能按预期工作。使用FastAPI提供的TestClient来模拟WebSocket连接。

# test_main.py

from fastapi.testclient import TestClient
from main import app

client = TestClient(app)

def test_websocket_connection():
    with client.websocket_connect("/ws/testuser") as websocket:
        data = {"message": "Hello, World!"}
        websocket.send_text(data)
        response = websocket.receive_text()
        assert response == "Message from testuser: Hello, World!"
pytest test_main.py

4. 将 BDD 与 Behave 相结合

行为驱动开发(BDD)允许技术和非技术团队成员之间进行协作。Behave 是一个用于 Python 的 BDD 框架,可与 FastAPI 无缝集成。

创建 features 目录并添加 features 文件:

# gherkin
# features/chat.feature

Feature: Real-time Chat

  Scenario: User sends a message
    Given a user is connected to the chat
    When the user sends a message
    Then the message should be received by other participants

在steps目录中实现步骤定义:

# features/steps/chat_steps.py

from behave import given, when, then
from fastapi.testclient import TestClient
from main import app

client = TestClient(app)

@given('a user is connected to the chat')
def step_given_user_connected(context):
    context.websocket = client.websocket_connect("/ws/testuser")

@when('the user sends a message')
def step_user_sends_message(context):
    context.websocket.send_text("Hello, World!")

@then('the message should be received by other participants')
def step_message_received_by_participants(context):
    response = context.websocket.receive_text()
    assert response == "Message from testuser: Hello, World!"

运行 Behave 来执行 BDD 场景:

behave

5. 运行 FastAPI 应用程序

使用 Uvicorn 启动 FastAPI 应用程序:

uvicorn main:app - reload

访问浏览器中的 “http://127.0.0.1:8000/docs”,探索交互式文档和 WebSocket 功能。

总结:

使用 TDD 和 BDD 方法使用 FastAPI 开发实时服务可确保应用程序的可靠性和功能性。通过在代码执行前编写测试,您可以构建健壮且可维护的实时服务。FastAPI 的简单性和性能使其成为开发具有实时功能的可扩展高效应用程序的绝佳选择。

作者:Arif Rahman
译自medium.

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/41262.html

(0)

相关推荐

发表回复

登录后才能评论