环境准备:Python 环境安装、虚拟环境管理、依赖管理(Poetry / Pipenv)

说到搭 SDK 测试框架,第一件事不是写代码,而是把自家的工具链收拾利索。Python 版本、虚拟环境、依赖管理,这三个东西没搞对,后面所有自动化测试脚本都得翻车。我刚开始做 SDK 测试的时候,就是直接在系统 Python 里 pip install 一堆包,结果不同项目相互踩踏,修依赖修到怀疑人生。后来踩了坑才明白,环境准备这一步,值得花半小时认真整。

Python 环境安装:选对版本,少走弯路

我个人的习惯是,给 SDK 测试项目单独配一个 Python 版本,不要用系统自带的 2.7 或者过老的 3.6。现在主流 SDK 测试框架基本都要求 Python ≥ 3.8,推荐 3.10 或 3.11。为什么?

  • 3.8~3.11 是目前大多数第三方库的适配目标,遇到兼容性问题容易搜到解决方案。
  • 3.10+ 引入了很多类型注解和性能改进,写测试用例时更顺手。
  • 3.12 刚出,有些老旧测试工具还没跟上,暂不建议用于生产级测试框架。

要点:不要用 Python 2.7 写新项目,SDK 厂商基本都停止支持了。我用 pyenv 管理多版本,切换到 3.10 只用一行命令。

安装完成后,执行 python --version 和 pip --version,确认路径正确。我曾经在 Windows 上碰到过系统里三个 Python 互相打架,最后不得不全清掉重装。建议用 pyenv(macOS/Linux)或 Python 官方安装器(Windows)一路默认,省心。

虚拟环境管理:隔离依赖的小盒子

说白了,虚拟环境就是给每个项目划一个独立的小房间,房间里的包互不干扰。SDK 测试框架通常依赖几十个包,项目之间版本冲突太常见了。比如一个项目要 requests 2.25,另一个要 3.0,不隔离就直接崩。

Python 自带的 venv 就够用,但我推荐加上 virtualenv,因为它的性能更好、支持 Python 版本更广。用法很简单:

# 创建虚拟环境
python -m venv sdk_test_env

# 激活(Windows)
sdk_test_env\Scripts\activate

# 激活(macOS/Linux)
source sdk_test_env/bin/activate

小技巧:我习惯在项目根目录下建一个 .venv 文件夹,然后配合 IDE 自动识别。这样团队成员 clone 代码后,直接激活就行。

注意:激活后终端前面会多出 (sdk_test_env) 提示。如果没出现,检查一下是否运行了正确的运行脚本。我曾经有次在 Windows 上用错了 PowerShell 的执行策略,导致激活失败,折腾了半天。

依赖管理:Poetry 与 Pipenv 对比

光有虚拟环境还不够,还得有个工具帮我们把依赖版本「锁死」。否则今天装的是 1.0,明天队友装了 1.1,测试结果不一样,坑就大了。社区里最常见的两个选手是 Poetry 和 Pipenv。我自己两个都用过,现在偏向 Poetry。下面这张表从几个关键维度对比:

对比项 Poetry Pipenv
锁文件格式 poetry.lock(完整锁,精确至哈希) Pipfile.lock(兼容 Pipfile)
依赖解析速度 较快,使用 SAT 求解器 中等,部分场景慢
项目结构 pyproject.toml(标准) Pipfile + setup.py 可选
构建与发布 内置 build 和 publish 通常需额外工具
社区活跃度 高,PyPI 官方推荐 维护放缓,部分 issue 停滞
虚拟环境管理 自动创建,集成 in-project 自动创建,但配置稍多

看得差不多了吧?我个人经验是:如果是新项目,直接上 Poetry。它把依赖管理、虚拟环境、打包发布都整合在 pyproject.toml 里,很优雅。如果你的团队历史项目用了 Pipenv,也没必要硬改,保持工具统一就行。但注意,Pipenv 的 Pipfile 和 Poetry 的格式不兼容,迁移时要小心。

实操:用 Poetry 搭建测试环境

我用 Poetry 来演示一下完整的依赖管理流程。假设我们要给一个 SDK 测试框架搭建环境:

  1. 安装 Poetry(推荐使用官方脚本,避免系统 Python 污染)
curl -sSL https://install.python-poetry.org | python3 -
  1. 初始化项目
cd sdk_test_framework
poetry init --no-interaction

这会生成 pyproject.toml 文件,里面记录项目元数据和依赖声明。

  1. 添加测试框架依赖(比如 pytest、requests、allure-pytest)
poetry add pytest requests allure-pytest

这步会自动解析依赖树,生成 poetry.lock 锁文件。以后团队其他人执行 poetry install 就能安装一模一样的环境。

  1. 激活虚拟环境并运行测试
poetry shell    # 激活
pytest tests/   # 跑测试

如果不想进入 shell,也可以直接 poetry run pytest tests/,效果一样。

注意:Poetry 默认会在你系统缓存目录创建虚拟环境,不放在项目里。如果你想让 .venv 在项目目录内被 IDE 识别,需要执行:poetry config virtualenvs.in-project true。这是我的血泪教训。

避坑指南:我曾踩过的两个大坑

  • 不要混用 pip 和 Poetry。 同一个项目里,用 Poetry 管理依赖就不要手动 pip install,否则锁文件会不一致,导致 CI 构建出异常。我曾经在本地手动 pip 装了个调试工具,结果把 poetry.lock 搞乱了,队友拉代码后一直报版本冲突。
  • 虚拟环境别忘激活。 这在 CI 脚本里特别容易出问题。如果你的测试脚本没有用 poetry run 或 source .venv/bin/activate,依赖会装到系统 Python,CI 和本地结果不一样。最安全的做法是:在 Makefile 或 shell 脚本里强制使用 poetry run 执行所有 Python 命令。

知识体系总览

下面这张图梳理了本章涉及的核心流程:从安装 Python 到用 Poetry 管理依赖,最终锁定版本并交付测试。

环境准备核心流程 环境准备核心流程 安装 Python 3.10+ 创建并激活虚拟环境 (venv) 选择 Poetry / Pipenv 初始化项目 → 锁文件 (poetry.lock) 输出产物 pyproject.toml poetry.lock .venv 文件夹

你想想看,只要走通这个流程,团队里所有人本地和 CI 的环境就一模一样了。SDK 兼容测试最怕的就是「我本地能跑,你那就报错」,环境统一可以干掉 80% 的这种问题。

小结(其实不算小结)

环境准备这部分,说白了就是两件事:

  • 隔离:虚拟环境把项目依赖锁在小盒子里。
  • 锁定:Poetry/Pipenv 用锁文件确保版本不飘。

搞定了这两个,后面写测试代码、跑自动化脚本才不会突然被「依赖异常」砸一脸。我每次接手新项目,第一步永远是检查 .venv 和 poetry.lock 是否合规,这比看代码还重要。嗯,接下来你可以照着这流程,在自己的机器上搭一遍试试。