Robot Frameworkのキーワード、Run Keyword IfのELSEは大文字で書く

Robot Frameworkで、Run Keyword If でif以降の条件マッチとする場合、

  • ELSE IF
  • ELSE

を使います。

この ELSE IFELSE ですが、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 IFELSE はUPPER CASEで書く必要があると分かりました。

 

ソースコード

GitHubに上げました。builtin_library_samples/test_else_upper_camel_lower_case.robotファイルが、今回作成したファイルです。
thinkAmi-sandbox/RobotFramework-sample: Robot Framewrok samples