2、Python基础速通(一):环境搭建、解释器与IDE选择、第一个自动化测试脚本

各位好,欢迎来到《脚本驱动下的嵌入式测试效率革命》的第二讲。

说实话,很多做嵌入式测试的朋友,一听到「Python」就觉得头大。觉得那是纯软件工程师的事。我当年也这么想。直到有一次,我手动测一个串口协议,重复了三百多次同样的操作,手指都快按抽筋了。那天晚上我花了两个小时,写了个二十行的Python脚本。第二天,同样的测试,机器跑了三分钟,我喝了杯咖啡。

嗯,从那以后,我就再也没离开过Python。

这一章,咱们先把地基打牢。环境搭好了,后面才能跑得快。

2.1 Python环境搭建:别让第一步卡住你

搭建环境这事儿,说简单也简单,说坑也多。我见过不少同事,卡在环境变量上,一卡就是半天。

2.1.1 下载与安装

去Python官网(python.org),下载对应你操作系统的版本。我个人建议,别追最新版。选一个稳定版,比如Python 3.8到3.10之间的版本。为什么?因为很多嵌入式测试的第三方库,对新版支持可能滞后。我在项目中就遇到过,Python 3.11刚出时,某个串口库死活装不上,最后退回到3.9才搞定。

安装时,记得勾选「Add Python to PATH」。这个选项太重要了。如果不勾,你后面在命令行敲python,系统会告诉你「找不到命令」。我曾经帮一个同事排查了半小时,最后发现就是没勾这个框。

注意: Windows用户,安装路径尽量不要有中文或空格。比如 C:\Python39 就很好。别放在「C:\Program Files」下面,后面有些工具会报错。

2.1.2 验证安装

打开命令行(Windows是cmd或PowerShell,Mac/Linux是终端),输入:

python --version

如果看到类似 Python 3.9.7 的输出,恭喜你,成了。

再试一个:

pip --version

pip是Python的包管理工具,后面装第三方库全靠它。如果提示找不到pip,别慌。重新运行安装程序,选择「Modify」,把pip勾上就行。

2.2 解释器与IDE选择:工欲善其事

Python是解释型语言。说白了,就是写一行,解释一行,跑一行。不像C语言那样要先编译成二进制。这对我们做测试脚本来说,太方便了。改完代码立刻就能跑,调试效率极高。

2.2.1 解释器:CPython是主流

你从官网下载的那个Python,其实就是CPython。它是Python的官方解释器,用C语言写的。咱们做嵌入式测试,用这个就够了。别去折腾什么Jython、IronPython,那些是特殊场景用的,咱们用不上。

2.2.2 IDE选择:别纠结,选VS Code

我经常被问到:「老师,用PyCharm还是VS Code?」

我的回答很直接:新手用VS Code,老手也用VS Code。

PyCharm功能确实强大,但启动慢、吃内存。你想想看,咱们嵌入式测试工程师,电脑上往往挂着串口助手、逻辑分析仪、虚拟机,本来就够卡了。再开个PyCharm,风扇直接起飞。

VS Code轻量、启动快、插件丰富。装个Python插件,语法高亮、代码补全、调试功能全都有了。

IDE 优点 缺点 推荐场景
VS Code 轻量、启动快、插件丰富 需要手动配置 日常脚本开发、嵌入式测试
PyCharm 功能全面、开箱即用 吃内存、启动慢 大型项目、纯软件开发
IDLE 自带、零配置 功能简陋 临时测试、单文件运行
我的建议: 装VS Code,再装这几个插件——Python、Pylance、Jupyter。够用了。如果你喜欢在终端里干活,那直接vim或nano也行,我不拦你,但别指望我帮你调试。

2.3 第一个自动化测试脚本:从Hello World到串口通信

光说不练假把式。咱们直接上手写一个。

2.3.1 经典开场:Hello World

新建一个文件,叫 test_hello.py,输入:

print("Hello, 嵌入式测试!")

然后在终端里运行:

python test_hello.py

看到输出了吧?就这么简单。你第一个自动化测试脚本,诞生了。

2.3.2 进阶:读取一个配置文件

做嵌入式测试,经常要读配置文件。比如测试某个板子的IP地址、波特率等。咱们用Python的 configparser 模块来干这个。

先创建一个配置文件 config.ini

[DUT]
ip = 192.168.1.100
port = 8080
baudrate = 115200

[TEST]
loop_count = 10
timeout = 5

然后写脚本读取它:

import configparser

config = configparser.ConfigParser()
config.read('config.ini')

dut_ip = config['DUT']['ip']
baudrate = config['DUT']['baudrate']
loop_count = config['TEST'].getint('loop_count')

print(f"待测设备IP: {dut_ip}")
print(f"波特率: {baudrate}")
print(f"测试循环次数: {loop_count}")

运行一下。是不是比硬编码在代码里优雅多了?以后换设备,改个配置文件就行,不用动代码。

核心思路: 自动化测试脚本的精髓,就是把「可变的部分」抽出来,放到配置文件里。代码只负责逻辑,数据交给配置。这样维护成本直线下降。

2.3.3 实战:模拟串口发送一条AT指令

这才是咱们嵌入式测试的重头戏。假设你要测试一个Wi-Fi模块,需要发AT指令看看它回不回复。

先装个串口库:

pip install pyserial

然后写脚本:

import serial
import time

# 配置串口参数
ser = serial.Serial(
    port='COM3',        # Windows下是COM口,Linux下是/dev/ttyUSB0
    baudrate=115200,
    timeout=1
)

# 发送AT指令
command = "AT\r\n"
ser.write(command.encode())

# 等待回复
time.sleep(0.5)
response = ser.read_all().decode()

print(f"发送: {command.strip()}")
print(f"接收: {response.strip()}")

# 关闭串口
ser.close()

跑一下。如果模块正常,你会看到它回复「OK」。如果不正常,检查一下串口号和波特率。我当年第一次跑这个脚本,忘了关串口助手,结果端口被占用了,报错半天才反应过来。

避坑指南: 串口是独占资源。一个程序打开了,另一个程序就打不开。跑脚本前,确保串口助手、逻辑分析仪之类的工具已经关闭了。我曾经调试一个脚本,怎么都连不上,最后发现是后台挂了个串口监听工具没关。

2.4 本章小结

这一章,咱们把Python环境搭好了,选好了趁手的IDE,还写了三个脚本。从Hello World到读配置文件,再到串口通信,一步步来,不急。

你想想看,以前手动测串口,是不是要打开串口助手,选端口、设波特率、敲指令、看回复?现在一行命令搞定。这就是脚本驱动的威力。

下一章,咱们会深入Python的核心语法。别怕,我会用嵌入式测试的例子来讲,保证你听得懂、用得上。

课后练习: 修改上面的串口脚本,让它循环发送10次AT指令,并统计成功回复的次数。提示:用for循环和if判断。

好,今天就到这儿。有问题随时交流。