第三章:测试程序开发环境搭建
Python/C++混合编程环境
说实话,刚入行那会儿,我也纠结过到底用Python还是C++。
后来我明白了——小孩子才做选择,成年人全都要。
在ATE测试领域,Python负责快速开发、数据分析、流程控制。C++负责底层驱动、高速通信、实时控制。两者配合,才是量产测试的黄金搭档。
为什么需要混合编程?
你想想看,测试机台每秒要处理几万条测试向量。纯Python跑不动,纯C++写起来又太慢。
我个人的习惯是:顶层逻辑用Python,底层驱动用C++。Python调用C++动态库,既保证了开发效率,又保证了执行速度。
核心思路:
- Python作为主控语言,负责测试流程、数据处理、报表生成
- C++编译成动态链接库(.so或.dll),负责硬件通信、高速采样
- 通过ctypes或pybind11实现Python调用C++
环境搭建步骤
嗯,这里要注意,不同操作系统略有差异。我以Linux环境为例,Windows类似。
- 安装Python 3.8+:建议用Anaconda管理环境,避免包冲突
- 安装C++编译器:g++(Linux)或MSVC(Windows)
- 安装pybind11:
pip install pybind11 - 配置CMake:用于构建C++项目
我曾经在项目里踩过一个坑——Python和C++的位数不一致。Python是32位,C++编译成64位,调用时直接崩溃。排查了半天才发现问题。所以记住:Python和C++的位数必须一致。
SDK安装与配置
每家ATE厂商都有自己的SDK。比如Teradyne的IG-XL、Advantest的T2000、Chroma的测试系统。
SDK安装其实不复杂,但有几个关键点要注意:
| SDK组件 | 作用 | 安装注意事项 |
|---|---|---|
| API库 | 提供测试机控制接口 | 注意版本与测试机固件匹配 |
| 驱动文件 | 底层硬件通信 | 需要管理员权限安装 |
| 示例代码 | 快速上手参考 | 建议先跑通官方示例 |
| 文档手册 | API说明、参数定义 | 一定要看Release Notes |
我的小技巧:
安装SDK后,先跑一遍厂商自带的测试例程。如果例程都跑不通,说明环境有问题,别急着写自己的代码。
第一个Hello World测试程序
好了,理论说完了,咱们直接上手写代码。
这个程序很简单:用Python调用C++写的测试函数,实现一个虚拟的“测试通过/失败”判断。
第一步:C++端代码
创建一个 test_core.cpp 文件:
#include <pybind11/pybind11.h>
#include <iostream>
namespace py = pybind11;
// 模拟ATE测试函数
int run_test(int pin, double voltage, double limit) {
std::cout << "测试引脚: " << pin << std::endl;
std::cout << "施加电压: " << voltage << "V" << std::endl;
// 模拟测试结果
if (voltage > limit) {
std::cout << "结果: PASS" << std::endl;
return 1; // 通过
} else {
std::cout << "结果: FAIL" << std::endl;
return 0; // 失败
}
}
// 绑定到Python
PYBIND11_MODULE(test_core, m) {
m.doc() = "ATE测试核心模块";
m.def("run_test", &run_test, "执行引脚测试",
py::arg("pin"), py::arg("voltage"), py::arg("limit"));
}
第二步:编译C++代码
写一个 CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(test_core)
set(PYBIND11_DIR /path/to/pybind11)
add_subdirectory(${PYBIND11_DIR} pybind11)
pybind11_add_module(test_core test_core.cpp)
然后编译:
mkdir build && cd build
cmake ..
make
编译后会生成 test_core.so(Linux)或 test_core.pyd(Windows)。
注意:
编译时一定要确认Python版本。我遇到过用Python 3.9编译的库,在Python 3.10下直接报错。说白了,版本必须严格对应。
第三步:Python调用
创建一个 hello_test.py:
import test_core
print("=== AI芯片量产测试 Hello World ===")
# 测试引脚1,施加1.2V,上限1.0V
result1 = test_core.run_test(pin=1, voltage=1.2, limit=1.0)
print(f"测试1结果: {'PASS' if result1 else 'FAIL'}")
# 测试引脚2,施加0.8V,上限1.0V
result2 = test_core.run_test(pin=2, voltage=0.8, limit=1.0)
print(f"测试2结果: {'PASS' if result2 else 'FAIL'}")
print("=== 测试完成 ===")
运行结果
=== AI芯片量产测试 Hello World ===
测试引脚: 1
施加电压: 1.2V
结果: PASS
测试1结果: PASS
测试引脚: 2
施加电压: 0.8V
结果: FAIL
测试2结果: FAIL
=== 测试完成 ===
看到这个输出,说明你的混合编程环境搭建成功了。
避坑指南
我总结几个常见问题,都是我在项目里真金白银换来的教训:
- 路径问题:Python找不到编译好的.so文件。解决办法是把.so放在当前目录,或者设置
PYTHONPATH环境变量。 - 权限问题:Linux下访问测试机硬件需要root权限。我建议用
sudo运行Python脚本,或者配置udev规则。 - 内存泄漏:C++代码里new了对象没delete,Python调用多了内存暴涨。写C++扩展时一定要做好内存管理。
- 线程安全:Python的GIL会影响多线程调用C++。如果要做并行测试,建议用多进程而不是多线程。
进阶建议:
当你熟悉了基础调用后,可以尝试用 numpy 传递数组数据给C++,这样能处理大批量测试数据。我在做ADC测试时就是这么干的,速度提升了10倍不止。
小结
环境搭建是量产测试的第一步,也是最容易出问题的一步。
说白了,只要把Python和C++的桥梁搭好,后面的事情就顺了。我建议你把这个Hello World程序跑通后,再尝试修改参数、增加测试项,慢慢就会找到感觉。
下一章,我们会正式进入测试向量生成和时序配置。准备好了吗?
公众号:蓝海资料掘金营,微信deep3321