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

