我試圖從robotframework關鍵字調用python函數。 python函數已被修飾爲使用Builtin庫中的run_keyword進行調用。這是因爲機器人日誌顯示結構良好,如果庫函數是通過內置庫中的run_keyword函數調用的。而不是直接調用。但是這會導致無限循環。有沒有一個解決方案來優雅地完成目標?從robotframework腳本調用裝飾的python函數導致無限遞歸
robotkeyword :
do something
#creates a user by calling a function from python based library
create user
python function
@wrap_with_run_keyword
def create_user():
pass
def wrap_with_run_keyword(func):
def func_wrapper(*args, **kwargs):
return run_keyword(func, *args, **kwargs)
return func_wrapper
我無法使用部分應用程序解決問題。
但是,我通過設置和取消設置下面給出的屬性來代理遞歸循環。
def wrap_with_run_keyword(func):
def func_wrapper(*args, **kwargs):
if not hasattr(func, 'second'):
setattr(func, "second", True)
return run_keyword(func, *args, **kwargs)
else:
delattr(func, "second")
return func(*args, **kwargs)
return func_wrapper
但是我遇到了另一個問題。我定義create_user如下
def create_user(properties):
#some code
pass
在調用下面
create_user("name=abc")
的方式這個功能,我發現了以下錯誤:得到了一個意想不到的關鍵字參數「名」
爲什麼在調用關鍵字「創建用戶」時調用關鍵字「創建用戶」?你已經創建了一個自己調用的關鍵字。您是否打算創建一個_new_關鍵字,從其他庫中調用_an existing_關鍵字? 「結構良好」是什麼意思?如果您通過「run keyword」直接調用關鍵字,那麼在日誌中應該沒有區別,除非在後一種情況下您有一個額外的嵌套級別。 –
@BryanOakley日誌的形成方式有所不同。如果你從機器人調用庫關鍵字,它看起來很好嵌套。但是,如果您的圖書館進一步調用另一個函數/關鍵字,它會在同一級別平坦。但是,如果您通過運行關鍵字從另一個庫調用另一個庫函數,則嵌套也會出現在樹中的某種樹中,使其更具可讀性。 – decoder