2. 环境搭建与项目初始化

本章将完成《契约测试驱动数据库缓存API响应格式校验工程》的本地开发环境搭建。一个干净、可复现的Python虚拟环境与结构清晰的项目目录,是后续所有契约编写、测试执行与缓存逻辑实现的基础。我们将按照“环境隔离 → 依赖锁定 → 目录设计”的顺序逐步构建。

2.1 Python虚拟环境与依赖管理

使用 venv 创建隔离环境,并通过 pip 安装核心依赖。所有依赖版本将锁定至 requirements.txt,确保团队与CI环境的一致性。

2.1.1 创建与激活虚拟环境

# 创建虚拟环境(项目根目录下执行)
python -m venv .venv

# 激活环境(Windows)
.venv\Scripts\activate

# 激活环境(macOS/Linux)
source .venv/bin/activate

2.1.2 安装核心依赖

本工程依赖分为三类:测试框架、数据库与缓存驱动、契约与校验工具。下表列出各组件的用途与推荐版本。

分类 包名 版本 用途
测试框架 pytest ≥7.4 测试用例执行、夹具管理、断言
HTTP客户端 requests ≥2.31 发送API请求,获取响应
缓存驱动 redis ≥5.0 连接Redis,实现缓存读写
ORM引擎 sqlalchemy ≥2.0 数据库模型定义与查询
Schema校验 jsonschema ≥4.20 根据JSON Schema校验API响应格式
# 一次性安装所有依赖
pip install pytest requests redis sqlalchemy jsonschema

# 将当前环境依赖导出为锁定文件
pip freeze > requirements.txt
💡 最佳实践: 建议将 requirements.txt 纳入版本控制。每次新增或升级依赖后,重新执行 pip freeze > requirements.txt 更新锁定文件,避免因依赖版本不一致导致的“在我机器上能跑”问题。

2.2 项目目录结构设计

合理的目录结构应遵循“关注点分离”原则:将契约定义、测试代码、业务逻辑、配置与工具脚本明确分层。下图展示了本工程的推荐目录骨架。

项目目录结构(契约测试驱动数据库缓存API校验工程) contract-cache-api/ contracts/ tests/ src/ config/ user_api_schema.json product_api_schema.json order_api_schema.json test_user_api.py test_product_api.py conftest.py cache_manager.py db_models.py api_client.py schema_validator.py settings.py .env.example requirements.txt 📌 目录职责说明 contracts/ 存放JSON Schema契约文件 | tests/ 存放pytest测试用例 | src/ 存放业务逻辑 | config/ 存放配置与环境变量

2.3 各目录与核心文件说明

下表详细说明每个目录与关键文件的职责,帮助团队快速定位代码与契约。

目录/文件 职责 关键内容
contracts/ 存放所有API的JSON Schema契约文件 user_api_schema.json, product_api_schema.json
tests/ 存放pytest测试用例与共享夹具 conftest.py 定义全局fixture,测试文件按模块命名
src/ 业务逻辑实现:缓存、数据库、API客户端、校验器 cache_manager.py, db_models.py, api_client.py, schema_validator.py
config/ 应用配置与环境变量模板 settings.py 读取环境变量,.env.example 提供模板
requirements.txt 锁定所有依赖及其版本 由 pip freeze 自动生成,用于CI/CD与新人快速搭建

2.4 初始化脚本与验证

为简化重复操作,建议在项目根目录创建 setup.sh(或 setup.bat)脚本,一键完成环境创建、依赖安装与目录生成。

#!/bin/bash
# setup.sh — 项目初始化脚本

# 1. 创建虚拟环境
python -m venv .venv

# 2. 激活环境并安装依赖
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

# 3. 创建目录结构(如果不存在)
mkdir -p contracts tests src config

# 4. 创建占位文件
touch contracts/.gitkeep
touch tests/.gitkeep
touch src/__init__.py
touch config/.env.example

echo "✅ 环境搭建完成!请执行 source .venv/bin/activate 激活环境。"
✅ 验证清单:
  • 执行 pytest --version 确认pytest安装成功。
  • 执行 python -c "import redis; import sqlalchemy; import jsonschema; print('所有依赖导入成功')" 验证核心库可用。
  • 检查项目目录是否包含 contracts/、tests/、src/、config/ 四个子目录。

2.5 环境隔离与版本一致性

在团队协作中,环境不一致是导致测试失败的首要原因。本工程通过以下三重机制确保一致性:

  1. 虚拟环境隔离:每个开发者拥有独立的 .venv,不污染系统级Python。
  2. 依赖锁定:requirements.txt 记录精确版本号,CI/CD流水线使用同一文件安装。
  3. 目录结构标准化:所有成员遵循相同的目录布局,避免因文件路径差异导致的导入错误。
⚠️ 常见陷阱:不要将 .venv/ 目录提交到版本控制。请在项目根目录创建 .gitignore 文件,并添加 .venv/、__pycache__/、*.pyc 等条目。

至此,开发环境已准备就绪。下一阶段将基于此结构,在 contracts/ 目录中编写第一个JSON Schema契约文件,并利用 jsonschema 库进行响应格式校验。