第3章:Python测试框架入门
说实话,很多做声学测试的工程师,一听到「编程」两个字就头大。我当年也是这样。但后来我发现,真正让测试效率翻倍的,不是多贵的仪器,而是你手头那几行代码。
这一章,我们就来搞定Python环境、PyCharm、pytest框架。嗯,这些都是基本功,但基本功不扎实,后面写自动化脚本时会各种踩坑。
3.1 Python环境配置
先说说Python版本的选择。我个人习惯用Python 3.8或3.9,为什么?因为我在项目中遇到过,有些声学库(比如pyAudio、sounddevice)对3.10以上版本支持不太好。你想想看,装了半天库发现不兼容,多耽误事。
安装步骤其实很简单:
- 去Python官网下载对应版本(Windows选64位安装包)
- 安装时记得勾选「Add Python to PATH」
- 打开命令行,输入
python --version验证
装好之后,建议立刻升级pip:
python -m pip install --upgrade pip
这一步很多人会忽略。但你不升级,后面装pytest时可能遇到版本警告。说白了,就是给自己省麻烦。
3.2 PyCharm安装与调试
编辑器这块,我推荐PyCharm Community版。为什么不用专业版?因为声学测试用不到Django那些Web功能,社区版完全够用,还免费。
安装要点:
- 下载时选「Community」版本
- 安装过程中,勾选「Add launchers dir to PATH」
- 主题选Darcula,保护眼睛(我常年盯着屏幕,深色主题确实舒服些)
第一次打开PyCharm,它会让你配置Python解释器。这里要注意:
创建新项目时,选择「New environment using Virtualenv」。这样每个项目都有自己的小天地,互不干扰。
调试功能怎么用? 我教你一个最实用的:
- 在代码行号旁边点一下,出现红色圆点(断点)
- 右键选择「Debug」运行
- 程序会在断点处暂停,你可以看变量值、一步步执行
这个功能在调试声学算法时特别有用。比如你写了一个FFT变换,结果不对,打断点看中间变量,一眼就能发现问题。
3.3 pytest框架搭建
pytest是我最常用的测试框架。为什么不用unittest?因为pytest的语法更简洁,fixture机制更灵活。我在做Soundbar量产测试时,用pytest管理了200多个测试用例,运行起来又快又稳。
安装pytest:
pip install pytest
验证安装:
pytest --version
写一个最简单的测试用例:
# test_demo.py
def test_soundbar_power_on():
"""测试Soundbar开机功能"""
assert True # 这里替换为实际测试逻辑
运行测试:
pytest test_demo.py -v
-v 参数会显示详细输出。你想想看,如果测试失败了,没有详细信息,你怎么定位问题?
- 自动发现测试文件(文件名以test_开头)
- 自动发现测试函数(函数名以test_开头)
- 丰富的插件生态(pytest-html生成报告、pytest-xdist并行执行)
3.4 项目目录结构
一个好的项目结构,能让团队协作事半功倍。我在量产测试项目中,目录结构是这样的:
soundbar_test_project/
├── tests/ # 测试用例目录
│ ├── test_power.py # 电源测试
│ ├── test_audio.py # 音频测试
│ └── test_bt.py # 蓝牙测试
├── src/ # 被测设备控制代码
│ ├── soundbar_control.py # Soundbar控制类
│ └── audio_analyzer.py # 音频分析器
├── config/ # 配置文件
│ ├── test_config.yaml # 测试参数配置
│ └── device_info.json # 设备信息
├── reports/ # 测试报告输出
├── conftest.py # pytest全局配置
├── pytest.ini # pytest配置文件
└── requirements.txt # 依赖包列表
每个目录的作用:
| 目录/文件 | 作用 |
|---|---|
| tests/ | 存放所有测试用例,按功能模块分文件 |
| src/ | 封装与Soundbar交互的底层代码 |
| config/ | 测试参数、设备信息,方便修改 |
| reports/ | 自动生成的测试报告,方便追溯 |
| conftest.py | 定义fixture、钩子函数 |
| pytest.ini | 配置pytest运行参数 |
最后,别忘了创建 requirements.txt:
pytest==7.4.0
pytest-html==3.2.0
pyyaml==6.0
这样别人拿到你的项目,直接 pip install -r requirements.txt 就能装好所有依赖。嗯,这就是专业和业余的区别。
好了,这一章的内容就到这里。环境搭好了,框架建起来了,下一章我们就可以真正开始写测试用例了。