已合并
【RFC】split ut case by execute time #40541
fengyixing创建于 7月9日
【RFC】split ut case by execute time #40541
已合并
fengyixing创建于 7月9日
fengyixing
fengyixing成员
7月9日

【合入来源】

如有社区issue,请关联issue链接
请勿携带内部流程信息(需求链接、问题单、内部issue等)

【修改方案】

1.access_control_test.py中,判断是否存在历史耗时数据文件,如果存在,按照用例文件耗时时间和类级别耗时时间数据进行用例装箱
2.test_manager.py中增加self.test_classes用于存储类级拆分的用例文件路径和用例名信息
3.增加split_by_time.py模块,用于按照用例文件耗时时间和类级别耗时时间数据进行用例装箱

【资料变更】

不涉及

【接口变更】

不涉及

【功能验证】

测试方法:
1.当没有耗时数据文件存在时,用例文件按照字典序排列,按顺序装箱到容器中执行,每一个容器中的用例文件数相同,执行时全部按照用例文件级别执行
2.当存在耗时数据文件时,用例文件按照耗时时间排序,如果用例文件耗时超过300s,对该用例文件取消用例文件级别排序,替换为使用类级别耗时数据排序。按照时间顺序进行贪心算法方式装箱到容器中执行,每一个容器中的用例文件总耗时几乎相同,文件数量大概率不相同。执行时既有文件级别也有类级别执行
无需UT用例看护

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 fengyixing 的贡献)
fengyixingfengyixing成员
7月9日 创建了 pull request,commit b5b64feb
atomgit-bot
atomgit-bot
7月9日 评论:

变更摘要

此 PR 引入了一种基于历史执行耗时的用例拆分机制,替代原有的简单轮询(round-robin)分配策略。核心思路是:通过 time_data.json 中记录的各用例文件及类的执行耗时,使用 LPT 贪心算法将用例尽量均衡地分配到多台机器上;同时支持对执行时间较长的「慢文件」(≥300秒)进行类级拆分,以便更细粒度地均衡负载。新增 ci/split_by_time.py 模块实现拆分逻辑,并在 TestMgrexec_ut 中适配类级执行与耗时数据收集。

主要改动

  • 新增 split_by_time.py 模块:实现 load_and_validate_time_data(加载并校验 time_data.json)、build_split_units(构建文件级/类级拆分单元)、split_by_time(LPT 贪心算法分配)等核心函数;定义 SLOW_FILE_THRESHOLD = 300.0 作为慢文件阈值,慢文件优先按类拆分,无类级数据时通过 discover_test_classes 用 AST 自动发现 Test 开头的类名。

  • TestMgr 新增 test_classes 属性:用于存储类级拆分信息,格式为 {'ut_files': {file_path: [class_name, ...]}, 'op_ut_files': {}},作为 split_by_time 结果中类级映射的载体。

  • exec_ut 支持类级执行与耗时记录:新增 test_classes 参数,当传入类级映射时对每个类单独执行并记录耗时;执行完成后将所有成功用例的耗时数据写入 temp_time_data.json,为后续迭代提供历史数据。

  • 主流程切换为基于耗时的拆分:在 access_control_test.py__main__ 中,当存在有效 time_data.json 时调用 split_by_time 进行分配,否则回退到原有的 split_test_files 轮询方式。

likedislike
atomgit-bot
atomgit-bot
7月9日 评论:

代码审查

审查总结

文件 审查结果
ci/access_control/test_manager.py 无问题 — 仅新增 test_classes 属性初始化,结构一致
ci/access_control_test.py 1 个 P3(ut_info / test_key 格式不一致)
ci/split_by_time.py 1 个 P2 + 2 个 P3

问题分布:P2 × 1,P3 × 3

整体风险判断:中等偏低。核心逻辑(LPT 拆分、类级执行、耗时记录)设计合理且自洽。主要风险集中在 discover_test_classes(AST 发现)的兜底路径上,该路径仅在慢文件(≥300s)且无历史类级耗时数据时触发,触发面有限。load_and_validate_time_data 的校验不完整和 ut_info 格式不一致为健壮性/可维护性问题,不影响正常流程。建议在上线前修复 P2 问题(discover_test_classes 可能匹配 0 条用例),其他 P3 可在后续迭代中收敛。

类型 数量
🔴 阻塞 0
🟡 建议 1

💬 仅评论

likedislike
ascend-robotascend-robot成员
7月9日 添加了label:ascend-cla/yes
此处折叠了43条消息 查看更多
wjlflyer成员
7月14日 评论:

/lgtm
/approve

likedislike
ascend-robotascend-robot成员
7月14日 添加了label:lgtm
ascend-robotascend-robot成员
7月14日 删除了label:ci-pipeline-passed
ascend-robotascend-robot成员
7月14日 合入了pull request
ascend-robot
ascend-robot成员
7月14日 评论:
流水线 pytorch_gitcode_PR_multiVersion#12491 [ commitID:dcc95544 ] 已完成
likedislike