自动化测试框架介绍:Python 在 ATE 自动化中的应用优势及常用库
做 ATE 测试这些年,我用过不少语言写测试脚本——从早期的 LabVIEW 到后来短暂的 C#,再到现在的 Python。说实话,Python 并不是性能最强的,但它就是最适合 ATE 自动化的那个。为什么?我一点点说。
为什么选 Python?
先说学习曲线。大部分测试工程师都不是专业码农出身,Python 的语法接近自然语言,一个刚毕业的新人,两三天就能上手写仪器控制脚本。你想想看,这在项目进度紧的时候有多重要。
再说生态。ATE 测试离不了数据处理和可视化——抓回来的眼图数据、时序测量值,总不能一个一个看吧?Python 的 numpy、pandas、matplotlib 一套下来,分析报表全搞定。我记得有一次客户要半小时内出 200 个 DUT 的眼图分析报告,用 Python 写个脚本自动解析、自动绘图,十分钟就全出来了。
还有跨平台。实验室的 Windows 工作站、产线的 Linux 服务器、甚至你自己的 Macbook,Python 一套代码到处跑。我在某大厂项目里遇到过底层硬件驱动只在 Linux 下稳定,上位机又必须用 Windows 的情况——Python 在两边都能跑,代码几乎不改,省了大麻烦。
PyVISA:仪器控制的主力军
ATE 自动化的核心就是跟仪器对话。PyVISA 是基于 VISA 标准的 Python 封装,支持 GPIB、USB、TCP/IP、RS232 等各种物理层。说白了,你写脚本时不用操心底层通讯协议,一个 rm.open_resource() 就建立了会话。
核心流程:
- 初始化资源管理器:
rm = pyvisa.ResourceManager() - 获取仪器列表:
rm.list_resources() - 打开指定仪器:
inst = rm.open_resource('GPIB0::1::INSTR') - 发送命令:
inst.write(':TRIGger:SOURce EXT') - 读取数据:
data = inst.query(':WAVeform:DATA?')
我个人习惯先把 Timeout 设大一点——比如 30000 ms。因为有些老仪器响应慢,默认 5000 ms 经常超时。我曾经在调试一个 80 年代的采样示波器时,超时异常报了一整屏,后来才发现是 Timeout 太短了。
避坑指南
我曾经遇到过:同一台仪器用 GPIB 线连接,Windows 系统下 PyVISA 自动识别到资源名,但换成 Linux 就死活找不到。后来发现是缺少 visa 后端。Linux 下需手动安装 pyvisa-py 纯 Python 后端,或者装 NI-VISA 的 Linux 版。建议多用 rm.list_resources() 打印资源名,确认仪器是否被系统识别。
PySerial:经典串口控制
尽管 USB 和以太网越来越普及,但产线上还有大量老设备只提供 RS232 接口——电源、万用表、甚至某些老式频谱仪。PySerial 就是处理串口通讯的标配。
import serial
ser = serial.Serial(
port='COM3',
baudrate=9600,
bytesize=8,
parity='N',
stopbits=1,
timeout=1
)
ser.write(b'*IDN?\n')
response = ser.readline()
print(response)
ser.close()
波特率、数据位、校验位、停止位——这四个参数必须跟仪器手册完全一致。我调试项目时经常把 timeout 设成 0.5 秒,因为产线节奏快,不能等太久。但注意:如果仪器命令回应慢,timeout 太短会导致读不全数据。
小技巧:用 ser.write(b'\n') 一定要带 b 前缀,Python 3 下字符串和字节串是分开的。很多新手在这里栽过跟头。
其他常用库速览
除了 pyvisa 和 pySerial,我的日常工具箱里还常备这些:
| 库名 | 用途 | 典型场景 |
|---|---|---|
| numpy / pandas | 数据存储、统计、滤波 | 处理眼图测量值(眼高、眼宽、抖动) |
| matplotlib | 绘图、眼图可视化 | 绘制眼图模板、直方图 |
| scipy | 信号处理、拟合 | 计算 BER 浴盆曲线、拟合抖动分布 |
| PyQt / Tkinter | GUI 界面 | 给产线操作员封装一个简易测试界面 |
| struct | 二进制数据解析 | 解析示波器原始波形数据(8 位、16 位) |
说出来你可能不信,我大部分眼图分析脚本里,最忙的反而是 numpy——动辄上百万个采样点,用 Python 原生列表循环算眼高,慢得没法用。换成 numpy 矢量化操作,咔咔几秒搞定。
总结一下我的选择逻辑
其实你不用把每个库都学透。我的经验是:先搞定 pyvisa 和 pySerial,能跟仪器对上话;然后加上 numpy 处理数据,matplotlib 画图,一套最小可用框架就搭起来了。后面碰到具体需求再往里加 scipy、pandas。说白了,Python 的好处就是 —— 要什么加什么,不用的库不用管。
嗯,这里要注意一点:pyvisa 默认的 timeout 是一个坑,pySerial 的波特率配置是另一个坑。调试阶段多打印日志,多打印异常堆栈,能省你半天时间。我最早做自动化眼图测试时,脚本跑着跑着突然报超时,查了三个小时才发现是指令里少了个换行符。从那以后我写串口通讯一定先 print(ser.write(...)) 确认发出去的数据对不对。