尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

FastAPI零基础教程(九)- 测试与部署,1天完成生产落地

FastAPI零基础教程(九)- 测试与部署,1天完成生产落地
📅 发布时间:2026/7/7 4:46:43

文章目录

    • 前言
    • 一、阶段学习目标
    • 二、项目最终工程结构(完整版)
    • 三、单元测试:pytest \+ TestClient 全套实战
      • 3\.1 安装测试依赖
      • 3\.2 基础测试:测试普通接口
      • 3\.3 带参数、POST、异常场景测试
      • 3\.4 鉴权接口测试(Token 携带)
      • 3\.5 异步接口测试写法
      • 3\.6 全局测试夹具(conftest)
      • 3\.7 执行测试 \+ 覆盖率
    • 四、生产部署核心:Gunicorn \+ Uvicorn 高性能部署
      • 4\.1 为什么开发不能直接上线 uvicorn?
      • 4\.2 安装部署依赖
      • 4\.3 生产启动命令(可直接上线)
      • 4\.4 进程守护与开机自启(服务器必备)
    • 五、Docker 容器化部署(企业标准)
      • 5\.1 Dockerfile
      • 5\.2 \.dockerignore
      • 5\.3 构建与运行
    • 六、生产环境安全优化(上线必改)

前言

经过前面8个阶段的学习,我们已经完整掌握 FastAPI 基础接口、Pydantic 校验、依赖注入、JWT 鉴权、SQLModel 数据库、中间件工程化、后台任务、WebSocket 高阶能力。

但是能跑 ≠ 能上线。

真实生产上线必须解决两个核心问题:

1.质量可控:代码迭代不崩、接口回归稳定、边界错误可覆盖(单元测试);

2.稳定部署:告别 uvicorn 裸跑、支持进程守护、高并发、Docker 容器化、线上安全配置。

本阶段为系列最终落地阶段,1天时间补齐 FastAPI 项目从开发 → 测试 → 上线的完整闭环,学完即可交付企业级可上线项目。

一、阶段学习目标

1. 掌握 FastAPI + pytest 全套单元测试方案,测试接口、鉴权、数据库、异常场景;

2. 学会同步/异步接口测试、全局测试夹具、测试隔离、覆盖率统计;

3. 区分开发启动、生产启动差异,掌握 Gunicorn + Uvicorn 组合部署;

4. 实现 Dockerfile 容器打包、镜像构建、容器启停;

5. 掌握线上安全优化:日志、端口、进程、超时、跨域、密钥防护;

6. 学会服务器后台常驻、开机自启、故障自动重启;

7. 完整打通:开发 → 测试 → 打包 → 部署 → 运维整套流程。

二、项目最终工程结构(完整版)

这是本系列最终上线级目录结构,包含测试目录、容器配置、依赖管理:

fastapi-final-project/ ├── main.py # 项目入口 ├── requirements.txt # 项目依赖 ├── .env # 环境变量 ├── Dockerfile # 容器部署脚本 ├── .dockerignore ├── pytest.ini # 测试配置 ├── core/ # 核心配置、中间件、异常、日志 ├── db/ # 数据库会话、迁移 ├── models/ # 数据库实体 ├── schemas/ # DTO模型 ├── crud/ # 业务CRUD ├── routers/ # 模块化路由 ├── utils/ # 工具类 └── tests/ # 单元测试目录 ├── conftest.py # 全局测试夹具 ├── test_api.py # 接口测试 └── test_auth.py # 鉴权测试

三、单元测试:pytest + TestClient 全套实战

3.1 安装测试依赖

pipinstallpytest httpx pytest-cov

说明:

- pytest:主流 Python 测试框架

- httpx:TestClient 底层请求库,支持同步/异步

- pytest-cov:统计代码测试覆盖率

3.2 基础测试:测试普通接口

FastAPI 内置TestClient,完全模拟真实请求,无需启动服务即可测试所有接口。

tests/test_api.py

fromfastapi.testclientimportTestClientfrommainimportapp client=TestClient(app)deftest_root():"""测试根路径接口"""resp=client.get("/")assertresp.status_code==200assert"msg"inresp.json()

3.3 带参数、POST、异常场景测试

deftest_user_register():"""测试用户注册正常场景"""resp=client.post("/api/auth/register",json={"username":"testdemo","email":"test@demo.com","password":"Demo123456"})# 正常返回200assertresp.status_code==200deftest_register_error():"""测试参数非法异常场景"""resp=client.post("/api/auth/register",json={"username":"1","email":"wrong-email","password":"123"})# 参数校验失败返回422assertresp.status_code==422

3.4 鉴权接口测试(Token 携带)

先登录获取 Token,再请求需要登录的接口,覆盖真实业务链路。

deftest_user_profile():# 1. 登录获取tokenlogin_resp=client.post("/api/auth/login",data={"username":"testdemo","password":"Demo123456"})token=login_resp.json()["access_token"]# 2. 携带token请求个人信息headers={"Authorization":f"Bearer{token}"}resp=client.get("/api/user/me",headers=headers)assertresp.status_code==200assertresp.json()["data"]["username"]=="testdemo"

3.5 异步接口测试写法

如果项目存在 async 异步接口,需要使用异步测试客户端。

importpytestfromhttpximportAsyncClientfrommainimportapp@pytest.mark.asyncioasyncdeftest_async_interface():asyncwithAsyncClient(app=app,base_url="http://test")asac:resp=awaitac.get("/")assertresp.status_code==200

3.6 全局测试夹具(conftest)

统一生成测试客户端、测试数据库,所有测试文件共享。

tests/conftest.py

importpytestfromfastapi.testclientimportTestClientfrommainimportapp@pytest.fixture(scope="function")defclient():returnTestClient(app)

3.7 执行测试 + 覆盖率

# 执行所有测试pytest# 详细输出pytest-v# 统计代码覆盖率pytest--cov=.

四、生产部署核心:Gunicorn + Uvicorn 高性能部署

4.1 为什么开发不能直接上线 uvicorn?

- uvicorn 单进程、不支持负载均衡、崩溃不重启、无法高并发;

- 生产标准组合:Gunicorn 进程管理 + Uvicorn 异步工作核。

4.2 安装部署依赖

pipinstallgunicorn uvicorn

4.3 生产启动命令(可直接上线)

# 核心参数讲解# -w:工作进程数(CPU核心数*2+1)# -k:使用uvicorn异步worker# -b:绑定端口# --daemon:后台守护运行# --log-file:日志输出gunicorn main:app\-w4\-kuvicorn.workers.UvicornWorker\-b0.0.0.0:8000\--daemon\--log-level=info

4.4 进程守护与开机自启(服务器必备)

使用 systemd 托管进程,崩溃自动重启、开机自启。

新建:/etc/systemd/system/fastapi.service

[Unit] Description=FastAPI Production Service After=network.target [Service] User=root WorkingDirectory=/项目绝对路径 ExecStart=/虚拟环境绝对路径/bin/gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 Restart=always [Install] WantedBy=multi-user.target

常用命令:

systemctl daemon-reload systemctl start fastapi systemctlenablefastapi systemctl status fastapi

五、Docker 容器化部署(企业标准)

5.1 Dockerfile

FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 CMD ["gunicorn","main:app","-w","4","-k","uvicorn.workers.UvicornWorker","-b","0.0.0.0:8000"]

5.2 .dockerignore

__pycache__ *.pyc .env tests .git .gitignore

5.3 构建与运行

# 构建镜像dockerbuild-tfastapi-pro.# 启动容器dockerrun-d-p8000:8000--namefastapi-service fastapi-pro

六、生产环境安全优化(上线必改)

1.关闭 DEBUG:生产禁止开启调试模式,防止信息泄露;

2.密钥环境变量化:SECRET_KEY、数据库密码禁止硬编码;

3.CORS 严格域名限制:禁止 * 通配符;

4.关闭 SQL 日志 echo=False;

5.禁用自动建表:生产只用 alembic 迁移;

6.开启进程自动重启,防止服务挂死;

7.统一日志持久化,方便线上排错。

相关新闻

  • 从BIO到Netty:一步步看懂Java网络编程的迭代逻辑
  • 旋转机械故障诊断数据集的系统设计与工程实践深度解析
  • 汽车CAN总线开发实战:从CAN盒入门到AUTOSAR配置,手把手带你走完完整流程

最新新闻

  • 2026 中小企业能碳数字化系统选型要点,绿色工厂申报必看
  • 飞书OpenClaw部署实战:构建生产级AI Agent协作团队
  • 【3.13】FFT变换testbench的设计
  • 如何监控员工电脑?精选六款电脑监控软件 app 分享,2026年最新推荐
  • Agent 的经验飞轮:当 AI Agent 学会从执行中沉淀可复用知识
  • 原来爆款内容不止靠经验!焦圈儿App教你用“工具+逻辑”写出平台喜欢的原创内容

日新闻

  • Android逆向分析全能助手:集成化工具链与自动化工作流设计
  • 面搜索(Faceted Search)原理与工程实践指南
  • 神经网络调参避坑指南:从5个常见Loss曲线形态定位超参数问题

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号