繁体   English   中英

Robot Framework自定义关键字仅在测试设置中

[英]Robot Framework custom keyword only in Test Setup

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

例如, Run keyword if all tests passed ,则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')

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

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

  1. 使用侦听器检查何时通过名为start_keyword的侦听器方法执行自定义关键字“ My Setup 该方法包含有关该关键字是作为常规关键字还是作为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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM