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包冲突。以下是标准操作流程:

  1. 创建项目目录:mkdir runbook-automation-test && cd runbook-automation-test
  2. 创建虚拟环境:python3 -m venv venv
  3. 激活虚拟环境:
    • Linux/macOS:source venv/bin/activate
    • Windows:venv\Scripts\activate
  4. 验证激活状态: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测试模块之间的逻辑关系:

Python虚拟环境与依赖库结构 Python虚拟环境 (venv) 隔离的Python解释器 + site-packages目录 pytest requests schedule logging Runbook自动化测试模块 模拟告警触发 pytest + requests 自愈流程验证 pytest + schedule 日志审计 logging 说明:虚拟环境隔离系统依赖,四个库协同支撑告警模拟、调度执行与日志追踪

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 作为前置检查步骤,确保测试环境与开发环境一致,避免“在我机器上能跑”的问题。