ROS2测试中如何获取proc_output.waitFor的实际输出以修正预期值?
获取ROS2 launch_test中进程实际输出的方法
方法1:在测试代码中主动打印输出缓冲区
直接在测试用例里添加打印逻辑,不管waitFor是否成功,都把捕获到的进程输出打印出来,方便调试:
def test_pose_subscription(self, proc_output): # 先打印当前缓冲区的所有内容 print("=== 进程实际输出内容 ===") print(proc_output.output) # 原有等待逻辑 try: proc_output.waitFor("你的预期输出文本", timeout=5) except AssertionError: print("=== 匹配失败,实际输出如下 ===") print(proc_output.output) raise # 保留原错误抛出,不影响测试结果判定
运行launch_test时,终端会直接显示进程的完整输出。
方法2:用launch_test的参数强制显示输出
运行测试时添加--show-output参数,同时调整ROS日志格式,确保所有输出都能显示:
export ROSCONSOLE_FORMAT='[${severity}] [${node}] ${message}' launch_test 你的测试文件.py --show-output
这个参数会强制把被测试进程的标准输出、标准错误都打印到终端,不用修改代码就能拿到完整输出。
方法3:临时修改节点启动配置
在测试用的launch文件里,把target_control_node的输出直接定向到屏幕:
Node( package="你的包名", executable="target_control_node", output="screen", arguments=["--ros-args", "--log-level", "INFO"] )
这样运行测试时,节点的所有日志和打印内容会直接显示在终端,无需通过proc_output捕获就能查看。
注意事项
waitFor的匹配是精确匹配,要注意实际输出的空格、换行符、大小写是否和预期值完全一致,比如实际输出是Received pose: x=0.5,就不能把预期值写成Received pose:x=0.5。
内容的提问来源于stack exchange,提问作者Hongbo Miao
相关产品推荐
相关产品推荐

