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

如何检测Robot Framework用例在Test Setup特定关键字执行时失败

可行解决方案

以下两种方案都可以精准识别Test Setup阶段的固件刷入失败,不需要侵入核心测试逻辑,适配你现有自定义重跑脚本的调用需求:

方案1:基于Robot Framework监听器做实时识别(稳定性最高,推荐)

Robot原生监听器接口可以拿到运行时全量执行上下文,比事后解析日志/XML的准确率高很多,不受版本字段变动影响:

  • 编写轻量Python监听器,实现3个核心监听逻辑:
    • 触发start_test事件时初始化阶段标记,监听到start_keyword事件返回的关键字类型为setup时,标记当前进入Test Setup执行区间
    • Setup区间内如果捕获到你刷固件的目标关键字(例如关键字名为Flash Firmware To Target)返回执行失败状态,就把「Setup阶段固件刷入失败」的标识写入临时文件/全局缓存
    • 触发end_test事件时如果读到上述失败标识,直接调用你已有的重跑脚本,传入备用目标硬件参数启动新的测试任务即可
  • 监听器不需要修改原有测试用例代码,执行测试时追加参数robot --listener flash_fail_listener.py test_suite/即可加载,完全不影响原有测试流程。

注:你之前解析output.xml拿不到数据,大概率是没找对节点:Robot 4.0及以上版本中,Setup阶段的关键字是作为<test>节点下<kw type="setup">的子节点存储,和普通测试步骤的关键字不在同一层级。但XML解析方案对版本变动兼容性差,长期维护成本高,不推荐使用。

方案2:轻量改造Test Setup逻辑(无额外监听器依赖)

你之前认为Run Keyword And Ignore Error不可行,本质是直接使用会吞掉错误、误判Setup执行成功,只要搭配显式抛错+专属标记逻辑就可以满足需求:

  • 对原有Test Setup做最小改造,示例代码如下:
    Test Setup
        # 单独捕获固件刷入步骤的执行结果
        ${flash_ok}  ${flash_msg}  Run Keyword And Ignore Error  Flash Target Firmware  ${current_hw_addr}
        IF  not ${flash_ok}
            # 写入专属失败标识,供外层调度脚本识别
            Set Global Variable  ${TEST_FAIL_REASON}  FLASH_FAIL_IN_SETUP
            # 显式抛出失败,终止当前Setup执行,不会误判Setup成功
            Fail  Firmware flash failed on ${current_hw_addr}, trigger retry on backup hardware
        END
        # 原有Setup的其他初始化步骤保持不变,不需要修改
    
  • 外层调度脚本只需要在单轮测试执行结束后,检查${TEST_FAIL_REASON}的值即可:可以通过Robot的--outputdir指定输出目录后读取生成的variables快照,也可以直接在Test Teardown里把失败原因写入本地临时文件。如果识别到是刷固件导致的Setup失败,就切换硬件启动重跑。
  • 这个方案完全符合你的需求:只要固件刷入失败,当前测试用例会立刻被标记为失败,不会继续执行后续测试步骤,同时留下了明确的可识别标记,支持触发跨硬件的全量用例重跑。

已尝试方案的问题说明

  • Setup内部直接重试刷固件:本身逻辑就绑定在当前硬件上,无法实现跨硬件切换重跑,不符合需求
  • 裸用Run Keyword And Ignore Error:没有搭配后续的显式抛错和标记逻辑,会导致Setup被误判为成功,继续执行后续无效测试步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:57:29