私は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("name=abc")
以下の方法で、この関数を呼び出すには
def create_user(properties):
#some code
pass
を次のように私はCREATE_USERを定義します。予期しないキーワード引数「名前」
キーワード「create user」を呼び出すと、なぜ「create user」というキーワードが呼び出されますか?自分自身を呼び出すキーワードを作成しました。他のライブラリから_an existing_キーワードを呼び出す_new_キーワードを作成しようとしていますか?そして、「よく構造化された」とはどういう意味ですか?後者のケースでは、1つの特別なレベルの入れ子を除いて、キーワードを直接「キーワード実行」で呼び出すと、ログに違いはありません。 –
@BryanOakleyログの形成方法に違いがあります。ロボットからライブラリキーワードを呼び出すと、ネストされたように見えます。しかし、ライブラリがさらに別の関数/キーワードを呼び出すと、同じレベルでフラットに見えます。しかし、runキーワードを使用して別のライブラリ関数を呼び出すと、ネストはツリー構造のログにも表示され、読みやすくなります。 – decoder