スクリプト実行の同期化
時々、Eggplant Functionalのユーザーから、スクリプトを並列に実行し、一つのスクリプト実行が二つ目のスクリプト実行でイベントが発生するのを待つという機能を望むお問い合わせを頂きます。Eggplant Functionalは、テスト対象のシステム(SUT)の接続をConnectコマンドで切り替えることにより、このような機能を達成することができます。しかし、このアプローチでは、SUTを真に並列には自動化できず、シリアルにしか自動化できません。
個別のスクリプト実行は個別のEggplantプロセスで処理されますが、プロセス間で互いに認識するメカニズムはありません。しかし、巧みなスクリプト作成を通じて、スクリプト実行が通信し、ある程度まで同期することが可能です。
並列スクリプトの実行には、並列に実行される各スクリプトに対して1つのEggplant Functionalライセンスが必要です。
スクリプト間の通信を促進する最も簡単な方法は、テキストファイルなどの単純な共有外部データファイルを通じて行うことです。これらのファイルには、それぞれが独立してアクセスできます。次に、"Click"や"WaitFor"などのよく使われるコマンドのコードを上書きすることで、コマンドが呼び出されるたびに共有データファイルとの通信が実行され、スクリプトの実行が同期されるようにします。
二つの異なるSUTで同じスクリプトを並列に実行する方法の非常にシンプルな例を以下のサンプルスクリプトで見てみましょう:
DrivingScriptには、SUTを自動化し、テストを実行する実際のコマンドが含まれています。
Params TestDevice, OverrideScript // SUTの接続情報とオーバーライドスクリプト(FirstSUTまたはSecondSUT)の名前をパラメータとして渡す
Start Using OverrideScript // DrivingScriptに、自身のコマンド/関数ライブラリを見る前にオー バーライドスクリプトハンドラを見るように指示する
Connect TestDevice
// ここからが同期化されるべきコード
MoveTo "Pic1"
MoveTo "Pic2"
MoveTo "Pic3"
// ここまでが同期化されるコード
Stop Using OverrideScript
FirstSUTには、最初のSUTでコマンドが実行されるときに共有データファイルを作成するためのコードが含まれています。
// 下のMoveToのようなハンドラのオーバーライドは、同期化されるべき各コマンドに対して必要です
to MoveTo
CheckForNoFile
pass message and continue // ハンドラの名前、つまりこの場合は"MoveTo"、およびハンドラに渡されるパラメータ(もしあれば)をパスします
CreateMyFile// MoveToコマンドが発生したらファイルを作成します
end MoveTo
to CheckForNoFile-- ファイルの不存在を確認します
repeat until file "C:\Users\Carrie\Desktop\synccheck.txt"does not exist
end repeat
end CheckForNoFile
to CreateMyFile
Create file"C:\Users\Carrie\Desktop\synccheck.txt"
end CreateMyFile
SecondSUTには、二つ目のSUTで並列コマンドを実行する前にデータファイルが存在するかどうかを確認するコードが含まれています。
to MoveTo
CheckForFile
// pass message and continue
DeleteMyFile
end MoveTo
to CheckForFile// ファイルの存在を確認します
repeat until file "C:\Users\Carrie\Desktop\synccheck.txt"exists
end repeat
end CheckForFile
to DeleteMyFile
Delete file"C:\Users\Carrie\Desktop\synccheck.txt"
end DeleteMyFile
FirstSUTとSecondSUTは、DrivingScript内のそれらのコマンドの機能をオーバーライド、またはいわゆるオーバーロードするために、標準コマンドと同じ名前のハンドラを利用します。DrivingScriptは2回連続で呼び出され、各SUTについて1回ずつです。 OverrideScript=FirstSUTパラメータを使用した実行は最初に渡される必要があります。なぜなら、FirstSUTは共有データファイルの初期作成を制御するスクリプトだからです。DrivingScriptの2回の実行は、共有データファイルの作成と削除を交互に行いながら、同時に各コマンドの実行も交互に行います。