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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:02:09