3. 环境准备:Python虚拟环境搭建、依赖安装

在金融压力测试与混沌工程实践中,隔离且可复现的Python运行环境是保障实验准确性的基石。本节将指导你从零搭建包含Flask(API服务)、Redis(状态存储)、pybreaker(熔断器)和Locust(压测工具)的完整实验沙箱。

3.1 虚拟环境创建与激活

使用Python内置的venv模块创建隔离环境,避免与系统级Python包冲突。

操作步骤:
  1. 创建项目目录:mkdir fin-stress-lab && cd fin-stress-lab
  2. 创建虚拟环境:python3 -m venv venv
  3. 激活环境:
    • Linux/macOS:source venv/bin/activate
    • Windows:venv\Scripts\activate
  4. 验证激活:终端提示符前出现 (venv) 前缀
最佳实践: 将 venv/ 目录加入 .gitignore,避免将环境依赖提交到版本库。使用 pip freeze > requirements.txt 记录依赖快照。

3.2 核心依赖安装与版本锁定

下表列出本次课程所需的全部Python包及其在金融压测场景中的角色:

包名 版本建议 角色说明 安装命令
Flask ≥2.3.0 构建被压测的RESTful API服务,模拟交易/风控接口 pip install flask
redis ≥5.0.0 集中式限流计数器与熔断状态持久化存储 pip install redis
pybreaker ≥0.6.0 实现熔断器模式(Circuit Breaker),保护下游依赖 pip install pybreaker
locust ≥2.20.0 分布式压测引擎,模拟高并发用户请求 pip install locust
gunicorn ≥21.2.0 生产级WSGI服务器,用于Flask多进程部署 pip install gunicorn
版本兼容性注意: 若使用Python 3.12+,请确保 pybreaker 版本 ≥ 0.6.0,旧版本可能因 asyncio 接口变更而报错。建议在安装后执行 pip freeze | grep pybreaker 确认版本。

3.3 依赖安装验证脚本

执行以下Python脚本,快速验证所有依赖是否就绪:

# check_env.py
import sys
import flask
import redis
import pybreaker
import locust

print(f"Python版本: {sys.version}")
print(f"Flask版本: {flask.__version__}")
print(f"Redis版本: {redis.__version__}")
print(f"pybreaker版本: {pybreaker.__version__}")
print(f"Locust版本: {locust.__version__}")
print("✅ 所有依赖安装成功!")

运行命令:python check_env.py,输出应显示各包版本号且无 ImportError。

3.4 环境架构总览

下图展示了本课程实验环境的组件关系与数据流:

金融压力测试实验环境架构 Locust 压测引擎 模拟千级并发用户 Flask API 服务 交易/风控接口 pybreaker 熔断器 状态机:关闭→打开→半开 Redis 状态存储 限流计数器 / 熔断状态 故障注入模块 延迟/异常/超时注入 HTTP请求 调用保护 读写状态 持久化 注入故障 📌 环境要点: • Locust 直接对 Flask 发起 HTTP 压测;Flask 通过 pybreaker 保护下游调用,状态存入 Redis。 • 故障注入模块可独立启停,模拟网络延迟、服务超时、异常返回等场景。

3.5 依赖清单固化

完成安装后,执行以下命令生成可复现的依赖文件:

pip freeze > requirements.txt

生成的 requirements.txt 内容示例:

blinker==1.7.0
click==8.1.7
Flask==3.0.0
gevent==23.9.1
gunicorn==21.2.0
itsdangerous==2.1.2
Jinja2==3.1.2
locust==2.20.1
MarkupSafe==2.1.3
msgpack==1.0.7
pybreaker==0.6.0
redis==5.0.1
Werkzeug==3.0.1
zope.event==5.0
zope.interface==6.1
团队协作建议: 将 requirements.txt 提交至Git仓库。新成员克隆后只需执行 python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt 即可复现完全一致的环境。

3.6 常见问题排查

问题现象 可能原因 解决方案
ModuleNotFoundError: No module named 'redis' 虚拟环境未激活或未安装 检查终端是否有 (venv) 前缀;重新执行 pip install redis
pybreaker 安装后导入报错 Python 3.12+ 与旧版 pybreaker 不兼容 升级至 pip install pybreaker>=0.6.0
Locust 启动后 Web UI 无法访问 端口 8089 被占用 使用 locust --web-port 8090 指定其他端口
Flask 与 Redis 连接超时 Redis 服务未启动或地址错误 执行 redis-cli ping 测试连通性;检查 REDIS_HOST 环境变量