3、Python基础回顾:语法速览、数据类型、控制流、函数定义、文件操作
各位同学,咱们开始上课。今天这节是Python基础回顾,说白了就是帮大家把写脚本时最常用的那几块东西捋一遍。别觉得基础就跳过,我在HIL测试项目里见过太多因为基础不牢导致的低级bug了。
3.1 Python语法速览
Python的语法,我个人觉得是它最大的优点——简洁、可读性强。你想想看,一个循环用C语言要写好几行,Python一行搞定。
几个核心点:
- 缩进就是一切:Python用缩进来表示代码块,而不是花括号。我习惯用4个空格,千万别混用Tab和空格,否则你会疯的。
- 变量不用声明类型:直接赋值就行,比如
a = 10,Python会自动推断类型。 - 注释用 #:单行注释用
#,多行注释可以用三个引号'''或"""。
小技巧:写脚本时,我习惯在文件开头加一行
# -*- coding: utf-8 -*-,确保中文注释不乱码。这个坑我踩过。
3.2 数据类型
Python的数据类型,说白了就那几种。但咱们做HIL测试,最常用的就是数字、字符串和列表。
| 类型 | 示例 | 说明 |
|---|---|---|
| int | a = 10 |
整数,比如信号值、计数器 |
| float | b = 3.14 |
浮点数,比如电压、电流测量值 |
| str | c = "Hello" |
字符串,比如测试用例名称 |
| list | d = [1, 2, 3] |
列表,比如一组测试参数 |
| dict | e = {"key": "value"} |
字典,比如信号名到值的映射 |
| bool | f = True |
布尔值,用于条件判断 |
嗯,这里要注意:列表和字典是可变类型,字符串是不可变类型。什么意思?你改了字符串,其实是创建了一个新对象。我在项目中遇到过有人试图直接修改字符串里的某个字符,结果报错了。
重点:在dSPACE自动化测试中,我们经常用字典来存储信号映射关系,比如
signal_map = {"EngineSpeed": 0, "VehicleSpeed": 1},这样代码可读性会好很多。
3.3 控制流
控制流就是让代码按你的想法走。常用的就三个:if、for、while。
if 条件判断:
if value > 100:
print("超出范围")
elif value > 50:
print("正常范围")
else:
print("偏低")
我曾经在写测试脚本时,忘了加冒号,结果找了半天bug。记住:if、for、while后面都要加冒号。
for 循环:
# 遍历列表
for signal in signal_list:
print(signal)
# 配合range使用
for i in range(10):
print(i)
while 循环:
count = 0
while count < 5:
print(count)
count += 1
避坑指南:我曾经写过一个while循环,忘记加退出条件,结果脚本跑成了死循环,把整个HIL测试台架卡死了。所以用while时,一定要确保有退出机制。
3.4 函数定义
函数就是把一段重复用的代码封装起来。咱们写自动化测试脚本,函数是核心。
def read_signal(signal_name):
"""读取HIL信号值"""
value = get_signal_value(signal_name)
return value
def check_threshold(value, min_val, max_val):
"""检查信号是否在阈值范围内"""
if min_val <= value <= max_val:
return True
else:
return False
我个人习惯给每个函数写docstring(就是那个三引号里的说明),这样别人看代码时一目了然。你想想看,几个月后你自己回头看代码,没有注释的话,真的会忘。
函数参数可以设默认值:
def log_message(msg, level="INFO"):
print(f"[{level}] {msg}")
log_message("测试开始") # 默认INFO级别
log_message("错误发生", "ERROR") # 指定ERROR级别
经验之谈:在dSPACE自动化测试中,我习惯把常用的操作封装成函数,比如读取信号、写入信号、等待时间等。这样主脚本会非常简洁,维护起来也方便。
3.5 文件操作
文件操作在测试脚本里太常用了。比如读取测试用例、保存测试结果、写日志文件。
读取文件:
# 推荐用with语句,自动关闭文件
with open("test_cases.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
# 按行读取
with open("test_cases.txt", "r") as f:
for line in f:
print(line.strip()) # strip去掉换行符
写入文件:
# 写入模式 'w' 会覆盖原文件
with open("result.txt", "w") as f:
f.write("测试通过\n")
# 追加模式 'a' 会在文件末尾添加
with open("log.txt", "a") as f:
f.write("2024-01-01 测试完成\n")
注意:我曾经犯过一个错,用 'w' 模式打开了一个重要的配置文件,结果内容全被清空了。所以写入前一定要确认模式对不对。另外,处理中文文件时记得加
encoding="utf-8",否则会乱码。
CSV文件操作:测试数据经常用CSV格式,Python有内置的csv模块:
import csv
# 读取CSV
with open("test_data.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
print(row) # row是一个列表
# 写入CSV
with open("output.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["信号名", "期望值", "实际值"])
writer.writerow(["EngineSpeed", 1000, 1002])
好了,Python基础就回顾到这里。这些内容看起来简单,但都是写自动化测试脚本的基石。下一节咱们就开始讲dSPACE的Python API了,到时候你会感谢今天认真复习的这些基础知识的。