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

相关推荐
qyhua几秒前
AgentCode 深度技术解析:极简架构下的 AI 编程代理设计哲学
人工智能·架构
逻辑君几秒前
认知神经科学研究报告【20260016】
人工智能
学Linux的语莫2 分钟前
langgraph实操
服务器·数据库·mysql
.千余2 分钟前
【Linux】开发工具1
linux·运维·服务器·c语言·学习
快乐非自愿2 分钟前
SpringAI入门指南
大数据·人工智能·spring
新知图书2 分钟前
通过阿里云百炼平台调用DeepSeek大模型
人工智能·阿里云·云计算·langchian
Ops菜鸟(Xu JieHao)3 分钟前
Linux Rear系统热备份 【详细教程】
linux·运维·服务器·linux备份·系统备份·rear·热备份
川石课堂软件测试4 分钟前
技术分享|JMeter接口与性能测试实战
数据库·功能测试·测试工具·jmeter·单元测试·postman·prometheus
TBrL7UtdTELTTdut4BAL4 分钟前
XG-140G-TF 极简 OpenWrt | 修复2.5G | NPU硬件加速
服务器·智能路由器·openwrt·光猫·xg-140g-tf
TokenByte-AI导航小贴士5 分钟前
Claude 4.5 Sonnet / Opus / Haiku:新手选型指南
人工智能·ai·云计算·aigc·claude·aws