スクリプト実行速度の向上
Eggplant Functionalで長いSenseTalkスクリプトの作成や高度なスクリプティング技術を使用し始めると、テストの全体的な実行速度についてすぐに対処する必要があります。ランタイムをこことそこで数秒調整するだけでも、多数の複雑なスクリプトを実行するときには大きな違いを生むことができます。
SenseTalkには、スクリプト実行を高速化するための多くの方法が提供されています。ここで説明する方法はすべてスクリプトの実行を速くするのに役立つはずですが、どの方法が特定のテストシナリオに最も適しているかは自身で判断する必要があります。
SUTとのインタラクション時間の短縮
スクリプト実行時間を改善するために最も効果的なことの一つは、RemoteWorkInterval
グローバルプロパティを調整することです。このプロパティは、Eggplant Functionalが次のイベントをテスト対象システム(SUT)に送信するまでの間のイベント間の時間を制御します。RemoteWorkInterval
グローバルプロパティの値をスクリプトで下げることで、スクリプトはより早く実行されるはずです。
このグローバルプロパティのデフォルト値は0.7秒です。例えば、RemoteWorkIntervalを0.3秒に減らすには、次のSenseTalkコマンドをスクリプトに追加します:
set the remoteWorkInterval to .3
この調整により、SenseTalkスクリプトがイベントの間に一時停止する時間は0.3秒に短縮されます。
RemoteWorkIntervalグローバルプロパティの最適な値は、サーバーリソースやネットワーク速度などの環境要素に依存します。スクリプトをテストした後、環境に合わせて RemoteWorkIntervalの値をさらに調整する必要があるかも出てくるかもしれません。
スクリプト内でRemoteWorkIntervalグローバルプロパティを設定することで、ランタイム中にこのプロパティ値を増減させるのが容易になります。アクション間の遅延時間を異なるものにするスクリプトのセクションがある場合にこの方法を使用できます。さらに、タイミングの調整をスクリプト内に置くことで、スクリプトやスイートをチーム間で共有する場合にも調整が移植可能になります。
リモートワーク間隔の設定
ランタイムの調整がスクリプティングにとって重要でない場合は、Eggplant Functionalの設定からRemoteWorkIntervalグローバルプロパティを調整することができます:
- eggPlant > Preferencesを選択します。
- Runタブを選択し、次にSystemタブを選択します。
- Remote Work Intervalの好みの値を設定します。
設定でRemote Work Interval値を設定すると、それはローカルユーザー値のみとなり、他のユーザーと共有する可能性のあるスクリプトのタイミングには影響を与えません。ただし、すべての設定と同様に、この設定はこのユーザーアカウントのすべてのスクリプトとスイートに適用されます。
Remote Work Interval設定を変更した場合でも、スクリプト内でremoteWorkInterval
グローバルプロパティを調整することで、そのランタイムに影響を与えることができます。 ランタイム中にグローバルプロパティを変更しても、ユーザー設定値は変わりません。
画像検索時間の短縮
Eggplant Functionalは画像ベースのツールであることを意図していますが、画像の検索はスクリプトの実行時間の一部を占めることがあります。デフォルトでは、Eggplant Functionalは各画像を最大6回検索し、画像が見つからなかったと報告する前に全画面の更新とさらなる1回の検索を行います。このプロセスの各画像検索の間には、ImageSearchDelay
グローバルプロパティ値に等しい遅延があります。
ImageSearchDelay
の値を下げると、スキャンの頻度が上がり、スクリプトの実行が速くなります。このプロパティを調整するには、以下のSenseTalkコマンドをスクリプトに追加します:
Set the imageSearchDelay to 0.1
SenseTalkスクリプトはこの頻度でエリアを検索しようとしますが、エリアが大きいか、画像コレクション(複数の画像を検索するため時間がかかる可能性がある)を検索している場合は、各スキャンが完了するのを許すように頻度を自動的に調整します。
全体の検索時間は、ImageSearchCount
およびImageSearchTime
グローバルプロパティによっても影響を受けます。これらのプロパティが画像検索時間にどのように影響を与えるかについては、ImageSearchCount
、ImageSearchDelay
、およびImageSearchTime
を参照してください。
WaitForプロパティの使用
画像検索コマンドとWaitFor
プロパティ値を使用することで、スクリプトの実行を高速化できます。WaitFor
コマンドと同様に、WaitFor
プロパティは、Eggplant Functionalが特定の画像がSUTに表示されるのを待つ最大時間を設定します。以下の例に示すように、WaitFor
プロパティと短い時間値を使用することで、この待ち時間を短縮できます。
例:
Click (ImageName:"Done_button", waitFor: 2) // 画像がSUTに表示されるのを最大2秒間待つ
put "The test is complete."
画像が表示されるとすぐに、スクリプトは次のコマンドを実行します。WaitFor
の時間が経過するのを待つことなく実行を続行します
あなたのスクリプトの特定のポイントで、画像がすでに存在していること、または存在しないことを知っている場合、長い検索を待つ必要はありません。スクリプトの実行時間を短縮するために、WaitFor
時間をゼロ値に設定します。これは、Eggplant Functionalに画像を一度だけスキャンするように指示します(デフォルトは7回)。このテクニックは、以下の例に示すように、繰り返しループや他の繰り返し方法の中で特に役立ちます。
例:
repeat 1 minute
If imagefound (imageName:"Notification", waitFor: 0) then
Logwarning "警告はまだ存在します。"
wait 2
else
Log "警告は消えました。"
Exit Repeat
End If
end repeat
画像関数の使用
以下の画像関数を使用して、スクリプトの実行を高速化し、検索時間を節約し、スクリプトの実行に関する情報を収集します。
FoundImageLocation()
FoundImageLocation()
関数は、最後に見つかった画像の画面座標を返します。次のアクションが前回の検索と同じ画像を参照している場合、この関数を使用して直接座標から呼び出すことで時間を節約できます。これは、画面を再度検索するよりもはるかに高速です。
例:
WaitFor 8, "Save Button", "OK Button","Retry Button" -- いずれかのボタン画像が見つかるまで最大8秒間待ちます
Click FoundImageLocation() -- 見つかった画像のホットスポットをクリックします。
上記の例では、Eggplant FunctionalはWaitFor
コマンド中にボタンの一つを見つけます。そして、そのボタンの位置を既に知っているため、すぐにクリックし、スクリプトの実行時間を短縮します。
スクリプト内で画像の名前を使用する代わりにFoundImageLocation()
関数を使用すると、Eggplant FunctionalはClick
コマンドのために再び検索を行い、スクリプトの実行時間が増えます。
ImageFound()
時には、画像が画面に表示されているかどうかを知り、結果に応じて異なるアクションを取る必要があります。ImageFound()
関数は、画像(またはいくつかの画像)が見つかったかどうかを示すtrue
またはfalse
の値を返します。以下の例では、ImageFound()
関数とFoundImageLocation()
関数を組み合わせて、追加の画像検索の必要性を排除し、スクリプトの実行時間を短縮します。
例:
if ImageFound(10,"Save Button") then -- "SaveButton"が見つかった場合...
Click FoundImageLocation() -- 見つかった画像の位置をクリックします。
else -- それ以外の場合...
LogError "Save Button not found" -- エラーを記録します。
end if
ImageLocation()
画像の位置を知りたい場合は、ImageLocation()
関数を呼び出して、画面の左上隅を基準にしたホットスポットの座標を返すことができます。以下の例では、ImageLocation()
を使用してスクロールバーの下ボタンの位置を保存し、その位置を10回クリックするためのリピートループを使用します。このImageLocation()
の使用により、Eggplant Functionalが画像を10回検索する代わりに1回だけ検索するため、スクリプトの実行時間が改善します。
例:
set ScrollDownButtonLocation to ImageLocation("ScrollDownButton")
repeat 10 times
click ScrollDownButtonLocation
end repeat
指定した画像が見つからない場合、ImageLocation()
関数は例外を発生させます。
画面の一部分の検索
Eggplant Functionalにどこで検索を行うかを指示することで、光学文字認識(OCR)や画像検索を高速化することができます。
SearchRectangle
the SearchRectangle
を使用して、画像を検索するためのSUT画面の一部を定義します。
例:
setoption SearchRectangle, ("DialogUpperLeft",imageLocation("DialogLowerRight") + (50,10)) // DialogUpperLeftのホットスポットの位置に基づいてsearchRectangleを設定し、DialogLowerRightのホットスポットの位置から右に50ピクセル、下に10ピクセル移動させます。
同じ小さなエリアを繰り返し検索するときには、the SearchRectangle
を使用して検索エリアを制限することもできます。例えば、ドロップダウンリストをスクロールしている場合、the SearchRectangle
を送信して検索エリアをドロップダウンリストが表示される場所に制限することができます。これにより、特定のエントリーをリストからより早くスクロールすることができます。
ScreenPart
検索する画面の部分を定義する再利用可能なカスタム関数ハンドラを作成することができます。この関数ハンドラの例については、Using the ScreenPart Functionをご覧ください。