TEST文件夹:Pytest,集成测试,单元测试

在复杂的自动驾驶项目中,哪怕你只改了一行代码,都可能导致整个感知或控制系统崩溃。如果直接去训练,还会消耗大量算力。所以当你新写了一个功能(比如你改了采样逻辑),先不要急着去跑训练。先跑一下测试,看看有没有问题。没问题再去训练。

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)

    1. 被测代码 :即你的 network/input/ 里的源码。

    2. 样例数据:一些小型的、用来实验的图片或 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 时,它会遵循以下"寻宝规则":

  1. 找文件 :寻找所有 test_*.py*_test.py 的文件。

  2. 找函数 :进入这些文件,寻找所有以 test_ 开头的函数。

  3. 运行并报告

    • 如果函数运行没报错,标记为 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

  1. 打开终端 :确保你的路径在项目的根目录 (即可以看到 carla08network 等文件夹的地方)。

  2. 激活环境 :确保你已经进入了 requirements.yaml 配置的那个虚拟环境。

  3. 运行所有测试

    复制代码
    pytest testing/
    • 现象 :你会看到屏幕上跳出一串 .(代表通过)或者 F(代表失败)。
  4. 运行特定文件(比如只想测采样器):

    复制代码
    pytest testing/unit_tests/test_random_sampler.py

方法二:使用 VS Code 的"烧杯"图标 (最直观)

既然你正在用 VS Code,利用它的可视化界面会非常舒服:

  1. 安装插件 :确保已安装微软官方的 Python 扩展

  2. 配置测试

    • 点击左侧边栏的**"烧杯"图标**(测试视图)。

    • 点击 "Configure Python Tests"

    • 选择 "pytest" 作为测试框架。

    • 选择 "root directory"(根目录)作为搜索路径。

  3. 一键运行 :配置完成后,你会看到所有测试函数左侧出现了一个绿色的"播放"按钮。点一下,它就会自动运行并在界面上反馈结果。

相关推荐
wenzhangli72 小时前
引擎与整车:深度解析 Apex OS 与 ooderAgent 的共生关系
人工智能
小真zzz2 小时前
AI信息迷雾:当智能推荐遭遇“数据投毒”与“幻觉陷阱”
人工智能·搜索引擎·ai
Ronaldinho Gaúch2 小时前
梯度消失与梯度爆炸
人工智能·深度学习·机器学习
riNt PTIP2 小时前
RustDesk搭建公网中继服务器远控内网机器(完整版)
运维·服务器
查无此人byebye2 小时前
硬核深度解析:KimiDeltaAttention 源码逐行精读+公式推导+复杂度优化(完整可运行)
人工智能·深度学习·神经网络·自然语言处理
丰海洋2 小时前
Transformer参数量
人工智能·深度学习·transformer
chools2 小时前
Java后端拥抱AI开发之个人学习路线 - - Spring AI【第三期】(向量数据库 + RAG检索增强生成)
java·人工智能·学习·spring·ai
tianbaolc2 小时前
Claude Code 源码剖析 模块一 · 第一节:Claude Code 宏观架构
人工智能·ai·架构·claude code
温九味闻醉2 小时前
人工智能应用作业1:PPO强化学习算法
人工智能·算法