【问题标题】:Define a keyword to call only on failure in robot framework在机器人框架中定义一个关键字以仅在失败时调用
【发布时间】:2021-05-25 13:59:01
【问题描述】:

有什么方法可以在setting 或机器人代码的任何其他部分中定义,以便在遇到特定类型的故障时立即调用关键字?

我们有Test setupTest Teardown,它们将在开始时作为Test Setup 或在测试用例结束时作为Test Teardown 运行,类似的是有什么办法,我们可以根据失败定义和调用关键字

使用 Teardown 的问题是当我们有 5 行机器人代码(关键字)时,如果失败发生在第二行,它会跳过第三、第四和第五行,直接运行 Teardown 这是我在使用 Teardown 时遇到的问题。如果第二行失败,它会调用定义的需要运行的关键字,然后返回并运行第三、第四和第五行(不跳过)。

【问题讨论】:

  • 失败的测试用例是失败的测试用例。在我看来,您想要实现的是忽略错误并继续执行。这是一个测试用例吗?
  • @pavelsaman 忽略是其中的一部分。它必须忽略失败,但是由于失败,它必须调用我们可以在一个地方定义的特定关键字,所以当有失败时它会被调用。我不想将它添加到每个测试用例调用部分。出现故障时必须自动调用关键字
  • 你知道内置关键字Run keyword and continue on failure吗?您可以使用它,然后检查状态以了解是否需要运行其他关键字。
  • @BryanOakley 是的!但问题是我需要将此添加到我的所有测试用例中。那将是大量的返工。所以我正在寻找可以在一个地方定义的东西。就像测试设置或测试拆解一样
  • 假设可以在失败时运行关键字,例如 SeleniumLibrary。即使在失败之后,原始测试中也不会执行任何关键字。

标签: python python-3.x robotframework


【解决方案1】:

使用listener library,您可以实现这样的功能。创建一个关键字,将所需的关键字设置为在失败时执行。实现end_keywordlistener函数,检测关键字失效的时间。

最后使用BuiltInrun_keyword函数执行配置的关键字。

例子:

from robot.api import logger
from robot.libraries.BuiltIn import BuiltIn

class RunOnFailureLibrary(object):
    ROBOT_LISTENER_API_VERSION = 2
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'
    ROBOT_LIBRARY_VERSION = 0.1

    def __init__(self):
        self.ROBOT_LIBRARY_LISTENER = self
        self.keyword_to_run_on_faiure = None
        self.keyword_args = None

    def set_keyword_to_run_on_failure(self, keyword, *args):
        self.keyword_to_run_on_faiure = keyword
        if len(args) > 0:
            self.keyword_args = args
        
    def _end_keyword(self, name, attributes):
        if attributes['status'] == 'FAIL':
            logger.info(f"Running keyword:'{self.keyword_to_run_on_faiure}' on failure!")
            if self.keyword_args is None:
                BuiltIn().run_keyword(self.keyword_to_run_on_faiure)
            else:
                BuiltIn().run_keyword(self.keyword_to_run_on_faiure, *self.keyword_args)
        

globals()[__name__] = RunOnFailureLibrary

用法:

*** Settings ***
Library    RunOnFailureLibrary
Suite Setup    Set Keyword To Run On Failure    Log Many    1    2   3

*** Test Cases ***
Test
    Log    1
    Log    2
    Fail   0
    Log    3
    Log    4

结果(使用robot --pythonpath . test.robot 运行):

正如我在 cmets 中所说,测试用例的其余部分仍然不会执行。要实现这一点,您必须按照其他人的建议忽略失败。

【讨论】:

  • @ashtav 我可以看到你已经有了答案。 :) 这就是为什么最好发布一个新问题,以便其他人也可以回答。
猜你喜欢
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2021-01-02
  • 2015-07-16
  • 1970-01-01
  • 2021-12-02
  • 2013-11-08
  • 1970-01-01
相关资源
最近更新 更多