2017-12-12 1 views
1

引数を埋め込んでkwargsを関数に渡す方法はありますか?例えばKwargsでの引数の埋め込み

ロボットファイル

Testcase1 
    do something "value" extra_args=bla 

Pythonライブラリ

@keyword('do something "${value}"') 
def do_something(self, value, **kwargs): 
    print(value) 
    print(kwargs) 

上記の方法では動作しませんが。私はまた、

Testcase1 
    do something "value" extra_args=bla 
また

*** Variables *** 
    &{DICT}  extra_args=bla 

Testcase1 
    do something "value" &{DICT} 

そして、多くの他の組み合わせを試してみました。私はこの制限が加えられたRobotframeworkでプルリクエストを見つけましたが、他のライブラリ作家がこの機能を必要としていると確信しています。ロボットFrameworkのドキュメントで

おかげ

答えて

1

短い答え - いいえ、それは許可されていません。 doc link, the last paragraph in Basic Syntax

  • :kwargsからが埋め込まれた引数とキーワードでサポートされていた場合、パーサは主に二つの点で、非常に苦労を持っているでしょう - この制限から来るん

    それについて考える、私が見ることができます引数を別々の変数として分割するのですか?このサンプルコードで

My keyword @{kwarg} varies 
    Pass Execution 

、このように呼ばれたとき:

My keyword was called varies 

、どのような引数がしなければならない - 値was calledと1、または2 - wascalled

My keyword @{kwarg} 
    Pass Execution 

My keyword ${normal} argument 
    Pass Execution 

、このように呼ばれる::

My keyword one argument 

、二つのキーワードのどのべきパーサ

  • ターゲットキーワードに

別のサンプルのキーワードの定義をマッチング一致?

組み込みの構文でkwargsがわかるように、問題が発生する可能性があります。これはおそらく氷山の先端に過ぎません。


サイドノート - 私は個人的にはメガクールな埋め込みキーワードを見つけましたが、普通の英語のように見えることがあります。ほとんどの言語はあなたにこの可能性を与えません!練習で私はそれらが制限されていることを発見し、今それらを避けようとします。
2つの理由 - 今後このようなキーワードの署名を変更することはできません。オプションの引数(またはkwargs;)を追加してください)。 2番目の引数は常に文字列オブジェクトとして引き渡されるため、別の型を扱う場合はキーワードにキャストし、複雑なオブジェクト型を渡すことは忘れてしまいます。

+0

お返事ありがとうございました。ありがとうございました! – Vardd

0

これは、セクションFree keyword arguments (**kwargs)に記載されています。

Robot Framework 2.8は、無料のキーワード引数のサポートを Pythonの** kwargs構文を使用して追加しました。テストデータの構文の使用方法は、「テストケースの作成」の「無料のキーワード引数」セクションで説明した です。 このセクションでは、カスタムライブラリ で実際に使用する方法を見ていきます。

これはPythonの例である:

def various_args(arg, *varargs, **kwargs): 
    print 'arg:', arg 
    for value in varargs: 
     print 'vararg:', value 
    for name, value in sorted(kwargs.items()): 
     print 'kwarg:', name, value 

と、対応するロボットのファイル:

*** Test Cases *** 
Positional 
    Various Args hello world    # Logs 'arg: hello' and 'vararg: world'. 

Named 
    Various Args arg=value      # Logs 'arg: value'. 

Kwargs 
    Various Args a=1 b=2 c=3    # Logs 'kwarg: a 1', 'kwarg: b 2' and 'kwarg: c 3'. 
    Various Args c=3 a=1 b=2    # Same as above. Order does not matter. 

Positional and kwargs 
    Various Args 1 2 kw=3    # Logs 'arg: 1', 'vararg: 2' and 'kwarg: kw 3'. 

Named and kwargs 
    Various Args arg=value  hello=world # Logs 'arg: value' and 'kwarg: hello world'. 
    Various Args hello=world arg=value  # Same as above. Order does not matter. 
+0

これは "embedded arguments"と@keywordsを使用していませんが、4つのスペースのより典型的な方法です。 私は埋め込みでこれを行う方法を探しています。 http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#embedding-arguments-into-keyword-names – Vardd

関連する問題