Eggplant Functionalスクリプトのデバッグ
あなたのEggplant Functionalスクリプトが文法的にも意味的にも正しいことは重要です。同様に、スクリプトがテスト対象システム(SUT)で必要なアクションを正確に駆動し、ユーザーストーリーを端から端まで自動化することが不可欠です。
Eggplant Functionalには、スクリプトのデバッグを支援するいくつかの機能が含まれています。ここでは、それらの機能と関連するデバッグ戦略について説明します。この記事はスクリプトコードのデバッグに焦点を当てています。画像デバッグに特化した情報はImage Update PanelとImage Capture Best Practicesで見つけることができます。
デバッグモード
スクリプトのデバッグに良いアプローチの一つは、各スクリプトステートメントがSUTにどのような影響を与えるかを分析することです。これは、スクリプトをデバッグモードで実行することで達成できます。デバッグモードでは、スクリプトは一つのステートメントを実行し、次のステートメントを実行するまで一時停止します。この方法により、特定のコード片がSUTに望ましい、または予期した効果を与えることを確認できます。
スクリプトをデバッグモードで実行するには、メインメニューからRun > Debug Script(またはRun > Debug Selection)を選択します:
注意:Debug Selectionは、Script Editorでコードの一部を選択している場合にのみ利用可能です。
また、Altキー(Windows)またはCommandキー(Mac OS X)を押しながらScript EditorツールバーのRun ScriptまたはRun Selectionをクリックすることで、スクリプトをデバッグモードで実行することもできます。Runウィンドウのオプションについての詳細情報はThe Run Windowで見つけることができます。
デバッグモードで実行する際は、Animate All設定(Run > Animation > Animate All)を使用することを推奨します。この設定は、スクリプトが一時停止している場合、実行中の行(または次に実行するコードの行)をRunウィンドウのScript Displayエリアで強調表示します。さらに、Tracing(Run > Tracing > Trace All)を使用すると、Eggplant Functionalがスクリプトが実行しようとしていることについての情報をRunウィンドウのLogエリアに"エコー"するようになります。これらの機能についての詳細はThe Run Windowで読むことができます。
アニメーションを有効にした状態でデバッグモードでスクリプトを開始すると、スクリプトの最初の行がRunウィンドウで強調表示され、まだ実行されていません:
アニメーションを使用すると、RunウィンドウのScript Displayで現在の行が強調表示されます。
スクリプトをステートメントごとに"ステップ"進めるには、強調表示されている行を実行したいたびにStep Intoボタンをクリックします。強調表示された行が実行され、次の行が強調表示され、スクリプトが再度一時停止します。
各ステップごとに、Viewerウィンドウ(またはテスト環境によっては実際のSUT)でSUTの効果を見ることができます。スクリプトの行を実行すると望ましくないまたは予期しない効果が生じた場合、バグを見つけたことになります!Edit ScriptボタンをクリックしてSuiteウィンドウに戻り、スクリプトを編集することができます。まだスクリプトを編集する準備ができていない場合は、エラーを観察したスクリプトのセクションに何が起こったかについてのコメントテキストを追加することを検討してください。
コードの行を実行すると失敗する場合(例えば、WaitFor
コマンドに時間パラメータを提供しなかった場合)、スクリプトの実行が停止し、Runウィンドウに失敗の理由が表示されます。この動作は、スクリプトを通常通り(つまり、デバッグモードではない)実行する場合と全く同じです。
スクリプトの最後の行が実行された後、Step Intoをもう一度クリックしてスクリプトの実行を完了します。
デバッグモードでスクリプトを実行中にRunウィンドウの他のボタンを使用する方法、例えばPause/Continue、Step Over、およびStep Outについては、The Run Window Toolbarを参照してください。
ダイナミックブレークポイント
Eggplant Functionalでは、スクリプトにダイナミックブレークポイントを設定できます。ブレークポイントが設定されると、その特定のポイントでスクリプトの実行が一時停止し、ユーザーが進むことを選択するまで待機します。
ダイナミックブレークポイントの使用は、スクリプトの一部がうまく機能しているが、より詳しく調査する必要があるトラブルスポットが残っている場合に特に有用です。そのような場合、適切に機能していると知っているセクションをデバッグモードで実行することは面倒に感じるかもしれません。したがって、まだ作業が必要だと特定したコードのセクションにダイナミックブレークポイントを設定することで、スクリプトの実行がそのポイントでのみ停止するようにすることができます。
大規模なスクリプトを扱い、モニタリングのためにSUTをスクリプトの途中状態にする必要がある場合も、ダイナミックブレークポイントの設定は有用です。スクリプトにブレークポイントを設定し、そのポイントで停止するまでスクリプトを実行します。これにより、SUTを調査し、期待される状態と一致するかどうかを確認することができます。
ダイナミックブレークポイントを設定するには、Runウィンドウのスクリプト表示エ リアの左の列をクリックします。また、スクリプトエディタでスクリプトの左の列をクリックすることでブレークポイントを設定することもできます。ブレークポイントを示す黒い三角形が行の隣に表示されます。スクリプトが実行されると、設定されたブレークポイントの行を実行する前に一時停止します。
ダイナミックブレークポイントは、設定されたスクリプト行の左に黒い三角形として表示されます。
スクリプトには複数のブレークポイントを含めることができます。三角形をドラッグしてスクリプトの別の行にブレークポイントを移動させるか、または列からドラッグしてブレークポイントを削除することができます。ダイナミックブレークポイントはスクリプトを一時停止させるため、デバッグボタン(Step Into、Step Over、Step Out)を使用することができます。スクリプトをデバッグモードで実行を開始した場合と同様です。
Ad Hoc Do BoxとVariable Watcher
Ad Hoc Do Box(AHDB)とVariable Watcherは、Runウィンドウのツールで、実行中のスクリプトとSUT環境の状態を確認したり、アクションを実行したりすることができます。AHDBはRunウィンドウの下部にあるテキストフィールドで、Variable Watcherはウィンドウの右側にあるパネルです:
The Eggplant Functional Run window includes the Ad Hoc Do Box (AHDB) and Variable Watcher for script debugging.
Variable Watcherを有効にするには、Run > Show Variables > Alwaysに移動する必要があります。
AHDBを使うと、スクリプトの実行中に対話したり、変更したりすることができます。例えば、変数に値を代入したり、コマンドを実行したり、他のスクリプトを呼び出したりすることができます。この能力により、必要に応じてスクリプト環境やSUT環境を変更することができます。例えば、コードの一部が予想通りに動作しなかった場合、スクリプトを一時停止してSUTの条件をリセットし、スクリプトの実行を続ける前 にAHDBでコードの行を再実行することができます。
スクリプトが実行中でも一時停止中でも、AHDBを使用することができます。スクリプトが実行中にコマンドを入力すると、現在の行が終了した後に実行され、スクリプトは通常の実行に戻ります。しかし、スクリプトはしばしば行を素早く実行しますので、スクリプトが実行中にAHDBを使用すると、精度が低くなる可能性があります。
より精密な操作のためには、スクリプトが一時停止している間にAHDBを使用することができます。なお、スクリプトはデバッグモードで実行したり、ダイナミックブレークポイントを設定したり、スクリプトが実行中にRunウィンドウのPauseをクリックしたりすることで一時停止することができます。
AHDBを使用するには、Put variableTest
などのコマンドをAHDBに入力し、Doボタンをクリックします。この場合、Put
コマンドはvariableTest
の内容をRunウィンドウのLogエリアに出力します。
AHDBに入力されたコマンドはRunウィンドウのLogエリアに表示されます。
また、変数がリスト、数値、テキストの文字列など、期待するタイプの値を持っているかどうかを確認することもできます。例えば、Put variableTest is a list
を入力し、Doをクリックすると、TrueまたはFalseのブーリアン値がRunウィンドウに出力されます。実際に表示される値は、変数の 現在の値によって決まります。(他の比較をする方法については、論理演算子のページを参照してください。)
スクリプト中の変数の値を追跡するためには、Variable Watcherを使用することをお勧めします。このパネルを有効にすると、スクリプト中のすべての変数とその現在の値を見ることができます。さらに、このパネルで直接変数の値を変更することもできます。Variable Watcherを使用すると、ローカル変数、グローバル変数、ユニバーサル変数の間で、表示したい変数のタイプにフィルタリングすることができます。Variable Watcherの使用方法の詳細については、Variable Watcherを参照してください。
AHDBは、スクリプト内のリピートループのデバッグにも役立ちます。スクリプトの実行がリピートループに入ると、AHDBを使用してループの現在の繰り返しを確認することができます。これを行うには、Put counter()
またはPut the repeatIndex
をAHDBに入力し、Doをクリックします。どちらのオプションも、実行中のループの現在の繰り返しを出力します。(注:ネストされたリピートループが実行されている場合、counter()
とrepeatIndex()
は、実行中の最内部のリピートループの繰り返しを報告します。)リピートループやcounter()
およびrepeatIndex()
関数についての詳細は、リピートループを参照してください。
AHDBとVariable Watcherは、スクリプトのデバッグを容易にします。変数の内容やタイプを確認するためのコマンドをテストスクリプトに詰め込 むことなく、または特定のステップで正しい画像が見つかったかどうかを確認することなく、Runウィンドウから直接この情報を取得することができます。
問題の発見と解決
上記の機能は、デバッグオプションの網羅的なリストにはほど遠いです。これらのEggplant Functionalメソッドは、スクリプトの問題を見つけるための適切な方向に導くことができます。これらのデバッグコントロールはあなたの問題を解決することはできませんが、少なくとも問題点を特定し、スクリプトがあなたの期待通りに動作していない場所を把握するのに役立つことができます。