Error handling Robotframework-获取失败关键字/失败堆栈跟踪

Error handling Robotframework-获取失败关键字/失败堆栈跟踪,error-handling,robotframework,stack-trace,Error Handling,Robotframework,Stack Trace,我有一个名为“debug teardown”的关键字,如果测试失败,它会打印测试状态,然后运行debuglibrary debug关键字 我希望能够将导致失败的关键字登录到控制台,以便更有效地调试测试 是否可以获取堆栈跟踪或最新的测试关键字,并将其记录到控制台 这是我的调试拆卸关键字: Debug Teardown Run Keyword If Test Failed Log ${TEST STATUS}: ${TEST MESSAGE} E

我有一个名为“debug teardown”的关键字,如果测试失败,它会打印测试状态,然后运行debuglibrary debug关键字

我希望能够将导致失败的关键字登录到控制台,以便更有效地调试测试

是否可以获取堆栈跟踪或最新的测试关键字,并将其记录到控制台

这是我的
调试拆卸
关键字:

Debug Teardown
    Run Keyword If Test Failed                  Log    ${TEST STATUS}: ${TEST MESSAGE}    ERROR
    Run Keyword If Test Failed                  Debug

您可能能够在运行时利用更新“全局”变量。最后一个设置的变量值将是失败的值。

如果创建一个变量,并将日志级别设置为
DEBUG
,则可以获得更多信息。在监听器中,您可以保存日志命令的结果,然后当关键字失败时,您可以将其打印出来或执行任何其他您想要的操作

例如,这里有一个侦听器,当关键字失败时,它会将最后一条日志消息打印到stdout:

from __future__ import print_function
class my_listener():
    ROBOT_LISTENER_API_VERSION = 2

    def __init__(self):
        self.ROBOT_LIBRARY_LISTENER = self
        self.last_log = None

    def _log_message(self, message):
        self.last_log = message

    def _end_keyword(self, name, attrs):
        if attrs['status'] == 'FAIL':
            print("\n******\n", self.last_log['message'])
您可以像导入普通库一样导入侦听器,并将日志级别设置为DEBUG(否则会得到错误,但没有堆栈跟踪)

例如:

*** Settings ***
Library      my_listener
Suite Setup  set log level  DEBUG

*** Test cases ***
Example
    some keyword

这是一个解决方案,但非常令人恼火,因为我必须每隔一行更改suite变量。):这也不是一个非常干净的解决方案——按照今天的编码标准,全局变量的使用应该保持在最低限度,但这让我大开眼界——您可以将侦听器模块作为常规库导入套件中。想想看,这听起来很自然,但我一直认为(显然是错误的)听众被限制在执行上;这开启了一个全新的可能性世界:)谢谢你@托多:用户指南中标题为“绝对是”的部分介绍了这一点,这是我在删除“谢谢”便条之前检查的第一件事,但该部分的写作风格如此之好,以至于我总是错过它……:)