2. 环境准备:Python虚拟环境搭建、依赖库安装
在开始编写Runbook自动化单元测试之前,必须建立一个干净、可复现的Python运行环境。本章将指导你完成虚拟环境的创建、核心依赖库的安装,并验证环境是否就绪。这是后续所有模拟告警触发与自愈流程验证的基础。
2.1 环境概览与依赖清单
本课程所需的Python环境基于Python 3.9+,核心依赖库及其用途如下表所示:
| 库名 | 版本建议 | 核心用途 |
|---|---|---|
| pytest | ≥7.4 | 单元测试框架,用于编写和执行告警触发与自愈流程的测试用例 |
| requests | ≥2.31 | HTTP客户端,用于模拟告警API调用、健康检查请求 |
| schedule | ≥1.2 | 轻量级任务调度,用于模拟定时告警轮询与自愈重试间隔 |
| logging | 内置标准库 | 日志记录,用于追踪测试执行链路、告警事件与自愈动作 |
版本锁定建议: 生产级Runbook项目建议使用
requirements.txt 锁定精确版本号(如 pytest==7.4.3),避免因库升级导致测试行为不一致。
2.2 虚拟环境搭建步骤
使用Python内置的 venv 模块创建隔离环境,避免与系统级Python包冲突。以下是标准操作流程:
- 创建项目目录:
mkdir runbook-automation-test && cd runbook-automation-test - 创建虚拟环境:
python3 -m venv venv - 激活虚拟环境:
- Linux/macOS:
source venv/bin/activate - Windows:
venv\Scripts\activate
- Linux/macOS:
- 验证激活状态:
which python(应指向项目目录下的venv/bin/python)
常见陷阱: 如果系统同时安装了Python 2和Python 3,务必使用
python3 命令创建虚拟环境。激活后使用 python --version 确认版本为3.9+。
2.3 依赖库安装与验证
激活虚拟环境后,执行以下命令批量安装依赖:
pip install --upgrade pip
pip install pytest requests schedule
安装完成后,通过以下命令验证每个库是否可正常导入:
python -c "import pytest; print('pytest:', pytest.__version__)"
python -c "import requests; print('requests:', requests.__version__)"
python -c "import schedule; print('schedule:', schedule.__version__)"
python -c "import logging; print('logging: built-in')"
预期输出示例:
pytest: 7.4.3
requests: 2.31.0
schedule: 1.2.0
logging: built-in
2.4 环境结构图
下图展示了虚拟环境、依赖库与后续Runbook测试模块之间的逻辑关系:
2.5 项目目录结构初始化
为后续章节的测试代码做好准备,建议按以下结构组织项目文件:
runbook-automation-test/
├── venv/ # 虚拟环境目录(不纳入版本控制)
├── tests/ # 测试用例目录
│ ├── __init__.py
│ ├── test_alert_trigger.py
│ └── test_self_healing.py
├── runbook/ # Runbook核心逻辑目录
│ ├── __init__.py
│ ├── alert_simulator.py
│ └── healing_actions.py
├── logs/ # 日志输出目录
├── requirements.txt # 依赖锁定文件
└── pytest.ini # pytest配置文件
最佳实践: 将
venv/ 目录加入 .gitignore 文件,避免将虚拟环境提交到版本仓库。团队成员应通过 requirements.txt 重建一致的环境。
2.6 环境验证脚本
编写一个快速验证脚本 check_env.py,确保所有依赖就绪:
#!/usr/bin/env python3
"""环境验证脚本:检查虚拟环境与依赖库是否就绪"""
import sys
import importlib
required_packages = {
"pytest": "7.4.0",
"requests": "2.31.0",
"schedule": "1.2.0",
"logging": None # 标准库,无需版本检查
}
def check_package(name, min_version):
try:
module = importlib.import_module(name)
if min_version:
actual_version = getattr(module, "__version__", "unknown")
print(f"[OK] {name} == {actual_version}")
else:
print(f"[OK] {name} (built-in)")
return True
except ImportError:
print(f"[FAIL] {name} 未安装")
return False
if __name__ == "__main__":
print("=" * 50)
print("Runbook自动化测试 - 环境检查")
print("=" * 50)
print(f"Python版本: {sys.version}")
all_ok = all(check_package(pkg, ver) for pkg, ver in required_packages.items())
print("=" * 50)
if all_ok:
print("环境就绪,可以开始Runbook测试!")
else:
print("环境不完整,请检查上述失败项。")
sys.exit(1)
执行验证:
python check_env.py
预期输出:
==================================================
Runbook自动化测试 - 环境检查
==================================================
Python版本: 3.10.12 (main, Nov 20 2023, 15:14:05)
[OK] pytest == 7.4.3
[OK] requests == 2.31.0
[OK] schedule == 1.2.0
[OK] logging (built-in)
==================================================
环境就绪,可以开始Runbook测试!
扩展建议: 在CI/CD流水线中,可将
check_env.py 作为前置检查步骤,确保测试环境与开发环境一致,避免“在我机器上能跑”的问题。