自动化测试入门(一) 分享一段文字避免自己成为高知识低文化的工程师在这个可以通过AI制作一切的时代还是坚持手打码字代码也可以AI。不知道该说自己是老古董不会与时俱进还是说有所坚持是对的。自动化测试说白了就是让仪器自己干活。 你想想看一个产品要测几百个频点、几十种模式手动按按钮能按到怀疑人生。我当年刚入行时就干过这种傻事——拿着万用表一个一个点结果测到第50个时手一抖数据全乱了。从那以后我铁了心要学自动化。 这一章咱们就聊聊怎么用Python控制仪器。别怕门槛不高但学会了效率能翻十倍。Python基础回顾够用就行Python这东西语法简单上手快。做硬件测试不需要你成为Python高手但有几个基础点必须熟。变量与数据类型说白了变量就是给数据起个名字。测试中常用的是字符串和数字。# 字符串仪器返回的原始数据 raw_data 1.2345E02 # 浮点数转换后的数值 voltage float(raw_data) print(f电压值{voltage} V)嗯这里要注意仪器返回的往往是科学计数法字符串记得转成float再计算。列表与循环批量测试时列表和循环是绝配。比如你要测10个频点freq_list [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000] # 单位MHz for freq in freq_list: print(f正在测试 {freq} MHz...) # 这里调用仪器设置频率 # 读取数据 # 保存结果我习惯用for循环简单直观。while循环偶尔也用比如等待仪器稳定时。函数封装 别把所有代码堆在一起。把重复操作写成函数清爽又易维护。def set_frequency(freq_mhz): 设置信号源频率 command fFREQ {freq_mhz} MHz # 发送SCPI命令 instrument.write(command) print(f频率已设置为 {freq_mhz} MHz) def read_power(): 读取功率值 response instrument.query(MEAS:POW?) return float(response)你看这样写主程序就几行调用多舒服。pyvisa库安装与使用Python和仪器怎么通信靠的就是VISAVirtual Instrument Software Architecture。pyvisa是Python版的VISA库免费又好用。安装步骤先装NI-VISA驱动这是底层驱动仪器厂商一般会提供。然后装pyvisapip install pyvisa如果你用的是安捷伦/是德科技的仪器可能还需要装pyvisa-pypip install pyvisa-py我个人建议先装NI-VISA兼容性最好。我遇到过用pyvisa-py连不上老款安捷伦仪器的坑后来换NI-VISA就解决了。连接仪器连接前先看看仪器用什么接口。常见的有USB、GPIB、LANTCP/IP。import pyvisa # 创建资源管理器 rm pyvisa.ResourceManager() # 列出所有可用仪器 print(rm.list_resources()) # 输出示例(USB0::0x2A8D::0x1701::MY12345678::0::INSTR,)找到仪器地址后连接它# 用USB连接 instrument rm.open_resource(USB0::0x2A8D::0x1701::MY12345678::0::INSTR) # 用LAN连接IP地址 # instrument rm.open_resource(TCPIP0::192.168.1.100::inst0::INSTR) # 设置超时时间单位毫秒 instrument.timeout 5000 # 验证连接 print(instrument.query(*IDN?)) # 输出Keysight Technologies, N9320B, MY12345678, A.01.05嗯这里要注意*IDN?是通用查询命令所有仪器都支持。如果返回了仪器信息说明连接成功。常用操作操作方法说明写命令instrument.write(命令)只发送不等待返回查询命令instrument.query(命令)发送并等待返回结果读取数据instrument.read()读取缓冲区数据关闭连接instrument.close()测试结束记得关闭我习惯用query一步到位。但要注意有些仪器执行命令需要时间超时设置要合理。仪器控制基础SCPI命令SCPIStandard Commands for Programmable Instruments是仪器控制的通用语言。说白了就是一套标准化的指令集不同厂家的仪器命令格式基本一致。SCPI命令结构SCPI命令像文件路径一样用冒号分层:SOURce:FREQuency 1000000 :MEASure:VOLTage:DC?大写部分可以简写通常写前4个字符:SOUR:FREQ 1000000 :MEAS:VOLT:DC?问号表示查询没有问号就是设置。常用SCPI命令示例以信号源和万用表为例# 信号源设置 instrument.write(:SOUR:FREQ 1000000) # 设置频率1MHz instrument.write(:SOUR:VOLT 0.5) # 设置幅度0.5V instrument.write(:OUTP ON) # 打开输出 # 万用表测量 voltage instrument.query(:MEAS:VOLT:DC?) # 测直流电压 resistance instrument.query(:MEAS:RES?) # 测电阻你可能会问这些命令怎么记其实不用记仪器手册里都有。我一般把常用命令整理成表格贴在工作台旁边。避坑指南常见问题⚠️ 我曾经踩过的坑命令大小写SCPI不区分大小写但建议统一大写清晰易读。返回值带换行符仪器返回的字符串末尾通常有\n记得用.strip()去掉。仪器忙发送命令太快仪器可能没反应过来。加个time.sleep(0.1)缓冲一下。忘记关闭连接程序异常退出时仪器可能还占着端口。用try...finally确保关闭。实战自动测量电压并保存光说不练假把式。咱们写个完整的小程序控制万用表测10次电压保存到CSV文件。import pyvisa import time import csv def main(): # 连接仪器 rm pyvisa.ResourceManager() dmm rm.open_resource(USB0::0x2A8D::0x1701::MY12345678::0::INSTR) dmm.timeout 5000 # 准备数据文件 with open(voltage_data.csv, w, newline) as f: writer csv.writer(f) writer.writerow([次数, 电压(V)]) # 测量10次 for i in range(1, 11): # 发送查询命令 raw dmm.query(:MEAS:VOLT:DC?) # 清洗数据 voltage float(raw.strip()) # 写入文件 writer.writerow([i, voltage]) print(f第{i}次测量{voltage} V) # 等一会儿再测 time.sleep(0.5) # 关闭连接 dmm.close() print(测量完成数据已保存到 voltage_data.csv) if __name__ __main__: main() 我的小技巧实际项目中我习惯把仪器地址、测量次数、文件路径都写成配置参数。这样换仪器或改参数时不用改代码改配置文件就行。小结自动化测试入门说白了就三步Python基础变量、循环、函数够用就行。pyvisa库装驱动、连仪器、发命令。SCPI命令记住*IDN?查身份:MEAS测数据。你想想看以前手动测一个点要10秒现在自动化一秒测10个点。省下来的时间喝杯咖啡不香吗