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')
答案 0 :(得分:1)
我在一位同事的帮助下设法解决了这个问题。解决方案如下:
假设在名为My Setup
的库中定义了My Library
关键字。
My Setup
的侦听器方法执行自定义关键字start_keyword
。该方法包含有关该关键字是作为常规关键字还是作为Test Setup / Teardown关键字执行的信息。My Setup
作为not-test-setup关键字运行,则应通过My Library
的实例在侦听器中设置My Library
内的全局错误标志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')