仅在“测试设置”中使用Robot Framework自定义关键字

时间:2019-06-20 07:44:14

标签: python robotframework

Robot Framework是否有可能仅在“测试设置”部分(或在“测试拆解”中)允许执行自定义关键字?假设我有一个名为My Setup的关键字。如果在正常步骤中执行My Setup(即不在“测试设置”中),则测试应失败。关于User keywords和浏览StackOverflow的RF文档并没有给我任何有意义的结果。

例如,Robot Framework内置函数Run keyword if all tests passed中的文档指出“尝试在其他任何地方使用它都会导致错误”,因此我想知道应该采用某种方式来应用此功能也可以使用自定义关键字。

我已尝试通过在开始执行测试之前分析测试文件并检查是否出现My Setup不在测试设置中的内容来解决此问题。但是,这感觉很麻烦,所以我要寻找的是以下内容:

def MySetup(self, some_arg):
    if MAGIC.not_inside_test_setup():
        raise AssertionError('"My Setup" can be executed only in Test Setup')

1 个答案:

答案 0 :(得分:1)

我在一位同事的帮助下设法解决了这个问题。解决方案如下:

假设在名为My Setup的库中定义了My Library关键字。

  1. 使用侦听器检查何时通过名为My Setup的侦听器方法执行自定义关键字start_keyword。该方法包含有关该关键字是作为常规关键字还是作为Test Setup / Teardown关键字执行的信息。
  2. 如果将My Setup作为not-test-setup关键字运行,则应通过My Library的实例在侦听器中设置My Library内的全局错误标志
  3. 在执行My Setup的开始时,检查是否设置了My Library中的全局错误标志。如果设置,则会引发错误。

MyLibrary.py

SETUP_ERROR = None

class MyLibrary(object):

    def MySetup(self, some_arg):
        global SETUP_ERROR

        if SETUP_ERROR:
            raise AssertionError(SETUP_ERROR)

        # Otherwise continue with the setup

    def _SetError(self, error):
        global SETUP_ERROR
        SETUP_ERROR = error

Listener.py

from MyLibrary import MyLibrary

class MyListener(object):
    # ...
    def start_keyword(self, name, attributes):
        if name == 'MyLibrary.My Setup' and attributes['type'] != 'Setup':
            MyLibrary()._SetError('"My Setup" can be executed only in Test Setup')