【问题标题】:How can I tell robot framework not to log a keyword?如何告诉机器人框架不要记录关键字?
【发布时间】:2013-11-29 07:27:48
【问题描述】:

在机器人框架测试用例中,我设置了一个变量,然后执行一个过程。

因为变量的设置不是一个非常有趣的信息,我不想在我的报告中包含它。

| Verifying STUFF  |
| | ${endpoint}=    | set variable | STUFF
| | Verify

我的报告包含以下内容:

KEYWORD: ${endpoint} = BuiltIn.Set Variable STUFF

但我宁愿没有它。如何告诉 Robot Framework 不记录该行?

-----编辑------

看起来应该这样做:

pybot --removekeywords NAME:SetVariable testcase.txt

但是 Set Variable 关键字仍然存在。

(是的,我将机器人框架升级到 2.8.3 以利用此功能。)

【问题讨论】:

  • “设置变量关键字仍然存在”到底是什么意思?你的意思是他们仍然被记录,或者你的意思是他们仍然存在于你的测试中?另外,您使用的是基于 Java 还是基于 Python 的 Robot Framework 版本?

标签: robotframework


【解决方案1】:

你能做的最好的就是使用

Set Log Level    NONE

但它仍会记录所有关键字调用,只是其中没有任何内容。

或者,如果您调用的 python 函数调用了另一个函数,则不会记录对第二个函数的调用。

像这样:

*** Settings ***
Library           lib.py

*** Test Cases ***
demo
    Set Log Level    NONE
    ${a}    foo
    xyzzy

*** Keywords ***
xyzzy
    qwerty

qwerty
    No Operation
    Log    123

而 lib.py 是这样的:

def foo():
    abc = bar()
    return abc

def bar():
    c = 1
    print c
    return c

【讨论】:

  • 谢谢,但这并不能真正解决问题。我想通过删除任何不“做”任何事情的关键字来简化日志。 (将变量设置为常量并不能真正算作对我“做某事”。)我希望我的日志文件易于任何人获取和理解,而设置变量只是绒毛。我可能不得不修改其他一些关键字来避免它。
【解决方案2】:

问题在于,当您分配像 ${var} = Keyword 这样的变量时,Robot Framework 输出中的关键字名称是 ${var} = Keyword,而不是您所期望的 Keyword。如果您的关键字来自库或资源文件,则其名称也将包含在${var} = MyLibrary.Keyword 中。后者是一项功能,但前者是 bug,希望在 RF 2.9 中得到修复。

目前,包括变量名在内的关键字名称的一个简单解决方法是使用通配符。像这样的东西应该对你有用:

--RemoveKeywords 'name:* = BuiltIn.Set Variable'

【讨论】:

  • 这不是我想要的。设置变量的整个操作在报告和日志中并不有趣,所以我想省略它。
  • 你好。我们的测试包含敏感数据,例如,一个不应该在 logoutput.xml 中的带有密码的变量。并且有几个问题: 1. 不能按变量名过滤,只能按关键字名模式过滤,不适合我们。所以设置套件变量 ${some_password} 无法使用 *some_password* 模式删除。 2. 即使在log.html中去掉了关键字数据,output.xml仍然包含所有的秘密数据。
【解决方案3】:

您可以在 pybot 上使用 --removekeywords 或 --flattenkeywords 选项来删除关键字的内容所以如果你有例如包含大量日志关键字的关键字“foo”,您可以将“--flattenkeywords name:foo”选项设置为pybot,在日志中您只会看到主关键字,但里面没有关键字。

http://robotframework.googlecode.com/hg/doc/userguide/RobotFrameworkUserGuide.html?r=2.8.3#removing-and-flattening-keywords

【讨论】:

  • 这当然看起来应该可以工作,但到目前为止它一直让我失望。稍后再详细说明。
  • 您使用 --removekeywords 成功了吗?可以举个例子吗?
  • @SkipHuffman 我更新了我的答案,这两个选项实际上都不是你想要的。
【解决方案4】:

如果你使用 python 库,以下猴子补丁对我有用:

from robot.libraries.BuiltIn import BuiltIn
from robot.output.logger import LOGGER
import types

def _nothing(*args, **kwargs):
    pass

def disable_keyword_logging(self):
    self._logging_methods = (LOGGER.start_keyword, LOGGER.end_keyword)
    LOGGER.start_keyword = types.MethodType(_nothing,LOGGER)
    LOGGER.end_keyword = types.MethodType(_nothing,LOGGER)

def enable_keyword_logging(self):
    LOGGER.start_keyword, LOGGER.end_keyword = self._logging_methods

那么当这个脚本运行时:

Disable keyword logging
Log    Hello world
Enable keyword logging

“Log”关键字不会记录到输出中,但输出会记录。 如果你真的什么都不想要(也没有被调用的关键字记录的调试/信息/警告信息),你仍然需要将日志级别设置为“NONE”。

【讨论】:

  • 为什么这些函数都以self为参数?它们不是类定义的一部分。如所写,此代码不起作用。
【解决方案5】:

Robot Framework 不会将“全局”变量记录为变量表的一部分。 Global 用引号引起来,因为实际上已记录了 Set Global Variable,但是如果您像这样初始化变量...

*** Variables ***
${endpoint}     stuff

*** Keywords ***

...那么它将不在日志中。此外,如果您根本不希望任何人看到该变量,而他们只是在查看您的测试套件的前端,您可以将其隐藏在资源文件中并调用资源文件。

Robot Framework 会记录您的 Set Variable 关键字和结果,因为 Set Variable 意味着您正在动态设置变量,并且可能会根据关键字的结果进行设置,在这种情况下,您可能想知道结果是什么的关键字是。如果您只是创建一个静态变量,则不需要超出表格的额外工作。动态变量是代码的必需部分吗?

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 2015-10-14
    • 2019-06-11
    • 2017-12-19
    • 2021-08-15
    • 2015-11-07
    • 2016-12-17
    • 2018-02-25
    相关资源
    最近更新 更多