url: /posts/eed6cd8985d9be0a4b092a7da38b3e0c/
title: FastAPI的CI流水线怎么自动测端点,还能让Allure报告美到犯规?
date: 2025-09-16T01:32:40+08:00
lastmod: 2025-09-16T01:32:40+08:00
author: cmdragon
summary:
持续集成(CI)是一种软件开发实践,开发人员频繁提交代码,CI工具自动触发构建和测试流程,以尽早发现错误。FastAPI项目通过CI保证类型安全、避免端点失效和一致性验证。GitHub Actions是常用的CI工具,通过Workflow、Job和Step定义CI流程。FastAPI的CI流水线包括代码拉取、Python环境设置、依赖安装、测试和Docker镜像构建。Allure测试报告框架生成可视化报告,支持结构化展示和跨平台兼容,与FastAPI的Pytest测试结合,通过Allure装饰器标记测试用例,生成并查看报告。
categories:
- fastapi
tags:
- FastAPI
- 持续集成
- GitHub Actions
- CI流水线
- Pytest
- Allure
- 测试报告
扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长
发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/
FastAPI与持续集成流水线构建
1.1 什么是持续集成(CI)?
持续集成(Continuous Integration,简称CI)是一种软件开发实践:开发人员频繁将代码提交到共享仓库(如GitHub的main分支),CI工具自动触发构建、测试流程,尽早发现代码中的错误。其核心目标是“快速反馈”——避免代码集成时出现大规模冲突,或因单个提交破坏整个项目的功能。
对于FastAPI项目而言,CI的价值在于:
- 保证类型安全:FastAPI依赖Pydantic模型做请求验证,CI能自动检查提交的代码是否违反类型约束;
- 避免端点失效:自动测试FastAPI的API端点(如
GET /items/、POST /users/),确保接口功能正常; - 一致性验证:确保代码在不同环境(开发、测试、生产)中的行为一致。
1.2 选择CI工具:GitHub Actions为例
目前主流的CI工具包括GitHub Actions、GitLab CI、Jenkins等。本文以GitHub Actions为例(因多数FastAPI项目托管在GitHub,配置简单且免费)。
GitHub Actions的核心概念:
- Workflow(工作流):定义CI的触发条件和执行步骤,存储在项目根目录的
.github/workflows/文件夹中; - Job(任务):一个Workflow可包含多个Job,如“构建代码”“运行测试”“推送镜像”;
- Step(步骤):Job的具体执行单元,如“拉取代码”“安装依赖”。
1.3 编写FastAPI项目的CI流水线配置
以下是一个完整的FastAPI CI工作流文件(.github/workflows/ci.yml),涵盖“代码拉取→依赖安装→测试→构建Docker镜像”:
name: FastAPI CI # 工作流名称
on: # 触发条件:Push到main分支或PR到main分支
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-test: # 定义一个名为build-and-test的Job
runs-on: ubuntu-latest # 运行在Ubuntu最新版本的虚拟环境中
steps:
# 步骤1:拉取项目代码(必须第一步,否则后续步骤无代码可操作)
- name: Checkout code
uses: actions/checkout@v4 # 使用官方的checkout动作,拉取代码到虚拟环境
# 步骤2:设置Python环境(匹配项目的Python版本)
- name: Set up Python 3.11
uses: actions/setup-python@v5 # 官方的Python环境配置动作
with:
python-version: "3.11" # 指定Python版本(需与项目依赖一致)
# 步骤3:安装项目依赖(使用requirements.txt)
- name: Install dependencies
run: | # 运行Shell命令
python -m pip install --upgrade pip # 升级pip到最新版
pip install -r requirements.txt # 安装requirements.txt中的依赖
# 步骤4:运行Pytest测试(生成JUnit格式的测试报告)
- name: Run tests with Pytest
run: pytest --junitxml=test-results.xml # 运行测试并生成JUnit报告(方便后续查看)
# 步骤5:构建Docker镜像(可选,若项目用Docker部署)
- name: Build Docker image
run: docker build -t my-fastapi-app:${
{
github.sha }} . # 构建镜像,标签用Git提交的SHA值(唯一标识)
配置说明:
on字段:触发CI的场景——当代码推送到main分支,或有PR合并到main时,自动运行;runs-on: ubuntu-latest:使用GitHub提供的Ubuntu虚拟环境,无需自己搭建服务器;--junitxml=test-results.xml:生成JUnit格式的测试报告,方便GitHub Actions展示测试结果;${ { github.sha }}:GitHub的内置变量,代表当前提交的SHA哈希值,用于标记Docker镜像版本(避免重复)。
1.4 流水线的关键步骤解析
-
拉取代码(Checkout):
使用actions/checkout@v4动作,将GitHub仓库的代码复制到CI的虚拟环境中,是所有CI工作流的基础。 -
设置Python环境:
FastAPI依赖特定版本的Python(如3.9+),actions/setup-python@v5会自动安装指定版本的Python,并配置pip等工具。若不设置,虚拟环境的Python版本可能与项目不兼容(如默认Python 3.8,而项目用Python 3.11),导致依赖安装失败。 -
安装依赖:
通过pip install -r requirements.txt安装项目所有依赖(包括FastAPI、Pydantic、Uvicorn等)。requirements.txt需包含项目的所有第三方库及其版本(可通过pip freeze > requirements.txt生成)。 -
运行测试:
使用pytest运行测试用例(测试文件需以test_开头,如test_main.py)。--junitxml参数生成的

最低0.47元/天 解锁文章
1154

被折叠的 条评论
为什么被折叠?



