You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS2固定目录结构下,如何从src目录运行多包Python单元测试?

从src目录同时运行ROS2两个包的所有测试用例

目录结构

src/
src/package1
src/package1/package1
src/package1/package1/__init__.py
src/package1/package1/class_package1.py
src/package1/package1/test_package1.py
src/package2
src/package2/package2
src/package1/package2/__init__.py
src/package2/package2/class_package1.py
src/package2/package2/test_package1.py

注:这是固定的ROS2包结构,无法修改

已知的单包测试运行方式

  • 从src/package1/package1目录执行:python -m unittest,可运行package1的所有测试用例
  • 从src/package2/package2目录执行:python -m unittest,可运行package2的所有测试用例
  • 从src目录执行:python -m unittest discover package1/package1,可运行package1的所有测试用例
  • 从src目录执行:python -m unittest discover package2/package2,可运行package2的所有测试用例

问题

有没有办法从src目录同时运行package1和package2的所有测试用例?(不想将测试用例移到单独的test包中,希望测试与代码放在一起)

解决方案

方案1:合并discover命令

在src目录下,直接用连接符串联两条discover命令:

python -m unittest discover package1/package1 && python -m unittest discover package2/package2

这条命令会先跑完package1的所有测试,再运行package2的测试。如果希望不管前一个命令是否成功都执行下一个,把&&替换成;即可。

方案2:编写Python脚本统一运行

在src目录下新建run_all_tests.py脚本,内容如下:

import unittest

def main():
    test_suite = unittest.TestSuite()
    loader = unittest.TestLoader()

    # 加载两个包的测试用例
    test_suite.addTests(loader.discover('package1/package1'))
    test_suite.addTests(loader.discover('package2/package2'))

    # 执行测试并输出详细结果
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(test_suite)

if __name__ == '__main__':
    main()

之后在src目录下执行:

python run_all_tests.py

脚本会一次性收集两个包的所有测试用例并运行,输出整合后的测试结果。


内容的提问来源于stack exchange,提问作者jpo38

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:32:36