2. 测试环境搭建:Python环境、Pytest框架、虚拟环境管理、常用库安装
做嵌入式测试,第一件事不是写脚本,而是把环境搭稳。我见过太多人上来就 pip install,结果依赖冲突、版本不对、跑起来报错,折腾半天才发现是环境问题。说白了,环境搭不好,后面全是白费功夫。
这一章,我们就从零开始,把 Python 环境、虚拟环境、Pytest 框架、还有那几个常用的库(paramiko、serial、pyvisa)全部装好、配好、跑通。跟着我的节奏来,半小时内搞定。
2.1 Python 环境安装与版本选择
我个人习惯用 Python 3.8 到 3.11 之间的版本。为什么?因为 paramiko 和 pyvisa 在 3.12 上还有兼容性问题。你想想看,项目急着上线,结果库装不上,多尴尬。
安装步骤(Windows / Linux / macOS)
- 下载安装包: 去 python.org 下载对应系统的安装包。Windows 选 Windows installer (64-bit)。
- 安装时勾选: "Add Python to PATH"(这个必须勾,不然命令行找不到 python)。
- 验证安装: 打开终端,输入
python --version,看到版本号就对了。
# 验证 Python 安装
python --version
# 输出示例:Python 3.10.11
# 验证 pip
pip --version
# 输出示例:pip 23.2.1 from ... (python 3.10)
python3 和 pip3 来区分。我曾经在一个项目里搞混了,结果脚本在 Python 2 下跑了一整天,全是编码错误。
2.2 虚拟环境管理:为什么必须用?
你想想看,一个项目用 paramiko 2.8,另一个项目用 paramiko 3.0。如果全装到系统里,早晚会冲突。虚拟环境就是干这个的——每个项目有自己的小天地,互不干扰。
Python 自带的 venv 模块就够用,不需要额外装 virtualenv。我一般这么操作:
创建和激活虚拟环境
# 创建虚拟环境(在项目根目录下)
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# Linux / macOS:
source venv/bin/activate
# 看到终端前面多了 (venv) 就说明激活成功了
核心原则: 每个嵌入式测试项目,单独建一个虚拟环境。不要混用,不要偷懒。我吃过亏——有一次把自动化测试脚本和生产环境的库混在一起,结果升级库的时候把生产环境搞崩了,被领导骂了一下午。
退出虚拟环境
deactivate
嗯,就这么简单。退出后终端前面的 (venv) 就消失了。
2.3 Pytest 框架安装与基础配置
Pytest 是我最常用的测试框架。比 unittest 简洁,比 nose 活跃。说白了,嵌入式测试脚本用 pytest,写起来快、跑起来稳、报告也漂亮。
安装 Pytest
# 确保在虚拟环境中
pip install pytest
# 验证安装
pytest --version
# 输出示例:pytest 7.4.0
基础配置文件:pytest.ini
在项目根目录下创建一个 pytest.ini,写上这些:
[pytest]
# 测试文件命名规则
python_files = test_*.py *_test.py
# 测试函数命名规则
python_functions = test_*
# 测试类命名规则
python_classes = Test*
# 日志级别
log_cli = true
log_cli_level = INFO
# 测试结果输出格式
addopts = -v --tb=short
--tb=short 让错误信息只显示关键行,不会刷屏。调试的时候可以改成 --tb=long,看完整堆栈。
第一个 Pytest 测试脚本
创建一个 test_demo.py:
# test_demo.py
def test_addition():
assert 1 + 1 == 2
def test_subtraction():
assert 3 - 1 == 2
def test_fail_example():
# 这个会失败,用来演示错误输出
assert 2 * 2 == 5
运行:
pytest
你会看到绿色的 . 表示通过,红色的 F 表示失败。嗯,第三个测试会红,正好看看错误信息长什么样。
2.4 常用库安装:paramiko、serial、pyvisa
这三个库是嵌入式测试的标配。paramiko 管 SSH 远程控制,serial 管串口通信,pyvisa 管仪器控制。我一个个说。
2.4.1 paramiko:SSH 远程控制
嵌入式设备很多是 Linux 系统,通过 SSH 登录、执行命令、传文件,paramiko 就是干这个的。
pip install paramiko
验证安装:
python -c "import paramiko; print(paramiko.__version__)"
典型场景: 通过 SSH 登录到嵌入式设备,执行 uname -a 查看系统信息,或者上传固件、下载日志。我在一个智能网关项目里,用 paramiko 批量升级了 200 台设备,全程自动化,省了三天人工。
2.4.2 pyserial:串口通信
串口是嵌入式调试的命脉。pyserial 让 Python 能读写串口,跟设备交互。
pip install pyserial
验证安装:
python -c "import serial; print(serial.__version__)"
mode 命令释放串口。
2.4.3 pyvisa:仪器控制
示波器、万用表、信号发生器,这些仪器通常用 GPIB、USB 或以太网控制。pyvisa 是 Python 和仪器之间的桥梁。
pip install pyvisa pyvisa-py
验证安装:
python -c "import pyvisa; rm = pyvisa.ResourceManager(); print(rm.list_resources())"
pyvisa-py 作为纯 Python 后端。如果只是简单测试,pyvisa-py 够用了。
2.5 依赖管理与 requirements.txt
项目做大了,依赖会越来越多。手动一个个装不现实,也容易漏。用 requirements.txt 统一管理。
生成 requirements.txt
# 在虚拟环境中,导出当前所有已安装的包
pip freeze > requirements.txt
生成的 requirements.txt 内容大概长这样:
paramiko==3.3.1
pyserial==3.5
pytest==7.4.0
pyvisa==1.13.0
pyvisa-py==0.6.1
从 requirements.txt 安装
pip install -r requirements.txt
最佳实践: 每次新增依赖,都更新 requirements.txt。团队协作时,别人拉下代码直接 pip install -r requirements.txt 就能复现环境。我见过一个项目,没有 requirements.txt,新人配环境配了两天——别走那条路。
2.6 本章知识体系总览
下面这张图把本章的核心内容串起来了。你可以把它当作环境搭建的检查清单。
2.7 常见问题与避坑指南
| 问题 | 原因 | 解决办法 |
|---|---|---|
pip 命令找不到 |
Python 未添加到 PATH | 重新安装,勾选 "Add Python to PATH" |
| 虚拟环境激活后 pip 还是全局的 | 激活命令没执行成功 | 检查终端前面是否有 (venv) 标识 |
| pyserial 打开串口报错 | 串口被占用或权限不足 | 关闭其他串口工具;Linux 下加 sudo 或加入 dialout 组 |
| pyvisa 找不到仪器 | 后端未安装或驱动不对 | Windows 装 NI-VISA;Linux 用 pyvisa-py |
| paramiko 连接超时 | IP/端口不对,或防火墙拦截 | 先用 ping 和 telnet 测试网络连通性 |
我曾经踩过的坑: 有一次在 Linux 服务器上装 pyvisa,忘了装 libvisa 依赖,结果 ResourceManager() 一直报错。折腾了两小时才发现是少了个 .so 文件。所以,Linux 上装 pyvisa 之前,先跑一下 sudo apt-get install libvisa0。
2.8 快速验证清单
环境搭完,别急着写脚本。先跑一遍这个清单,确保所有组件都正常工作:
- Python 版本:
python --version→ 3.10.x - 虚拟环境: 激活后
pip list→ 只有基础包 - Pytest:
pytest --version→ 7.x - paramiko:
python -c "import paramiko"→ 无报错 - pyserial:
python -c "import serial"→ 无报错 - pyvisa:
python -c "import pyvisa"→ 无报错 - requirements.txt:
pip freeze > requirements.txt→ 文件生成成功