一、项目背景与挑战
在微服务架构盛行的当下,自动化测试平台已成为保障软件质量的重要基础设施。本文将以 FastAPI 为核心,分享如何构建一个支持异步操作、具备良好扩展性的现代化测试平台,过程中我们解决了以下技术挑战:
- 过时 API 的升级替换(
@app.on_event
→ lifespan handlers) - 模块化项目的路径管理
- 生产级数据库连接管理
- 前后端分离的静态资源部署
二、项目初始化与架构设计
2.1 技术栈选型
- 核心框架: FastAPI (v0.95+)
- 数据库: SQLAlchemy 2.0 + aiosqlite/asyncpg
- 前端: 原生HTML/CSS + Jinja2模板
- 测试执行: pytest + subprocess
- 部署: Uvicorn + Gunicorn
2.2 目录结构
├── backend/
│ ├── __init__.py
│ ├── main.py # API入口
│ ├── models.py # 数据模型
│ └── database.py # 数据库配置
├── frontend/
│ ├── index.html # 前端主界面
│ └── styles.css # 样式表
└── test_cases/ # 测试脚本存储
三、核心实现详解
3.1 生命周期管理(关键升级点)
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
""" 新版生命周期处理器 """
# 启动阶段
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
yield # 保持服务运行
# 关闭阶段
await engine.dispose()
app = FastAPI(lifespan=lifespan)
相较于已弃用的 @app.on_event
方式,新方案具有以下优势:
- 明确的上下文管理边界
- 支持异步资源清理
- 更好的异常处理机制
3.2 数据库层实现
3.2.1 模型定义 (models.py)
from sqlalchemy import Column, Integer, String, Text, DateTime
class TestCase(Base):
__tablename__ = "test_cases"
id = Column(Integer, primary_key=True)
name = Column(String(100), unique=True)
script_path = Column(String