第三章:测试程序开发环境搭建

Python/C++混合编程环境

说实话,刚入行那会儿,我也纠结过到底用Python还是C++。

后来我明白了——小孩子才做选择,成年人全都要。

在ATE测试领域,Python负责快速开发、数据分析、流程控制。C++负责底层驱动、高速通信、实时控制。两者配合,才是量产测试的黄金搭档。

为什么需要混合编程?

你想想看,测试机台每秒要处理几万条测试向量。纯Python跑不动,纯C++写起来又太慢。

我个人的习惯是:顶层逻辑用Python,底层驱动用C++。Python调用C++动态库,既保证了开发效率,又保证了执行速度。

核心思路:

  • Python作为主控语言,负责测试流程、数据处理、报表生成
  • C++编译成动态链接库(.so或.dll),负责硬件通信、高速采样
  • 通过ctypes或pybind11实现Python调用C++

环境搭建步骤

嗯,这里要注意,不同操作系统略有差异。我以Linux环境为例,Windows类似。

  1. 安装Python 3.8+:建议用Anaconda管理环境,避免包冲突
  2. 安装C++编译器:g++(Linux)或MSVC(Windows)
  3. 安装pybind11pip install pybind11
  4. 配置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