コードの再利用
それは避けられません:テストにおいて繰り返しは生活の事実です。幸いなことに、スクリプトやハンドラーが繰り返し作業を代行する簡単な方法がいくつかあります。
他のスクリプトからのスクリプトの呼び出し
コードを再利用する最も一般的な方法の一つは、別のスクリプトからスクリプトを呼び出すことです。スクリプトを呼び出すには、あなたのコードにスクリプトの名前を挿入し、その後にスクリプトが必要とする任意のパラメータを続けます。スクリプトの呼び出しは、スクリプト自体がコマンドまたは関数であるかのように扱うことができます。他のスクリプトを呼び出す詳細な情報については、他のスクリプトとハンドラーの実行を参照してください。
以下は、スクリプト内からスクリプトを呼び出す例です:
CycleWindows // 単純なスクリプト名をコマンドとして呼び出します
ConnectionScript "Old SUT", "New SUT" // パラメータ付きの単純なスクリプト名を呼び出します
put CaptureTheScreen("SomePrefix",1) into myScreenCapture
// パラメータ付きの関数としてスクリプトを呼び出し、結果を変数に入れます
コマンド呼び出しを使用するか、関数呼び出しを使用するかは、スクリプト自体に依存します。両方のタイプは入力パラメータを取ることができ、その場合呼び出されるスクリプトはparams
宣言で始まる必要があります。関数呼び出しはまた値を返すことができ、その場合呼び出されるスクリプトはreturn
ステートメントを含む必要があります。
もしスペースや特殊文字のない単純なスクリプト名を使用し、スクリプトを同じスイートやヘルパースイートに保存している場合、スクリプト名を直接使用することができます。上記の例を参照してください。
関連しないスイートにあるスクリプトや、その名前にスペースや特殊文字が含まれているスクリプトについては、Run
コマンドを入力し、その後にスクリプトのパスを入力します:
Run "/Users/Seiji/Documents/EggPlant Suites/Validation.suite/Scripts/ConnectionScript"
// 関連 しないスイートからスクリプトを開くためにRunコマンドを呼び出します
他のスクリプトからスクリプトを呼び出すこの能力のため、特定のタスクやアクションを実行するセグメントでスクリプトを書くことを考えると便利です。この"モジュラー"アプローチは、あなたが異なるコンテキストでスクリプトを再利用する最大の機会を提供します。そのような場合、あなたの"メイン"スクリプトはテストや環境に特化したコードを含むことになりますが、汎用のタスクを完了するために別のスクリプトを呼び出します。
ハンドラーとヘルパースイートの使用に関するより詳細な情報は、これらは共にコードの再利用とモジュラーデザインを支援する機能であることを記載しています、下記を参照してください。
ハンドラ
同じスクリプト内でコードを再利用するために、handler
を書くことができます。これは基本的にサブスク リプトです。ハンドラーは、あなたが他のスクリプトを呼び出すかのように、いつでも呼び出すことができる主要なスクリプトの一部です。
例:CaptureTheScreen
ハンドラ
to CaptureTheScreen prefix, count // ハンドラーの開始
set fileName to prefix & "ScreenShot" & count // prefixScreenShotCountをfileNameに入れます
set tempFile to "/tmp/" & fileName // "/tmp/filename"をtempFileに入れます
CaptureScreen tempFile //スクリーンショットをキャプチャします
return fileName // fileNameを関数の戻り値として設定します
end CaptureTheScreen //ハンドラーの終了
ハンドラの結果の返却
スクリプトやハンドラが値を返す場合、このような場合、次の行でResults
関数を呼び出すことでその値にアクセスできます。したがって、上記の例を使用して、以下に示すようにハンドラを呼び出し、結果にアクセスすることができます。
例: ハンドラの結果の返却
CaptureTheScreen "MacTest", 6 // CaptureTheScreenハンドラを呼び出します
Set newFile to the result // 返された値を変数に入れます
コマンドまたは関数としてのハンドラ
CaptureTheScreen
ハンドラは汎用のハンドラなので、関数としても呼び出すことができます。主な使い方の違いは、コマンドはそれ自体が完全な文であり、それが値を返すかどうかに関係なく使用できる一方、関数は式の一部として呼び出さなければならない点です。
例: コマンドと関数としてのハンドラの呼び出し
CaptureTheScreen "MacTest", 6 // コマンドとして呼び出され、ハンドラが実行されます
put CaptureTheScreen ("MacTest",6) // 関数として呼び出され、ハンドラの値を返します。括弧に注意してください。
別のスクリプトからハンドラを呼び出す
別のスクリプトからハンドラを呼び出すには3つの方法があります:
- 所有格の
‘s
を含むスクリプト名を呼び出し、その後にハンドラの名前とそのパラメータを続けます。 - スクリプトの名前を呼び出し、その後にドットとハンドラの名前を追加します。
- ハンドラの名前を呼び出し、その後に
of
とスクリプトの名前を続けます。
例: 別のスクリプトからハンドラを呼び出す
run Logging's CaptureTheScreen "MacTest", 6 // 所有格の'sとスクリプト名を使用してハンドラを呼び出します
run Logging.CaptureTheScreen "MacTest", 6 // script.handlerの形式でハンドラを呼び出します
run CaptureTheScreen of Logging "MacTest", 6 // handler "of" scriptでハンドラを呼び出します
コードリファクタリング
スクリプトを書いているうちに、スクリプトの一部が他のコンテキストや他のスクリプトで役立つ可能性があることに気づくかもしれません。たとえば、デスクトップに戻るといった、頻繁に繰り返す必要があるSUT上のアクションを実行する手順を書いた場合などです。スクリプトの異なるポイントでアクションを実行する必要があるかもしれませんし、同じSUTを異なるテストで使用している場合、同じ手順を異なるスクリプトで使用することができるかもしれません。
新しいスクリプトまたはハンドラへのコードの抽出
Extract Code 機能を使用して、既存のコードセクションを抽出して新しいスクリプトやハンドラを作成することができます。これにより、単純または複雑なコードセクションを新しいスクリプトに移動することができます。これらのスクリプトは、多くの異なるコンテキストで再利用できるように、モジュラーにすることを目指してください。
開始する前に
- グローバル変数とユニバーサル変数の抽出: コードブロックに明示的なグローバル変数やユニバーサル変数が含まれている場合、新しいコードにそれらを含めるか除外するかを選択できます。大きなスクリプトをいくつかの小さな部分に分割している場合、それらを含めることは理にかなっています。複数の場所から呼び出される再利用可能なスクリプトやハンドラを作成している場合、それらを除外することがおそらくより良い考えです。このアプローチは、新しいコンポーネントをできるだけクリーンで、焦点を絞り、再利用可能に保つのに役立ちます。
- 他の変数の抽出: 抽出することを選択したコードに、コードのそのセクションの外で参照される変数が含まれている場合:
-
選択したものの中で使用されている変数の中で、スクリプトの
早い段階で存在する
ものは、新しいスクリプトのparams
宣言として追加されます。新しいスクリプトはコマンドとして呼び出されるため、スクリプトエディタでは、変数は新しいスクリプト名の後にパラメータとして リストされます。ExtractedScript MyVar
-
スクリプトの後で
存在する
選択範囲で使用されている変数は、新しいスクリプトのreturn
宣言として追加されます。この場合、新しいスクリプトはコマンドではなく関数として呼び出され、返された値が変数に代入されます:put ExtractedScript(MyVar) into MyOutVar
-
コードの抽出
再利用したいコードを選択します:
- スクリプトエディタで、関心のあるコードを選択またはハイライト表示します。
- ハイライト表示されたコードブロックを右クリックして Extract Code... を選択するか、Editメニューから Extract Code... を選択します。Extract Codeペインが表示され、コードブロックから新しいスクリプトやハンドラを作成できます。
新しいスクリプトを作成するには:
-
Extract Codeペインで、Scriptを選択します。
-
新しいスクリプトの名前を入力します。
- 既存のものと同じ名前のスクリプトを作成することはできません。同じ名前を試すと、スクリプト名が赤くなって無効であることを示します。
- SenseTalk識別子では無効な文字を入力しようとすると、名前も赤くなります。
- 新しいスクリプトはデフォルトで選択されたスイートのScriptsフォルダに保存されます。これを変更したい場合は、以下のいずれかを選択します:
- Whereリストまたはその下のファイルブラウザから既存のフォルダやサブフォルダを選択します。
- New Folderをクリックして新しい場所を追加します。
-
デフォルトでは、コードブロック内の任意のグローバル変数やユニバーサル変数が抽出されます。新しいコードからこれらを除外したい場合は、Include globals in extracted codeチェックボックスをクリアします。
-
Extractをクリックします。スクリプトエディタでは、選択したコードブロックが新しいスクリプトを呼び出す単一のコード行に置き換えられます。新しいスクリプトも作成され、Scriptsリストに追加されます。
新しいハンドラを作成するには:
-
Extract Codeペインで、Handlerを選択します。
-
新しいハンドラの 名前を入力します。
SenseTalk識別子で無効な文字を入力しようとすると、ハンドラ名が赤くなるまでそれらを置き換えます。
-
デフォルトでは、コードブロック内の任意のグローバル変数やユニバーサル変数が抽出されます。新しいコードからこれらを除外したい場合は、Include globals in extracted codeチェックボックスをクリアします。
-
Extractをクリックします。スクリプトエディタでは、選択したコードブロックが新しいハンドラを呼び出す単一のコード行に置き換えられます。新しいハンドラもスクリプトの最後に追加されます。
新しく作成したスクリプトは、抽出元のスクリプトだけでなく、他のスクリプトからもその名前で呼び出すことができます。他のスクリプトの呼び出しに関する詳細な情報は、上記の他のスクリプトからのスクリプトの呼び出しを参照するか、他のスクリプトとハンドラの実行ページをご覧ください。
ヘルパースイート
スイート内のスクリプト、画像、またはハンドラを他のスイートのスクリプトで再利用できるようにするには、そのスイートを "ヘルパースイート" として追加します。Eggplant Functionalスクリプトはまず自身のスイートで画像と他のスクリプトを検索します。ヘルパースイートを追加すると、指定した画像やスクリプトが自身のスイートに見つからない場合、それらのスイートを検索します。
ヘルパースイートを追加するには:
- スイートウィンドウの下部にあるSettingsボタンをクリックします。
- 設定タブが開いたら、ヘルパースイートパネルの下部にあるAddをクリックして1つまたは複数のヘルパースイートを追加します。ファイルシステムブラウザダイアログが開き、ヘルパースイートとして指定したいスイートをナビゲートして選択します。
新しいヘルパースイートを作成するには、2つの方法のいずれかを使用できます。
- ファイルメニューからNew Helper Suiteを選択するか、またはヘルパースイートパネルでNewをクリックします。
- 新しいスイートに名前を付けて保存場所を選択します。
ヘルパー スイートパネル
ヘルパースイートパネル
スイートのロケーションパス
異なるスイートへのパスを参照するのは難しいことがあります。特に相対パスを使用していたり、スイートやファイルをソース管理のチェックイン・チェックアウトを行っていたりする場合です。これらのパスを処理するためのいくつかの方法があります。一つの選択肢は、以下の文で示すように、スクリプトでスイートのロケーションを取得し、それを変数に保存することです:
例:
put SuiteInfo().path // このスクリプトを含むスイートへのパスを返します
例:
put the folder of me // このスクリプトを含むScriptsフォルダへのフルパスを返します
詳しくは、ヘルパースイートの相対パスの使用をご覧ください。
スイートのグローバルプロパティ
ヘルパースイートの使用の代わりに、Eggplant Functionalは以下のグローバルプロパティを提供しています。これらのプロパティを使用すると、スクリプトが自身のスイートを検索する前後に検索するスイートを指定することができます:
the InitialSuites
グローバルプロパティでは、スクリプトが 自身のスイートを検索する前
に検索するべきスイートまたはスイートのリストを指定できます。the FinalSuites
グローバルプロパティでは、スクリプトが自身のスイートを検索した後
に検索できるスイートまたはスイートのリストを指定できます。
例:
set the InitialSuites to (DSD & "myFirstSuite.suite", DSD & "mySecondSuite.suite")
例:
set the FinalSuites to (DSD & "mySuite.suite", DSD & "myOtherSuite.suite")
上記のコードでは、DSD
はデフォルトのスイートディレクトリを表す変数です。これらのコード行を実行する前に、このディレクトリの適切なパス(または特定のスイートの場所)を変数に設定する必要があります。
クロスプラットフォームアプリケーション
このセクションの記事では、現在のスクリプトを基にして、テストを複数のオペレーティングシステムに拡張する方法を説明します。
プラットフォームと言語に特化したスイートの作成
最初は、テストが必要な各プラットフォームごとに新しいスクリプトのセットを作成するのが簡単に思えるかもしれませんが、アプリケーションが進化するにつれてこれらのスクリプトを一貫して保つことは実際には大きな課題となります。
より友好的な長期的な解決策は、ベーススクリプトから始めて、オペレーティングシステム間で変わる各メカニクスに対して外部スクリプトを呼び出すことです。それぞれのプラットフォーム特化のスイートに対してスクリプトを異なる形で記述し、スクリプトにどのスイートを使用するかを指示することができます。
例: Quitスクリプト
以下の例では、Quit
という名前のスクリプトに保存し、他のスクリプトからコマンドとして呼び出すことができます。関数や条件文を使用して実行するコードラインを決定し、テスト中のアプリケーションに合わせて実行をカスタマイズします。
Windowsの場合:
TypeText ControlKey & AltKey & "x"
Mac用:
TypeText CommandKey & "q"
正しいスイートの指定
The InitialSuites
グローバルプロパティは、スクリプトがスクリプトや画像リソースを探すときに最初にチェックするスイート(またはスイート群)を指定します。(これらのスイートは、現在のスクリプトが実行されているスイートよりも優先されます。)もし初期スイートを複数指定した場合、次の"トップレベル"のスイートが検索される前に、各スイート のヘルパー(とそのヘルパー)が検索されます。
例: the InitialSuites
この例では、ベーススクリプトが正しいQuit
スクリプトを見つけるために、the InitialSuites
の値を適切なスイートに設定します:
Set the InitialSuites to ("Windows") -- リソースをチェックする最初のスイートとしてWindowsスイートを指定
Quit -- 最初に見つかったQuitスクリプトを実行
全てのグローバルプロパティと同じく、the InitialSuites
はスクリプトの途中でいつでも変更することができます。(Initial
は最初に検索されるスイートを指し、スクリプトの初期状態を指すわけではありません。)
多言語テキストの使用
インターフェース要素がそのテキストだけで識別できる場合、スクリプトで画像をキャプチャする代わりに光学文字認識(OCR)を使用できます。これにより、複数の言語スイートを作成する時間を大幅に節約できます。
たとえば、英語、フランス語、スペイン語のバージョンがあるアプリケーションで同じ"開く"ボタンをクリックする必要があるとします。各言語でボタンの画像を別々にキャプチャすることもできますが、代わりにOCRを使用する方が効率的です。
例: 言語特有のOCR検索を使用する
OCR検索では、Languageプロパティを使用して言語を指定できます。サポートされている全ての言語のリストは、OCR Language Support