测试不是独立的阶段,而是贯穿整个开发过程的质量内建活动。
Agile
Testing
敏捷测试概述
测试验证的全新范式
feedback
testing
test phase
对比分析
敏捷测试 vs 传统测试
本质差异的深度剖析
关键指标
数量化呈现核心差异
敏捷测试将反馈周期从数周~数月压缩至3-5分钟, 这不仅是效率提升,更是开发模式的本质变革。
流水线位置
测试验证在敏捷流水线中的关键位置
流水线终止,阻止合并
❌ 阻止合并继续构建与部署
✅ 流量切换 Test
Pyramid
多层次测试体系
从静态检查到端到端测试
各层职责
测试金字塔各层的工具与执行时机
静态检查
✅ 已启用代码规范、类型安全
ESLint / flake8单元测试
🔧 规划中函数、组件、模块
pytest / Vitest集成测试
🔧 规划中API 接口、服务交互
pytest + httpxE2E 测试
📋 待规划用户完整操作流程
Playwright / Cypress部署验证
✅ 已启用服务健康、可用性
Shell 脚本测试工具
前端与后端测试工具链
Quality
Gates
代码质量的第一道防线,每次提交自动检查。
push → main / developClick to simulate
检查流程
GitHub Actions lint-and-test Job
Frontend
pnpm install安装依赖pnpm lintESLint 检查Backend
flake8 app/PEP8 风格black --check app/格式验证mypy app/类型检查工具配置
frontend/eslint.config.mjs// frontend/eslint.config.mjsimport nuxt from "@nuxt/eslint";export default nuxt({ rules: { "vue/multi-word-component-names": "off", "@typescript-eslint/no-explicit-any": "warn", },});本地命令
pnpm lintpnpm lint:fixflake8 app/ --max-line-length=100black --check app/black app/ # 自动修复mypy app/ Automated
Testing
单元测试与集成测试规划
构建可靠的质量保障体系
单元测试
前后端单元测试目录结构
@pytest.mark.asyncio
async def test_health():
response = await client.get("/health")
assert response.status_code == 200test('renders button', () => {
render(Button)
expect(screen.getByRole('button'))
.toBeInTheDocument()
})集成测试
API 接口集成测试示例
backend/tests/test_api.pyimport pytestfrom httpx import AsyncClientfrom app.main import app@pytest.fixtureasync def client(): """创建测试客户端""" async with AsyncClient(app=app, base_url="http://test") as ac: yield ac@pytest.mark.asyncioasync def test_download_count(client: AsyncClient): response = await client.get("/api/v1/resume/count") assert response.status_code == 200 data = response.json() assert "total_downloads" in data测试获取下载次数
测试记录下载
Deployment
Verify
部署后的健康检查与验证流程
确保服务正常上线
验证脚本
部署后自动化验证脚本
scripts/deploy/post-deploy-verify.sh#!/bin/bashset -euo pipefail# 获取当前活跃环境ACTIVE_ENV=$(cat .deployment-state 2>/dev/null || echo "blue")echo "📊 当前活跃环境: $ACTIVE_ENV"docker ps --filter "name=backend-$ACTIVE_ENV"# 后端健康检查if docker exec backend-$ACTIVE_ENV curl -sf http://localhost:8000/health; then echo "✅ 后端健康检查通过"else echo "❌ 后端健康检查失败" exit 1fi读取部署状态
Docker exec curl
Nginx 健康检查
健康端点
FastAPI 健康检查端点实现
backend/app/routers/health.pyfrom fastapi import APIRouterfrom pydantic import BaseModelrouter = APIRouter(prefix="/api/v1")class HealthResponse(BaseModel): status: str service: str version: str@router.get("/health")async def health_check(): return HealthResponse( status="healthy", service="ningshen-backend", version="1.0.0" )GET /api/v1/health{
"status": "healthy",
"service": "ningshen-backend",
"version": "1.0.0"
} Test
Coverage
测试覆盖率演进路线
分阶段提升质量保障能力
演进路线
三阶段覆盖率提升计划
当前状态
已完成- ✓ 静态代码检查 100% 覆盖
- ✓ 部署健康检查 100% 覆盖
- ✓ 代码格式化规范 100% 执行
基础测试
规划中- ✓ 后端核心 API 单元测试覆盖率 > 60%
- ✓ 关键工具函数测试覆盖率 > 80%
- ✓ CI 集成 pytest 自动执行
完善测试
未来- ✓ 整体测试覆盖率 > 70%
- ✓ 前端组件测试覆盖核心交互
- ✓ E2E 测试覆盖关键用户路径
核心理念
"
覆盖率不是目的,质量保障才是
核心逻辑优先
优先测试核心业务逻辑
边界条件优先
优先测试容易出错的地方
避免无意义
不为了覆盖率写无用测试
Traditional
vs Agile
传统测试与敏捷测试的根本差异
从"事后把关"到"质量内建"
测试时机
测试自动化
主要手工执行
高度自动化 CI/CD 集成
耗时费力,选择性执行
自动执行,每次全量回归
手工搭建,环境差异大
Docker 容器化,环境一致
手工验收
自动化检查 + 蓝绿回滚
敏捷测试实现 100% 自动化回归,每次提交触发全量测试, 无需人工干预。
角色分工
Git Workflow
测试驱动的 Git 工作流 — 从本地检查到 CI/CD,每一步都有质量保障
本地代码质量检查
CI 代码质量门禁
构建与部署验证
本地检查
提交代码前必须通过的检查
CI/CD 流水线
核心产出物
测试相关配置文件与自动化产出清单
测试相关配置文件
frontend/eslint.config.mjsbackend/setup.cfgbackend/pytest.inibackend/requirements-dev.txt.github/workflows/ci-cd-*.ymlscripts/deploy/post-deploy-*.sh测试自动化产出
每次提交的检查状态
ESLint/flake8 详细输出
健康检查执行结果
代码覆盖率统计
Summary
敏捷测试的核心价值与理念总结
Core Values
敏捷测试的五大核心价值
快速反馈
01每次提交 3-5 分钟内获得代码质量反馈,问题早发现早解决
质量内建
02测试不是独立阶段,而是开发过程中持续进行的活动
自动化驱动
03CI/CD 流水线自动执行测试,无需人工干预,保障一致性
安全部署
04蓝绿部署 + 健康检查 + 自动回滚,确保生产环境稳定
持续改进
05从静态检查起步,逐步完善单元测试、集成测试、E2E 测试
Philosophy
测试不是终点
而是持续的质量守护
与传统瀑布模型将测试视为独立的验证阶段不同,敏捷测试将 质量内建到每一次提交、每一次部署中。
通过自动化测试,我们能够
第一时间发现
在问题发生的第一时间发现它
最低成本修复
以最低的成本修复问题
最快速度交付
以最快的速度将修复交付给用户