Robot Frameworkにおける変数定義と優先順について

この記事は「Robot Framework Advent Calendar 2017 - Qiita」の9日目の記事です。

今回はRobot Frameworkで使う変数の定義方法と、変数名が重複した時の優先順についてです。

 
目次

 

環境

  • Robot Framework 3.0.2

 

Robot Frameworkの変数定義箇所

Robot Frameworkでは、いくつかの箇所で変数を定義できます。

ユーザーガイドでは以下に記載されています。

 
今回はそのうち、以下について記載します。

  • テストケースローカル
    • テストスイートやテストグローバルもあるが、今回は省略
  • 変数テーブル
  • リソースファイル
  • コマンドライン
  • 変数ファイル
    • 今回は省略

 

テストケースローカル

テストケースの中でだけ有効な変数です。

例えば、以下では変数 ${local} を定義し、値を設定しています。

ローカルで定義した変数
    Set Variable  ${local}  local_variable
    Log To Console  ${local}

実行結果です。

$ robot test_variable_priorities.robot 
...
ローカルで定義した変数    .local_variable

 

変数テーブル

テストファイル内の全テストケースで使える変数です。

以下のように定義します。

*** Variables ***
${VARIABLE_TABLE}  testcase_variable_table

 
テストケースでの使用例です。

変数テーブルで定義された変数
    Log To Console  ${VARIABLE_TABLE}

 
実行結果です。

$ robot test_variable_priorities.robot 
...
変数テーブルで定義された変数    testcase_variable_table

 

リソースファイル

リソースファイルという、外部ファイルにも変数を定義できます。

リソースファイルでは変数テーブルにて変数を定義します。

*** Variables ***
${RESOURCE}  resource

 
テストケースで利用するには、以下のように SettingsResource でリソースファイルパスを指定します。

*** Settings ***
Resource  variable_priorities_resource.robot

 
テストケースで

importしたリソースファイルで定義された変数
    Log To Console  ${RESOURCE}

とした場合の実行結果です。

$ robot test_variable_priorities.robot 
...
importしたリソースファイルで定義された変数    resource

 
なお、リソースファイルはネストすることができます。

variable_priorities_nest_resource.robot

*** Variables ***
${NEST_RESOURCE}  nest_resource_val

 
variable_priorities_resource.robot

こちらがリソースファイルを読み込んでいるリソースファイルです。

*** Settings ***
Resource  variable_priorities_nest_resource.robot

 
test_variable_priorities.robot

こちらが「リソースファイル読み込んでいるリソースファイル」を読み込んでいるテストケースです。

*** Settings ***
Resource  variable_priorities_resource.robot

*** Test Cases ***
ネストしたリソースファイルで定義された変数
    Log To Console  ${NEST_RESOURCE}

 
実行結果です。

$ robot test_variable_priorities.robot 
...
ネストしたリソースファイルで定義された変数    nest_resource_val

 

コマンドライン

コマンドラインからも、 -v オプションを使うことで変数の値を与えられます。

テストケースには、コマンドラインから渡される予定の変数名を定義しておきます。

*** Test Cases ***
コマンドラインで指定した変数
    Log To Console  ${FROM_COMMAND_LINE}

 
実行結果です。

$ robot -v FROM_COMMAND_LINE:from_command_line test_variable_priorities.robot
...
コマンドラインで指定した変数    from_command_line

 

変数の優先順

複数箇所で変数が定義されている場合、名前が重複する可能性があります。

重複した時の挙動を確認します。

 

リソースファイルとテストケースで同じ変数名を使う場合

リソースファイル

*** Variables ***
${RESOURCE}  resource

テストケース

*** Test Cases ***
リソースファイルのみの変数をこのテストケースだけで上書きした場合
    Set Test Variable  ${RESOURCE}  adohoc
    Log To Console  ${RESOURCE}

にて変数 ${RESOURCE} が重複した場合です。

実行結果は

$ robot test_variable_priorities.robot 
...
リソースファイルのみの変数をこのテストケースだけで上書きした場合    .adohoc

とテストケースの中の値が優先されます。

 

リソースのimport元と先で重複した変数

リソースファイルとネストしたリソースファイルで変数名が重複した場合です。

ネストしたリソースファイル

*** Variables ***
${RESOURCE_IMPORT}  nest_resource_import

リソースファイル

*** Settings ***
Resource  variable_priorities_nest_resource.robot

*** Variables ***
${RESOURCE_IMPORT}  resource_import

にて変数 ${RESOURCE_IMPORT} が重複していた場合です。

テストケースを

*** Test Cases ***
リソースファイルのimport元と先で重複した変数
    Log To Console  ${RESOURCE_IMPORT}

として実行すると

リソースファイルのimport元と先で重複した変数    resource_import

と、最初に読み込まれたリソースファイルの変数の値となります。

 

リソースファイルとテストケースの変数テーブルで重複した変数

リソースファイル

*** Variables ***
${VARIABLE_TABLE}  resource_variable_table

テストケースの変数テーブル

*** Variables ***
${VARIABLE_TABLE}  testcase_variable_table

*** Test Cases ***
変数テーブルとリソースファイルで重複した変数
    Log To Console  ${VARIABLE_TABLE}

で変数 ${VARIABLE_TABLE} が重複していた場合です。

実行結果は

変数テーブルとリソースファイルで重複した変数    testcase_variable_table

と、テストケースの変数テーブルが優先されます。

 

リソースファイルとテストケースの変数テーブルとコマンドラインで重複した変数

リソースファイル

*** Variables ***
${COMMAND}  resource_command

テストケースファイルの変数テーブル

*** Settings ***
Resource  variable_priorities_resource.robot

*** Variables ***
${COMMAND}  testcase_command


*** Test Cases ***
コマンドラインと変数テーブルとリソースファイルで重複した変数
    Log To Console  ${COMMAND}

コマンドライン

$ robot -v COMMAND:command_line test_variable_priorities.robot 

で変数 ${COMMAND} が重複していた場合です。

実行結果は

$ robot -v COMMAND:command_line test_variable_priorities.robot 
...
コマンドラインと変数テーブルとリソースファイルで重複した変数    command_line

と、コマンドラインが優先されます。

 

ソースコード

GitHubに上げました。 variables_samples/priorities ディレクトリの中が今回のファイルです。
thinkAmi-sandbox/RobotFramework-sample: Robot Framewrok samples