在复杂的自动驾驶项目中,哪怕你只改了一行代码,都可能导致整个感知或控制系统崩溃。如果直接去训练,还会消耗大量算力。所以当你新写了一个功能(比如你改了采样逻辑),先不要急着去跑训练。先跑一下测试,看看有没有问题。没问题再去训练。
A. unit_tests/(单元测试)
-
test_random_sampler.py:-
它是干嘛的:测试数据采样器的逻辑。
-
具体内容:CoIL 训练时需要从海量数据中随机抽样。这个文件会检查:抽样是否真的随机?有没有漏掉某些指令(比如漏抽了左转的数据)?抽出来的索引是否越界?
-
地位:最基础的保障。
-
B. full_tests/(集成测试)
-
test_load_data.py:-
它是干嘛的:测试整条数据流水线。
-
具体内容:它会模拟一次真实的数据加载过程。它会去读 H5 文件、解压图片、做数据增强(Augmentation),然后看最后出来的张量(Tensor)形状对不对,有没有报错。
-
地位:确保大脑(网络)还没开始练,眼睛(数据流)没瞎。
-
与"主线"的关系
-
主线 :
coiltraine.py(训练)和drive.py(驾驶)。 -
测试线 :
testing/。
它们是"守卫"与"战士"的关系。 测试文件夹里的代码不会在训练或驾驶时运行。但是,在你正式开始训练之前,或者在你提交代码到 GitHub 之前,你应该先跑一遍测试。如果测试全部"变绿"(通过),你才有信心去跑主线。
它的输入与输出是什么?
-
输入 (Input):
-
被测代码 :即你的
network/、input/里的源码。 -
样例数据:一些小型的、用来实验的图片或 H5 日志文件。
-
-
输出 (Output):
-
报告(Report):
-
Passed (绿):表示逻辑正确,可以放心。
-
Failed (红):会明确告诉你,哪一行代码在处理什么数据时报错了,或者结果不符合预期。
-
-
pytest是什么?
pytest 是 Python 世界里最流行、功能最强大的"自动化测试框架"。
如果把你的 testing/ 文件夹里的那些脚本比作一堆"体检项目",那么 pytest 就是那个**"自动体检机器人"**。它会走进实验室,自动翻开每一个体检项目,运行它,并最后给你出一份详细的体检报告。
1. 为什么不直接用 python xxx.py 运行?
你可能会问:"我直接运行 python testing/unit_tests/test_random_sampler.py 不行吗?" 行是行,但如果你有 100 个测试文件,你不可能手动运行 100 次。
pytest 的核心优势在于:
-
自动发现 (Auto-discovery) :你只要在根目录喊一声
pytest,它就会自动扫描所有文件夹,把所有以test_开头的文件和函数全部找出来运行,不需要你一个一个点。 -
断言简单 (Simple Assertions) :它直接使用 Python 自带的
assert关键字。比如assert a == b,如果失败了,它会非常详细地告诉你a是多少,b是多少,哪里不对。 -
插件丰富 :它有成千上万的插件。比如
pytest-cov可以告诉你你的测试覆盖了百分之多少的代码。
2. pytest 是如何工作的?(以你的项目为例)
当你在终端输入 pytest 时,它会遵循以下"寻宝规则":
-
找文件 :寻找所有
test_*.py或*_test.py的文件。 -
找函数 :进入这些文件,寻找所有以
test_开头的函数。 -
运行并报告:
-
如果函数运行没报错,标记为 PASSED (点
.)。 -
如果
assert失败或代码崩了,标记为 FAILED (叉F)。
-
3. 一个典型的 pytest 代码长什么样?
在你那个 test_random_sampler.py 里面,逻辑大概是这样的:
# 这是一个典型的 pytest 测试函数
def test_sampler_output_size():
# 1. 准备数据 (Setup)
data = [1, 2, 3, 4, 5]
sampler = RandomSampler(data)
# 2. 执行操作 (Action)
result = sampler.sample(3) # 假设我们要采样3个
# 3. 验证结果 (Assert)
# 这就是 pytest 的核心:断言。如果不等于 3,pytest 就会报警。
assert len(result) == 3
如何运行?
方法一:使用 pytest (最专业、最推荐)
该项目采用标准的 Python 测试结构,通常默认安装了 pytest。
-
打开终端 :确保你的路径在项目的根目录 (即可以看到
carla08、network等文件夹的地方)。 -
激活环境 :确保你已经进入了
requirements.yaml配置的那个虚拟环境。 -
运行所有测试:
pytest testing/- 现象 :你会看到屏幕上跳出一串
.(代表通过)或者F(代表失败)。
- 现象 :你会看到屏幕上跳出一串
-
运行特定文件(比如只想测采样器):
pytest testing/unit_tests/test_random_sampler.py
方法二:使用 VS Code 的"烧杯"图标 (最直观)
既然你正在用 VS Code,利用它的可视化界面会非常舒服:
-
安装插件 :确保已安装微软官方的 Python 扩展。
-
配置测试:
-
点击左侧边栏的**"烧杯"图标**(测试视图)。
-
点击 "Configure Python Tests"。
-
选择 "pytest" 作为测试框架。
-
选择 "root directory"(根目录)作为搜索路径。
-
-
一键运行 :配置完成后,你会看到所有测试函数左侧出现了一个绿色的"播放"按钮。点一下,它就会自动运行并在界面上反馈结果。