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
相关产品推荐
相关产品推荐

