この記事は「Robot Framework Advent Calendar 2017 - Qiita」の9日目の記事です。
今回はRobot Frameworkで使う変数の定義方法と、変数名が重複した時の優先順についてです。
目次
環境
- Robot Framework 3.0.2
Robot Frameworkの変数定義箇所
Robot Frameworkでは、いくつかの箇所で変数を定義できます。
ユーザーガイドでは以下に記載されています。
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#creating-variables
- http://robotframework-ja.readthedocs.io/ja/latest/userguide/CreatingTestData/Variables.html#id15
今回はそのうち、以下について記載します。
- テストケースローカル
- テストスイートやテストグローバルもあるが、今回は省略
- 変数テーブル
- リソースファイル
- コマンドライン
- 変数ファイル
- 今回は省略
テストケースローカル
テストケースの中でだけ有効な変数です。
例えば、以下では変数 ${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
テストケースで利用するには、以下のように Settings の Resource でリソースファイルパスを指定します。
*** 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