自动化测试入门(一)

分享一段文字,避免自己成为高知识低文化的工程师:

在这个可以通过AI制作一切的时代,还是坚持手打码字(代码也可以AI)。不知道该说自己是老古董,不会与时俱进?还是说有所坚持是对的。

自动化测试,说白了就是让仪器自己干活。 你想想看,一个产品要测几百个频点、几十种模式,手动按按钮能按到怀疑人生。我当年刚入行时,就干过这种傻事------拿着万用表一个一个点,结果测到第50个时手一抖,数据全乱了。从那以后,我铁了心要学自动化。 这一章,咱们就聊聊怎么用Python控制仪器。别怕,门槛不高,但学会了,效率能翻十倍。

Python基础回顾:够用就行

Python这东西,语法简单,上手快。做硬件测试,不需要你成为Python高手,但有几个基础点必须熟。

变量与数据类型

说白了,变量就是给数据起个名字。测试中常用的是字符串和数字。

python 复制代码
# 字符串:仪器返回的原始数据
raw_data = "1.2345E+02"
# 浮点数:转换后的数值
voltage = float(raw_data)
print(f"电压值:{voltage} V")

嗯,这里要注意:仪器返回的往往是科学计数法字符串,记得转成float再计算。

列表与循环

批量测试时,列表和循环是绝配。比如你要测10个频点:

python 复制代码
freq_list = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]  # 单位MHz
for freq in freq_list:
    print(f"正在测试 {freq} MHz...")
    # 这里调用仪器设置频率
    # 读取数据
    # 保存结果

我习惯用for循环,简单直观。while循环偶尔也用,比如等待仪器稳定时。

函数封装 别把所有代码堆在一起。把重复操作写成函数,清爽又易维护。

python 复制代码
def set_frequency(freq_mhz):
    """设置信号源频率"""
    command = f"FREQ {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和仪器怎么通信?靠的就是VISA(Virtual Instrument Software Architecture)。pyvisa是Python版的VISA库,免费又好用。

安装步骤

先装NI-VISA驱动(这是底层驱动,仪器厂商一般会提供)。然后装pyvisa:

python 复制代码
pip install pyvisa

如果你用的是安捷伦/是德科技的仪器,可能还需要装pyvisa-py:

python 复制代码
pip install pyvisa-py

我个人建议:先装NI-VISA,兼容性最好。我遇到过用pyvisa-py连不上老款安捷伦仪器的坑,后来换NI-VISA就解决了。

连接仪器

连接前,先看看仪器用什么接口。常见的有USB、GPIB、LAN(TCP/IP)。

复制代码
import pyvisa

# 创建资源管理器
rm = pyvisa.ResourceManager()

# 列出所有可用仪器
print(rm.list_resources())
# 输出示例:('USB0::0x2A8D::0x1701::MY12345678::0::INSTR',)

找到仪器地址后,连接它:

python 复制代码
# 用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命令

SCPI(Standard Commands for Programmable Instruments)是仪器控制的通用语言。说白了,就是一套标准化的指令集,不同厂家的仪器,命令格式基本一致。

SCPI命令结构

SCPI命令像文件路径一样,用冒号分层:

python 复制代码
:SOURce:FREQuency 1000000
:MEASure:VOLTage:DC?

大写部分可以简写(通常写前4个字符):

python 复制代码
:SOUR:FREQ 1000000
:MEAS:VOLT:DC?

问号表示查询,没有问号就是设置。

常用SCPI命令示例

以信号源和万用表为例

python 复制代码
# 信号源设置
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文件。

python 复制代码
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()

💡 我的小技巧:

实际项目中,我习惯把仪器地址、测量次数、文件路径都写成配置参数。这样换仪器或改参数时,不用改代码,改配置文件就行。

小结

自动化测试入门,说白了就三步:

  1. Python基础:变量、循环、函数,够用就行。
  2. pyvisa库:装驱动、连仪器、发命令。
  3. SCPI命令 :记住*IDN?查身份,:MEAS测数据。

你想想看,以前手动测一个点要10秒,现在自动化一秒测10个点。省下来的时间,喝杯咖啡不香吗?

相关推荐
miofly1 小时前
GitHub 今日推荐|Snapintosh:用 ARM EL2 监控器骗过内核,让骁龙芯片笔记本跑 macOS
python·开源·github
打工仔折腾 AI1 小时前
Linux 网络编程:从零掌握 TCP Socket 编程与 C++ 实战落地
linux·网络·人工智能·后端·python·tcp/ip·性能优化
余额瞒着我当琳1 小时前
C++11,发展历史浅谈,初始化列表和对象初始化,右值引用和移动语义
java·开发语言·c++·算法
学逆向的1 小时前
C 宏函数
c语言·开发语言·网络安全
Code_Solitude1 小时前
C语言:指针题型总结
c语言·开发语言
曹牧1 小时前
Java:`tools.jar`
java·开发语言·jar
我命由我123451 小时前
Python 开发 - Python 项目部署(Windows 与 Linux)
java·linux·windows·后端·python·java-ee·python3.11
小白旗1 小时前
PHP 严重漏洞风险提醒:如何排查运行环境并做好安全更新
开发语言·php