Eggplant FunctionalとEggdriveの使用方法
以下はEggplant FunctionalとEggdriveを使用する方法についての情報です。他のテストツールのスクリプトなど、外部のプロセスがEggplant Functionalの自動化機能を使用するためにEggdriveを使用します。Eggdrive製品の詳細については、Eggdriveについてを参照してください。
Eggdriveを使用するには基本的に以下の4つのステップが必要です:
- 起動 Eggplant Functionalをドライブモードで。
- 開始 Eggdriveセッション。
- 送信 Eggplant FunctionalのコマンドをXML-RPC呼び出しを通じて。
- 終了 あなたのEggdriveセッション。
以下のプログラミング言語で、Eggdriveを使用したスクリプトの例を見ることができます:
ドライブモードでEggplant Functionalを起動する
Eggdriveインターフェイスを使用するためには、Eggplant Functionalをコマンドラインから起動し、使用するポート番号を指定した引数(-driveport portNum)を付けて起動します。Eggplant Functionalはこのポートで通信を待ち受け、クライアントが接続するのを待ちます。このプロセスは、Eggplant Functionalをdrive modeで実行すると呼ばれます。
Mac:
/Applications/Eggplant.app/Contents/MacOS/runscript -driveport 5400
Windows:
"C:\Program Files\Eggplant\runscript.bat" -driveport 5400
Linux:
/usr/GNUstep/Local/Applications/Eggplant.app/runscript -driveport 5400
ドライブモードで実行中にEggplant Functional GUIを起動するには、-rungui YES引数を渡します。
Eggdriveでのロギング
デフォルトでは、Eggplant Functionalは、ドライブモードで実行している時にアプリケーションが実行したコマンドについてのコンソール出力を提供しません。一般的にはエラーや警告などのメッセージだけが返されます。この振る舞いは、起動コマンドにdrivelogging引数を含めることで変更できます。driveloggingオプションは以下の通りです:
-drivelogging 0はすべてのログをオフにします。-drivelogging 1は、Eggplant Functionalがあなたのクライアントから受け取り、行動するすべてのコマンドをログに記録します。-drivelogging 2は、Eggplant Functionalが受け取る各XML-RPCメッセージの全内容をログに記録し、さらに-drivelogging 1で表示されるより短いログも表示します。
セッションのログをファイルに保存したい場合は、起動コマンドにDriveOutputFileコマンドラインオプションを使用し、その引数としてファイルパスを提供できます: -DriveOutputFile <filePath>
例えば、このオプションをMacで使用するには、次のようなコマンドを使用します:
/Applications/Eggplant.app/Contents/MacOS/runscript -driveport 5400 -DriveOutputFile ~/Desktop/mydriveoutput.txt
このオプションを使用すると、実行したコマンドからの全ての出力が出力ファイルに送られます。指定した出力ファイルがまだ存在しない場合は作成されます。ファイルが存在する場合、新しい出力は既存のファイルの内容に追加されます。
Eggdriveセッションを開始する
コマンドを実行するためにEggdriveを使用する前に、クライアントは最初にセッションを確立しなければなりません。このプロセスは、メソッド名としてStartSessionを含むXML-RPCリクエストを送信することで行われま す。このメソッドは、オプションのパラメータとしてスイートへのフルパスを取ることができます。このパラメータを含めると、Eggplant Functionalはスイートを開き、それがセッション中に実行されるすべてのコマンドのコンテキストになります。つまり、そのスイート内のスクリプトと画像は、Eggplant Functionalに送信された任意のコマンドで使用されます。
StartSessionコールへの応答をチェックします。フォールトが返された場合、セッションは開始されていません。フォールトの最も一般的な理由は、他のセッションが既に進行中であることです。この場合、Session Busyフォールトが返されます。スイートパラメータが渡されたが、Eggplant Functionalがスイートを開けなかった場合も、フォールトが返されます。
Eggplant Functionalコマンドの送信
セッションが開始された後、クライアントはExecuteメソッドを呼び出すことができます。各Executeリクエストには、任意の量のUTF-8テキストからなるコマンドが含まれています。このテキストコマンドは、最もよく一つのコマンドステートメントから成るが、実行されるべき複数行のコードブロックも含むことができます。送信されるコードは、完全に実行可能なユニットでなければなりません。リピートループ、条件ブロック、try/catchブロックを含むコードを送信することができますが、複数のリクエストに分割することはできません。コマンドやコードブロックを受け取った後、Eggplant Functionalは受け取ったスクリプトテキストを実行し、レスポンスを送信します。
Eggplant Functionalとの各通信は同期的です。つまり、クライアントはリクエストを送信し、応答を待ってから次に進むことです。
成功レスポンス
Eggplant Functionalに送られたコマンドコードが成功した場合、XML-RPCのレスポンスメッセージが返されます。レスポンスの内容は、以下の要素を含むハッシュです:
Output:コマンドの実行中に生成された出力を含む文字列値。Duration:実行時間を秒単位で示すダブル値。ReturnValue:コマンドが値を返す場合、この要素にその値が含まれます。返される内容により、任意のXML-RPCの値型が使われます。Result:コマンドの実行後のSenseTalkのthe result関数の値、もしそれが結果を設定している場合。
失敗レスポンス
Eggplant Functionalが受け取ったコマンドテキストを処理する際にエラーが発生した場合、XML-RPCのFaultレコードが返されます。フォールトにはFaultCodeとFaultStringが含まれます。FaultCodeは次のいずれかの値で、FaultStringには問題についての追加情報が含まれます:
Unknown Method:クライアントがEggplant Functionalに認識されないMethodNameを持つリクエストを送信した。Session Busy:セッションが既に進行中のときにクライアントがStartSessionメソッドを呼び出した。No Active Session:クライアントがセッションを開始するために最初にStartSessionを呼び出すことなく、ExecuteまたはEndSessionメソッドを呼び出した。Exception:コマンドを実行しようとした際に例外がスローされた。この問題は、文法的に無効なコマンドによる可能性もありますし、コマンドの実行中にキャッチされない例外が発生した結果である可能性もあります。Session Suite Failure:StartSessionコールにスイート名パラメータが与えられたが、Eggplant Functionalはスイートを見つけたり開くことができなかった。スイート名は、Eggplant Functionalが動作しているマシン上のスイートへのフルパスであるべきです。
他のEggdriveメソッド
Eggdriveを利用する際に使用できる追加のメソッドがあります。
ExecuteWithTimeoutメソッド
このメソッドはExecuteメソッドに似ていますが、最初のパラメータとして数値のタイムアウト値(秒)を必ず含める必要があります。実行するSenseTalkコードは第二パラメータとして渡されます。
Executeメソッドとは異なり、ExecuteWithTimeoutはコード実行が完了するのを待たずに返します。実行がタイムアウトの秒数内に完了した場合、メソッドはExecuteと同様に最終結果を返します。しかし、コードがタイムアウトの秒数後もまだ実行中の場合、その時点でメソッドは部分的な結果のみを返します。
Executeメソッドが返すOutput、Duration、ReturnValue、Resultsの値に加えて、ExecuteWithTimeoutの呼び出しは返されるオブジェクトにTimedOutエントリを含み、それはブール値です:
FalseのTimedOut値が返された場合、それはコードがタイムアウトせずに実行完了したことを示します。この場合、レスポンスには実行の完全な出力と最終結果が含まれます。TrueのTimedOut値が返された場合、それはコードの完了前にタイムアウト期間が経過したことを示します。この場合、コードはまだ実行中で、レスポンス情 報は部分的な出力のみを表します。
Updateメソッド
ExecuteWithTimeoutメソッドからTrueのTimedOut結果を受け取った後、実行が完了するまで必要に応じてUpdateメソッドを繰り返し呼び出すことができます。Updateは単一の(オプションの)タイムアウトパラメータで呼び出されます。タイムアウトが指定されていない場合、Update呼び出しは遅延なしで最新の結果を返します。タイムアウトが指定されている場合、実行中のコードは、Update呼び出しが返るまでその時間の長さまで実行を続けることができます。
UpdateメソッドからのレスポンスはExecuteWithTimeoutメソッドからのものと同じで、コードが完了しているか(TimedOutがFalse)まだ実行中か(TimedOutがTrue)を示すTimedOutエントリを含みます。UpdateメソッドがTrueのTimedOut値を返す場合、Updateを再度呼び出してさらなる中間結果を取得すべきです、それがFalseのTimedOut値を返すまで。
Eggdriveセッションを終了する
クライアントがEggplant Functionalの使用を終えたら、EndSessionメソッドを呼び出すべきです。この手順はセッションを閉じ、使用されたリソースを解放し、Eggplant Functionalを他のクライアントによる新たなセッションの開始のために利用可能にします。
Eggdriveを終了する必要はありません。ただし、現在のセッションを終了し、Eggplant Functionalをドライブモードで終了させるために、必要に応じてQuitコマンドを渡すことができます。