【问题标题】:How to get current keyword name for log trace?如何获取日志跟踪的当前关键字名称?
【发布时间】:2019-12-13 16:23:38
【问题描述】:

我正在使用 RobotFramework 进行自动测试,需要编写一个关键字来打印足够的日志信息,但我找不到获取当前关键字名称以进行日志跟踪的方法。有谁知道如何实现它?非常感谢。

【问题讨论】:

  • 你没有查看机器人框架的report.html?
  • 您好,作为设计师,我当然会检查report.html,但我想写一个关键字,以便测试人员清楚地显示哪个关键字出错并反馈给设计师。对于 UI 测试,测试人员几乎没有明确任何页面元素信息。
  • 既然您运行的代码必须从关键字运行,为什么不在日志语句中硬编码关键字的名称?
  • 您好,由于有些关键字比较长而且常用,希望能作为日​​志消息关键字的输入参数,如果没有好的解决方案,我必须使用硬编码

标签: python robotframework keyword


【解决方案1】:

机器人不支持获取当前关键字名称。由于您编写的代码必须从关键字运行,因此您的关键字应该知道它自己的名称是什么。

如果你在 python 中编写你的关键字,python 库也可以是一个监听器,可以在堆栈上推送和弹出关键字。然后,您可以使用该信息来格式化您的错误消息。

这是一个简单的例子:

from robot.libraries.BuiltIn import BuiltIn

class ExampleLibrary(object):
    ROBOT_LISTENER_API_VERSION = 2
    ROBOT_LIBRARY_SCOPE = "GLOBAL"

    def __init__(self):
        self.ROBOT_LIBRARY_LISTENER = self
        self.keywords = []

    def _start_keyword(self, name, attrs):
        self.keywords.append(name)

    def _end_keyword(self, name, attrs):
        self.keywords.pop()

    def log_error_message(self, reason):
        message = "{keyword} failed in testcase {testcase}: {reason}"
        BuiltIn().log(message.format(
            keyword=self.keywords[-2],
            testcase=BuiltIn().get_variable_value("${TEST_NAME}"),
            reason=reason,
        ))

这是一个示例测试用例,展示了如何使用它:

*** Settings ***
Library  ExampleLibrary.py

*** Keywords ***
A keyword
    log  inside A keyword
    Another keyword

Another keyword
    log error message  something went wrong

*** Test Cases ***
Example
    A keyword

当你运行上述测试时,你会在日志中得到以下信息:

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多