メインコンテンツまでスキップ

Eggplant FunctionalとEggdriveの使用方法

以下はEggplant FunctionalとEggdriveを使用する方法についての情報です。他のテストツールのスクリプトなど、外部のプロセスがEggplant Functionalの自動化機能を使用するためにEggdriveを使用します。Eggdrive製品の詳細については、Eggdriveについてを参照してください。

Eggdriveを使用するには基本的に以下の4つのステップが必要です:

  1. 起動 Eggplant Functionalをドライブモードで。
  2. 開始 Eggdriveセッション。
  3. 送信 Eggplant FunctionalのコマンドをXML-RPC呼び出しを通じて。
  4. 終了 あなたの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レコードが返されます。フォールトにはFaultCodeFaultStringが含まれます。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メソッドが返すOutputDurationReturnValueResultsの値に加えて、ExecuteWithTimeoutの呼び出しは返されるオブジェクトにTimedOutエントリを含み、それはブール値です:

  • FalseTimedOut値が返された場合、それはコードがタイムアウトせずに実行完了したことを示します。この場合、レスポンスには実行の完全な出力と最終結果が含まれます。
  • TrueTimedOut値が返された場合、それはコードの完了前にタイムアウト期間が経過したことを示します。この場合、コードはまだ実行中で、レスポンス情報は部分的な出力のみを表します。

Updateメソッド

ExecuteWithTimeoutメソッドからTrueTimedOut結果を受け取った後、実行が完了するまで必要に応じてUpdateメソッドを繰り返し呼び出すことができます。Updateは単一の(オプションの)タイムアウトパラメータで呼び出されます。タイムアウトが指定されていない場合、Update呼び出しは遅延なしで最新の結果を返します。タイムアウトが指定されている場合、実行中のコードは、Update呼び出しが返るまでその時間の長さまで実行を続けることができます。

UpdateメソッドからのレスポンスはExecuteWithTimeoutメソッドからのものと同じで、コードが完了しているか(TimedOutFalse)まだ実行中か(TimedOutTrue)を示すTimedOutエントリを含みます。UpdateメソッドがTrueTimedOut値を返す場合、Updateを再度呼び出してさらなる中間結果を取得すべきです、それがFalseTimedOut値を返すまで。

Eggdriveセッションを終了する

クライアントがEggplant Functionalの使用を終えたら、EndSessionメソッドを呼び出すべきです。この手順はセッションを閉じ、使用されたリソースを解放し、Eggplant Functionalを他のクライアントによる新たなセッションの開始のために利用可能にします。

ノート

Eggdriveを終了する必要はありません。ただし、現在のセッションを終了し、Eggplant Functionalをドライブモードで終了させるために、必要に応じてQuitコマンドを渡すことができます。