Robot Frameworkで、Run Keyword If でif以降の条件マッチとする場合、
- ELSE IF
- ELSE
を使います。
この ELSE IF
と ELSE
ですが、Builtinライブラリの説明には、
ELSE や ELSE IF は *args に指定し、厳密に
ELSE
,ELSE IF
と書かねばなりません。http://robotframework-ja.readthedocs.io/ja/latest/lib/BuiltIn.html#run-keyword-if http://robotframework.org/robotframework/latest/libraries/BuiltIn.html#Run%20Keyword%20If
とありました。
キーワードは UPPER CASE、camelCase、lower case のそれぞれで書いた時にも同じ挙動をしています。
なぜELSEやELSE IFだけは挙動が違うのかと思い、試してみました。
環境
- Python 3.6.3
- Robot Framework 3.0.2
UPPER CASEで書いた場合
*** Keywords *** ELSEをUPPER CASEで書く Run Keyword If 0 == 1 Log To Console IFの表示 ... ELSE Log To Console ELSEの表示 ELSE IFとELSEをUPPER CASEで書く Run Keyword If 0 == 1 Log To Console IFの表示 ... ELSE IF 0 == 2 Log To Console ELSE IF の表示 ... ELSE Log To Console ELSE IFの表示 *** Test Cases *** それぞれの出力を比べる Log To Console ${SPACE} ELSEをUPPER CASEで書く ELSE IFとELSEをUPPER CASEで書く
実行結果です。テストがパスしました。
$ robot test_else_upper_camel_lower_case.robot ========================== Test Else Upper Camel Lower Case ========================== それぞれの出力を比べる .ELSEの表示 .ELSE IFの表示 それぞれの出力を比べる | PASS |
Pascal Caseで書いた場合
*** Keywords *** ELSEをPascal Caseで書く Run Keyword If 0 == 1 Log To Console これは表示されないはず ... Else Log To Console Elseの表示 ELSE IFとELSEをPascal Caseで書く Run Keyword If 0 == 1 Log To Console これは表示されないはず ... Else If 0 == 2 Log To Console これも表示されないはず ... Else Log To Console Else Ifの表示 *** Test Cases *** それぞれの出力を比べる Log To Console ${SPACE} ELSEをPascal Caseで書く ELSE IFとELSEをPascal Caseで書く
実行結果です。
$ robot test_else_upper_camel_lower_case.robot ... Pascal Caseで書く | PASS |
テストはパスしたものの、Log To Consoleの結果が出力されていません。
今は else以降で条件にマッチしましたが、 ifでマッチするように変えてみます。
ELSEをPascal Caseで書く Run Keyword If 1 == 1 Log To Console Ifの表示 ... Else Log To Console Elseの表示
実行してみます。
$ robot test_else_upper_camel_lower_case.robot ... Pascal Caseで書く | FAIL | Keyword 'BuiltIn.Log To Console' expected 1 to 3 arguments, got 4.
テストが失敗しました。シンタックスエラーが発生しているようです。
lower caseで書いた場合
同じく、lower caseで書いてみた場合を試します。
*** Keywords *** ELSEをlower caseで書く Run Keyword If 0 == 1 Log To Console ifの表示 ... Else Log To Console elseの表示 ELSE IFとELSEをlower caseで書く Run Keyword If 0 == 1 Log To Console ifの表示 ... else if 0 == 2 Log To Console else ifの表示 ... else Log To Console elseの表示 *** Test Cases *** lower caseで書く ELSEをlower caseで書く ELSE IFとELSEをlower caseで書く
実行してみます。
$ robot test_else_upper_camel_lower_case.robot ... # elseに条件がマッチする場合 lower caseで書く | PASS | # ifに条件がマッチする場合 lower caseで書く | FAIL | Keyword 'BuiltIn.Log To Console' expected 1 to 3 arguments, got 4.
Pascal Caseと同じ結果となりました。
これらより、Run Keyword Ifの ELSE IF
や ELSE
はUPPER CASEで書く必要があると分かりました。
ソースコード
GitHubに上げました。builtin_library_samples/test_else_upper_camel_lower_case.robot
ファイルが、今回作成したファイルです。
thinkAmi-sandbox/RobotFramework-sample: Robot Framewrok samples