尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
自动化测试入门(一)
分享一段文字避免自己成为高知识低文化的工程师在这个可以通过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个点。省下来的时间喝杯咖啡不香吗
RELATED

相关推荐

日志聚合接口已经超时,后台任务为什么还没结束?

日志聚合接口已经超时,后台任务为什么还没结束?

日志聚合接口已经超时,后台任务为什么还没结束? 日志查询接口已经返回超时,为什么后台 goroutine 还留在进程里?代码里有 context,也写了 defer cancel(),看起来请求结束时该做的清理都做了。可沿着任务往…

📅 2026/10/23 7:51:55
js表单重置 和删除确认然后再删除 刷新

js表单重置 和删除确认然后再删除 刷新

document.getElementById(formUser).reset(); //下面的是jquery //$(#formUser)[0].reset(); $(#formUser).find(span).text(); 按删除按钮,需要确认后才能删除const cfwindow.confirm("确认要删除吗?") if (cftrue){//写删除代码}刷新loc…

📅 2026/10/23 7:51:55
Kiro 是亚马逊云科技打造的 AI 智能体开发平台,核心理念是“规范驱动开发“(Spec-Driven Development)

Kiro 是亚马逊云科技打造的 AI 智能体开发平台,核心理念是“规范驱动开发“(Spec-Driven Development)

2026 年 9 月 24 日至 10 月 22 日,亚马逊云科技联合 InfoQ 与 CSDN 发起了「Kiro 鬼点子计划」,面向极客、企业开发者和脑洞爱好者征集"看似荒诞、实则惊艳"的创意项目。 活动设置了三条赛道——“无用之用”“无趣之趣”“无心之心”&#x…

📅 2026/10/23 7:51:55
MORE NEWS

更多资讯

📰

Windows鼠标指针一键切换方案:原理、工具与自定义实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

K8s共享存储优化:CephFS迁移JuiceFS将Pod启动从47秒降至3秒

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

LangBot 快速接入 GLM-5.3:微信、飞书、Discord、Slack 多平台机器人实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Windows本地部署Dify实战:WSL2+Docker与RAG知识库

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

无源码也能“拆解“任意软件?30万星神器rea火了,但引发的争议比热度更大

无源码也能"拆解"任意软件?30万星神器rea火了,但引发的争议比热度更大 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea…

📰

AI原生架构与服务编排:后端开发范式迁移实战指南

1. 项目概述:这不是一次技术升级,而是一次开发范式的迁移“2026年后端开发进化:告别CRUD内卷,拥抱AI原生架构与服务编排新时代”——这个标题里没有一个词是虚的。它不是在喊口号,也不是在预测未来,而是对当…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬