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

如何在Robot Framework的Suite Teardown执行前获取测试统计数据并发送Microsoft Teams通知?

解决Robot Framework在Suite Teardown中获取测试统计并发送Teams通知的问题

你遇到的output.xml写入时机问题确实挺常见——Robot Framework要等整个Suite Teardown执行完毕后,才会把统计数据写入文件,所以在Teardown里直接读xml肯定拿不到有效内容。给你两个实用的解决方案:

方案一:直接用Robot Framework内置统计变量

这是最省心的方式,Robot Framework在运行过程中会自动维护一系列内置变量,直接就能拿到套件级的统计数据,完全不用解析xml。常用的变量包括:

  • ${SUITE_STATUS}:测试套件的整体状态(PASS/FAIL)
  • ${SUITE_TOTAL}:总测试用例数
  • ${SUITE_PASSED}:通过的用例数
  • ${SUITE_FAILED}:失败的用例数
  • ${SUITE_SKIPPED}:跳过的用例数

你可以直接把这些变量传给Python库,调整后的代码如下:

Python代码(调整后)

class TeamsNotifications(object):
    def send_notification(self, suite_status, total, passed, failed, skipped):
        # 构造符合Teams格式的统计内容
        stats_string = f"""测试套件执行结果:
> 整体状态:*{suite_status}*
> 总用例数:`{total}`
> 通过:`{passed}` | 失败:`{failed}` | 跳过:`{skipped}`"""
        # 这里替换成你的Teams通知发送逻辑(比如调用webhook接口)
        print(stats_string)  # 仅作示例,实际替换为发送代码

Robot Framework代码(调整后)

*** Settings ***
Library  x.TeamsNotifications
Suite Teardown  Send Notification  ${SUITE_STATUS}  ${SUITE_TOTAL}  ${SUITE_PASSED}  ${SUITE_FAILED}  ${SUITE_SKIPPED}

*** Test Cases ***
示例通过用例
    Log  这是一个通过的测试用例

示例失败用例
    Fail  模拟测试失败场景

方案二:用Python实现Robot Framework Listener API

Listener API是Robot Framework官方提供的扩展机制,完全可以用Python来实现,而且这是更灵活的方案——它能监听测试执行的各个阶段(比如套件开始/结束、用例开始/结束)触发自定义逻辑,而且在end_suite方法里可以直接拿到套件的统计结果,根本不需要碰output.xml。

Python Listener代码

class TeamsNotificationListener:
    # 必须指定Listener API版本,这里用v2
    ROBOT_LISTENER_API_VERSION = 2

    def end_suite(self, suite, result):
        # 从result对象中直接获取统计数据
        stats = result.statistics
        suite_name = suite.name
        suite_status = result.status
        total_cases = stats.total
        passed_cases = stats.passed
        failed_cases = stats.failed
        skipped_cases = stats.skipped

        # 构造Teams通知内容
        notification_content = f"""测试套件【{suite_name}】执行完成:
> 状态:*{suite_status}*
> 总用例:`{total_cases}` | 通过:`{passed_cases}` | 失败:`{failed_cases}` | 跳过:`{skipped_cases}`"""

        # 执行Teams通知发送逻辑
        print(notification_content)  # 示例打印,替换为实际发送代码

使用Listener运行测试

启动测试时,通过--listener参数指定这个Listener类即可:

robot --listener x.TeamsNotificationListener 你的测试套件文件.robot

这个方案的好处是不需要在测试套件里配置Suite Teardown,只要启动时指定Listener,就会自动在套件执行完成后触发通知,而且能获取到更丰富的执行细节(比如套件层级、每个用例的具体结果等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:13:12