この記事は「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