4. 自动化测试框架介绍

做 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() 就建立了会话。

核心流程:

  1. 初始化资源管理器:rm = pyvisa.ResourceManager()
  2. 获取仪器列表:rm.list_resources()
  3. 打开指定仪器:inst = rm.open_resource('GPIB0::1::INSTR')
  4. 发送命令:inst.write(':TRIGger:SOURce EXT')
  5. 读取数据: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 / TkinterGUI 界面给产线操作员封装一个简易测试界面
struct二进制数据解析解析示波器原始波形数据(8 位、16 位)

说出来你可能不信,我大部分眼图分析脚本里,最忙的反而是 numpy——动辄上百万个采样点,用 Python 原生列表循环算眼高,慢得没法用。换成 numpy 矢量化操作,咔咔几秒搞定。

Python ATE 自动化测试框架组件关系 测试逻辑 / 序列执行 (Python) PyVISA (GPIB/USB/TCP) PySerial (RS232) 数据解析 (numpy/struct) 示波器 / 频谱仪 电源 / 万用表 波形数据文件 / 缓存 matplotlib 眼图绘图 scipy 统计分析 报表生成 (pandas) 测试报告 / 判定结果 图:Python ATE 自动化框架中,pyvisa/pySerial 管仪器通讯,numpy/pandas 管数据,matplotlib/scipy 管分析绘图

总结一下我的选择逻辑

其实你不用把每个库都学透。我的经验是:先搞定 pyvisa 和 pySerial,能跟仪器对上话;然后加上 numpy 处理数据,matplotlib 画图,一套最小可用框架就搭起来了。后面碰到具体需求再往里加 scipy、pandas。说白了,Python 的好处就是 —— 要什么加什么,不用的库不用管。

嗯,这里要注意一点:pyvisa 默认的 timeout 是一个坑,pySerial 的波特率配置是另一个坑。调试阶段多打印日志,多打印异常堆栈,能省你半天时间。我最早做自动化眼图测试时,脚本跑着跑着突然报超时,查了三个小时才发现是指令里少了个换行符。从那以后我写串口通讯一定先 print(ser.write(...)) 确认发出去的数据对不对。