Prhub

#38244 [CPU] use CustomTestCase for registered CPU tests

原始 PR 作者 mingfeima 合并时间 2026-09-07 15:09 文件变更 4 提交数 1 评论 0 代码增减 +8 / -5

执行摘要

将 4 个已注册 CPU 测试文件从 `unittest.TestCase` 迁移至 `CustomTestCase`,防止 `setUpClass` 失败时资源泄漏。

根据 PR body,本次变更的动机是“更新已注册的 CPU 测试以使用 CustomTestCase 而非原始的 unittest.TestCase。这保留了测试生命周期保证,即即使 setUpClass 失败,tearDownClass 也会运行,从而防止 CI 中的资源泄漏”。这是一个针对测试健壮性的防御性改进。

这是一个简单、低风险的维护性 PR,旨在统一测试基类以利用 CustomTestCase 提供的更好生命周期保证。对于关注测试健壮性和 CI 稳定性的工程师,建议精读,以理解 CustomTestCase 的作用。对于大多数开发者,这是一个可以直接 approve 的小改动。

讨论亮点

本 PR 无 review 讨论。

实现拆解

  1. 变更入口与范围:变更仅限于 test/registered/cpu/ 目录下的 4 个测试文件,是一个纯测试基类的统一替换。
  2. 核心逻辑改造:在每个测试文件中,通过新增或调整导入语句,将基类从 unittest.TestCase 替换为 CustomTestCase。例如,在 test_server_args_backend.py 中新增 from sglang.test.test_utils import CustomTestCase 并将两个测试类 TestServerArgsCPUBackend 和 TestServerArgsIBDeviceValidation 的基类改为 CustomTestCase。其他三个文件的修改模式完全相同。
  3. 测试配套:此变更本身就是对测试代码的修正。所有测试的断言和逻辑保持不变,确保现有功能覆盖不受影响。
  4. 配置与部署:无相关改动。
文件 模块 状态 重要度
test/registered/cpu/test_server_args_backend.py CPU 后端测试 modified 4.68
test/registered/cpu/test_binding.py 线程绑定测试 modified 4.05
test/registered/cpu/test_request_decompression.py 请求解压测试 modified 3.91
test/registered/cpu/test_request_headers.py 请求头测试 modified 3.91

关键符号

TestServerArgsCPUBackend TestServerArgsIBDeviceValidation TestRequestDecompressionMiddleware TestApplyRoutingHeaders TestInitThreadsBinding

关键源码片段

test/registered/cpu/test_server_args_backend.py test-coverage

包含两个测试类,分别测试 CPU 后端参数默认值和 IB 设备验证逻辑,是本次变更中修改行数最多的文件。

# 变更前
import unittest
# ...
class TestServerArgsCPUBackend(unittest.TestCase):
    # ...
​
class TestServerArgsIBDeviceValidation(unittest.TestCase):
    # ...
​
# 变更后
import unittest
from sglang.test.test_utils import CustomTestCase
# ...
class TestServerArgsCPUBackend(CustomTestCase):
    # ...
​
class TestServerArgsIBDeviceValidation(CustomTestCase):
    # ...

这是一个简单的基类替换。CustomTestCase 保证了即使 setUpClass 失败,tearDownClass 仍会执行,用于清理测试可能创建的临时文件或资源,防止 CI 环境资源泄漏。

test/registered/cpu/test_binding.py test-coverage

测试 NUMA 绑定功能,其基类替换逻辑与其他文件一致,但该文件在变更前已有一个类使用了 `CustomTestCase`。

# 变更前
class TestInitThreadsBinding(unittest.TestCase):
    # ...
​
# 变更后
class TestInitThreadsBinding(CustomTestCase):
    # ...

此变更将测试 NUMA 线程绑定功能的 TestInitThreadsBinding 类基类统一为 CustomTestCase,使其在 setUpClass 失败时也能可靠执行 tearDownClass 进行资源清理。

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。变更仅涉及测试代码的基类替换,且 CustomTestCase 的行为被设计为 unittest.TestCase 的超集,不会改变现有测试的断言逻辑或执行路径。主要风险在于 CustomTestCase 本身的实现是否存在缺陷,但这属于仓库测试基础设施的范畴,而非本 PR 引入。

影响范围很小,仅限于 4 个 CPU 测试文件。影响程度低,主要是提高了这些测试在 setUpClass 失败场景下的健壮性,防止 CI 资源泄漏。对用户无直接影响。对团队而言,这是一个维护性的改进,有助于保持 CI 环境的稳定。

测试基础设施依赖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论