大家好,我是謓泽。今天聊一个最有价值的交付物自动化测试框架雏形。别被 "框架""OOP" 这些词吓到,说白了就是用 Python 写个脚本,让仪器自动测芯片、自动出报告,把人工拷屏升级成自动化脚本。
📋 知识点清单・逐点解答
知识点 0:先搞懂环境怎么搭
需要的软件
- Python 3.x:这个不用多说,编程基础环境
- PyVISA:Python 控制仪器的库,相当于 "电脑和仪器之间的翻译官"
安装命令(一行搞定)
py -3 -m pip install pyvisa大白话:PyVISA 就是个工具包,装上之后你的 Python 就能跟示波器、频谱仪、电源这些仪器说话了,发指令、读数据全都靠它。
知识点 1:自动化测试平台整体架构
先上一张架构图,用文字版给你画出来:
测试PC (Python + PyVISA) ↓ 发指令/读数据 仪器(矢网/频谱仪/电源) ↓ 测芯片 被测芯片 ↓ 返回数据 判断 PASS / FAIL ↓ 生成报表用人话讲一遍流程
- 电脑上跑 Python 脚本→ 通过 PyVISA 库给仪器发命令
- 仪器收到命令→ 自动设置参数、开始测量芯片
- 测完把数据传回电脑→ Python 拿到数据
- Python 自动判断→ 数据在规格内就是 PASS,超了就是 FAIL
- 最后自动生成报表→ CSV 或者 PDF,不用人工抄数
一句话总结:以前是人守着仪器按按钮、记数据、填表格;现在是 Python 脚本自动干完这一整套,人去摸鱼就行。
知识点 2:框架四大组件(核心中的核心)
一个完整的自动化测试框架,拆开来就是四大模块。记住这四个,框架就搭起来了。
① 仪器抽象层(Instrument Abstraction)
干啥的:把每种仪器都封装成一个类,统一接口。
四个统一方法:
connect()— 连接仪器configure()— 设置参数measure()— 开始测量、读数据disconnect()— 断开连接
大白话翻译:就像给所有仪器做了个 "万能遥控器"。不管是矢网还是电源,你都只用按这四个按钮 —— 连、设、测、断。以后换仪器型号,只改里面的代码,外面的调用不用动。
② 测试项(TestItem)
干啥的:每一个测试指标就是一个 TestItem。
包含什么:
- 名称(name):比如 "增益测试"" 噪声系数测试 "
- 仪器(instrument):用哪台仪器测
- 参数(params):测试条件设成啥
- 判定条件(limits):上限下限是多少,超了就算 Fail
run()方法:执行测试的具体代码
大白话:就像一张 "测试工单"。上面写清楚了:测什么、用啥测、设啥参数、合格标准是啥、怎么测。一张工单对应一个测试项。
③ 测试序列(TestSequence)
干啥的:把一堆测试项按顺序串起来,挨个执行,收集结果。
工作流程:
- 添加测试项 → 2. 按顺序执行 → 3. 收集所有结果
大白话:就是个 "流水线工长"。手里攥着一叠测试工单,按顺序一张一张发出去测,测完把结果都收回来。
④ 报表(Report)
干啥的:统计所有测试结果,画图,导出成 CSV 或 PDF。
输出内容:
- 统计:总共测了多少项、Pass 几个、Fail 几个
- 画图:测试数据的曲线图
- 导出:CSV 表格 / PDF 报告
大白话:就是个 "资料员"。所有测试结果汇总过来,整理成漂亮的表格和图,直接发给老板就行。
知识点 3:你的优势 & 为什么这是入职第一个月的交付物
现状:芯片测试团队可能缺软件能力,还在用 "手工拷屏" 的原始方式测芯片。
你的价值:来了之后帮他们从 "手工拷屏" 升级到 "自动化脚本"。
这就是你入职前几周最能出成果的地方!不用懂很深的芯片设计,只要会 Python,把测试流程自动化,立刻就能帮团队省时间,产出看得见。
知识点 4:AI 配合使用指南(新手快速上手)
① 让 AI 帮你设计芯片自动化测试框架的 Python 代码骨架
直接让 AI 生成代码模板,包含:
- 仪器基类(PyVISA 模拟模式,不需要真仪器也能跑)
- TestItem 类:name /instrument/params /limits/run ()
- TestSequence 类:添加测试项、按序执行、收集结果
- 简单结果打印、详细注释
② 基于这个框架,添加一个 "S21 测试" 子模块
具体要求:
- 模拟 10~20GHz 范围 10 个频点测试
- 模拟 S21 结果
③ 购买代码后让 AI 逐行通读、截图记录
把 AI 生成的代码逐行看懂,每一行干啥的都搞明白,截图保存当笔记。
✏️ 练习题・逐题拆解
题目 1:自动化测试框架四大组件分别是什么?
答案:仪器抽象层、测试项(TestItem)、测试序列(TestSequence)、报表
逐个再复习一遍:
| 组件 | 干啥的 | 比喻 |
|---|---|---|
| 仪器抽象层 | 封装仪器,统一接口 | 万能遥控器 |
| 测试项 TestItem | 单个测试的定义和执行 | 一张测试工单 |
| 测试序列 TestSequence | 多个测试项按序执行 | 流水线工长 |
| 报表 Report | 统计结果、导出报告 | 资料员 |
题目 2:为什么仪器基类用模拟模式而不是连真仪器?
提示:开发阶段没仪器
答案核心原因:
开发阶段没仪器可用:你写代码的时候,实验室仪器可能被别人占着,或者根本还没买。用模拟模式,电脑上直接就能开发调试,不用等仪器。
方便调试代码逻辑:先把框架逻辑跑通 —— 测试项加对了吗?判定条件对不对?报表生成正常不?这些都可以用模拟数据先测通。
降低门槛,新手友好:不需要真仪器、不需要接线、不需要 GPIB / 网口配置,装个 Python 就能跑,学习成本极低。
代码写完再接真仪器:等框架逻辑都调通了,最后把模拟模式换成真实仪器的 SCPI 指令就行,框架代码不用大改。
一句话总结:先在电脑上把 "骨架" 搭好跑通,等有仪器了再把 "真血肉" 接上去。开发效率高,不依赖硬件。
题目 3:跑通今天写的框架代码,截图保存
这道是实操题,给大家一个最简版框架代码参考,复制到 Python 里直接能跑:
# ========== 1. 仪器抽象层(模拟模式) ========== class MockInstrument: def __init__(self, name): self.name = name def connect(self): print(f"[连接] {self.name} 已连接(模拟模式)") def configure(self, **params): print(f"[设置] {self.name} 参数:{params}") def measure(self): # 模拟返回测量数据 import random return round(15 + random.uniform(-2, 2), 2) # 模拟增益15dB左右 def disconnect(self): print(f"[断开] {self.name} 已断开") # ========== 2. 测试项 TestItem ========== class TestItem: def __init__(self, name, instrument, params, limits): self.name = name self.instrument = instrument self.params = params self.limits = limits # (min, max) def run(self): self.instrument.connect() self.instrument.configure(**self.params) result = self.instrument.measure() # 判断Pass/Fail min_val, max_val = self.limits status = "PASS" if min_val <= result <= max_val else "FAIL" self.instrument.disconnect() return {"测试项": self.name, "结果": result, "状态": status} # ========== 3. 测试序列 TestSequence ========== class TestSequence: def __init__(self): self.test_items = [] self.results = [] def add_test(self, test_item): self.test_items.append(test_item) def run_all(self): print("=" * 40) print("开始执行测试序列...") print("=" * 40) for item in self.test_items: result = item.run() self.results.append(result) print(f" → {result['测试项']}: {result['结果']} [{result['状态']}]") print("=" * 40) print("测试完成!") # ========== 4. 报表(简易版) ========== def generate_report(results): print("\n" + "=" * 40) print("测试报表") print("=" * 40) pass_count = sum(1 for r in results if r["状态"] == "PASS") print(f"总计:{len(results)} 项 | PASS: {pass_count} | FAIL: {len(results)-pass_count}") for r in results: print(f" {r['测试项']}: {r['结果']} [{r['状态']}]") # ========== 主程序:跑起来 ========== if __name__ == "__main__": # 创建一台模拟仪器 vna = MockInstrument("模拟矢网") # 创建测试项 test1 = TestItem("增益测试", vna, {"freq": "10GHz"}, (10, 20)) test2 = TestItem("噪声系数测试", vna, {"freq": "15GHz"}, (0, 3)) # 创建测试序列并执行 seq = TestSequence() seq.add_test(test1) seq.add_test(test2) seq.run_all() # 生成报表 generate_report(seq.results)把这段代码存成 test_framework.py,命令行运行 python test_framework.py,就能看到完整的自动化测试流程跑通了!截图保存,交差神器~
🎯 最后划三个重点
- 四大组件要记牢:仪器抽象层、TestItem、TestSequence、报表
- 模拟模式是新手友好器:没真仪器也能开发框架,先跑通逻辑再接硬件
- 这是入职出成果的捷径:把手工测试变自动化,前几周就能拿出看得见的交付物