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
コマンドを渡すことができます。