.. _Advanced features: 高度な機能 ============ .. contents:: :depth: 2 :local: .. _Handling keywords with same names: 同名のキーワードの扱いかた ----------------------------- Robot Framework で使われているキーワードは、 :ref:`ライブラリキーワード ` か、 :ref:`ユーザキーワード ` です。 前者は :ref:`標準ライブラリ ` または :ref:`外部ライブラリ ` で定義されています。 後者は、キーワードが使われているのと同じファイルの中で定義されていることもあれば、 :ref:`リソースファイル ` からインポートされていることもあります。 沢山のキーワードを使っていると、同じ名前をもつキーワードが出てくるのは避けられません。 この節では、そうした状況で、キーワードの衝突を回避する方法を説明します。 .. _Keyword scopes: キーワードのスコープ ~~~~~~~~~~~~~~~~~~~~~~ あるキーワード名を使ったとき、同名の複数のキーワードが存在すると、 Robot Framework は、現在のスコープに基づいて、最もプライオリティの高いキーワードを決定しようと試みます。 キーワードのスコープは、件のキーワードがどのように作成されたかに基づいて決まります: 1. キーワードが使われているのと同じファイルで定義されたユーザキーワード。 最も高いプライオリティをもち、他の場所で同名のキーワードが定義されていても、必ずこのキーワードが使われます。 2. リソースファイルで定義されていて、直接または間接的にインポートされたもの。 二番目に高いプライオリティを持ちます。 3. 外部ライブラリで定義されているもの。 同名のユーザキーワードがないときに使われます。 ただし、標準ライブラリに同名のキーワードがあるときは、警告を表示します。 4. 標準ライブラリで定義されているキーワード。もっとも低いプライオリティを持っています。 .. _Specifying a keyword explicitly: キーワードを明示的に指定する ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ スコープだけでは、キーワードの名前解決機能は充分とはいえません。 というのも、複数のライブラリやリソースで同名のキーワードが現れる場合がある一方で、スコープは単に最も高いプライオリティのキーワードを使うというメカニズムしか提供していないからです。 そのため、 *完全な名前* を使ってキーワードを指定できます。 キーワードの完全な名前とは、キーワードの前に、リソースやライブラリの名前を、ドットを区切りとしてつけた名前です。 ライブラリキーワードの場合、 :name:`LibraryName.Keyword Name` のような形式になります。 例えば、 OperatingSystem ライブラリの :name:`Run` キーワードは、他に :name:`Run` キーワードが定義されていても、 :name:`OperatingSystem.Run` で呼び出せます。 ライブラリがモジュールやパッケージの場合は、完全なモジュール名・パッケージ名を使わねばなりません (例: :name:`com.company.Library.Some Keyword`)。 :ref:`WITH NAME 構文` を使って、ライブラリに別名をつけた場合は、完全な名前で指定するときに、新たにつけた別名を使わねばなりません。 リソースファイルも、ライブラリ名と同じように、「完全な名前」で指定できます。 リソースの名前は、ファイル拡張子とパスを除いたファイル本体の名前です。 例えば、リソースファイル :file:`myresources.html` で定義されているキーワード :name:`Example` は、 :name:`myresources.Example` で呼び出せます。 ただし、同じファイル名のリソースファイルが複数あると、この方法では区別できないので注意してください。 完全指定の名前においても、大小文字の区別はなく、スペースやアンダースコアは無視されます。 .. _Specifying explicit priority between libraries and resources: ライブラリやリソースの優先順位を明示する ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ キーワードの衝突がいくつもある場合、全てのキーワードについていちいち完全な名前で指定していくのは大変です。 また、長い名前を使うと、利用できるライブラリやリソースに応じて動作を切り替えるような動的なテストケースやユーザキーワードを作れなくなってしまいます。 こうした問題を解決する一つの方法として、 BuiltIn ライブラリの :name:`Set Library Search Order` キーワードを使って、キーワードの優先順位を明示する方法があります。 .. note:: このキーワードには「Library」という単語が入っていますが、実際にはリソースファイルに対しても使えます。 ただし、以前解説した通り、リソースファイル中のキーワードは、常にライブラリのキーワードより優先されます。 :name:`Set Library Search Order` は、ライブラリやリソースを順番に並べたリストを引数に取ります。 テストデータ中のキーワード名が複数のキーワードにマッチした場合、リスト中のライブラリやリソースで同名のキーワードを持つものの先頭のものが選ばれ、そのキーワードの定義を使います。 キーワード名に対応するキーワードがリスト中にない場合は、キーワードの検索順が指定されていないときと同様、キーワード名の衝突による失敗となります。 詳細や例は、 :name:`Set Library Search Order` のドキュメントを参照してください。 .. _Timeouts: タイムアウト -------------- 実行にとても長い時間がかかったり、たまに永遠にハングアップしてしまったりするようなキーワードは問題を引き起こします。 Robot Framework では、テストケースとユーザーキーワードの両方に対してタイムアウトを設定できます。 指定時間内にキーワードの実行が終了しない場合、実行中のキーワードは強制的に停止させられます。 こうしてキーワードを強制停止すると、テスト対象のシステムは不安定な状態になることがあるので、タイムアウトを設定するのは、他に安全な選択肢がないときだけにしましょう。 一般的に、テストライブラリは通常ハングしないように作られているか、必要に応じて独自のタイムアウトメカニズムを持っているはずです。 .. _Test case timeout: テストケースのタイムアウト ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ テストケースのタイムアウトは、設定テーブルで :setting:`Test Timeout` を使うか、テストケーステーブルで :setting:`[Timeout]` を使って設定できます。 :setting:`Test Timeout` はテストスイート全てのデフォルトのタイムアウトを定義し、 :setting:`[Timeout]` はデフォルト値を上書きする形で、個別のテストケースのタイムアウトを設定します。 空の値で :setting:`[Timeout]` を使うと、タイムアウトしないことを示します。 これは :setting:`Test Timeout` が設定されていても有効です。 `NONE` を値として使うことも可能です。 テストのタイムアウトをどちらで設定するにせよ、設定名の直後のセルにはタイムアウトの期間の指定が入ります。この期間の設定には Robot Framework の :ref:`時間表現