トラブルシューティング スクリプト

負荷テストの実行時に、タイムアウト エラーやその他の実行失敗が発生することがあります。 ここでは、そのようなエラーを回避、検索、修正するヒントを提供します。

TrueLog Explorer を使用する

テスト実行が予期しないダイアログ ボックスが表示されることで失敗し、それが原因でスクリプトが作業中のウィンドウへのフォーカスを失うことがしばしばあります。 そのため、テストを実行する前に Silk Performer の TrueLog On Error 機能を有効にしておくことをお勧めします。 そうすると、エラーが発生した場合に、TrueLog Explorer で視覚的に割り出すことができます。

ターミナル サーバー セッションをクリアする

テスト実行が失敗し後は、テストを再開する前にすべてのターミナル サーバー セッションをリセットしてください。リセットしない場合はスクリプトが失敗します。

アプリケーション エラーを処理する

テスト中、生成された負荷が原因で、アプリケーションによってエラーが呼び出されることがあります。 エラーの処理および報告を行うイベント ハンドラーをスクリプトに追加しておくと便利です。

ここでは、Program Error Intercepted という名前のウィンドウを継続的に監視し、そのようなウィンドウが表示された場合に ALT-C を実行してウィンドウを閉じるイベント ハンドラーの例を示します。 またそのようなエラーが発生すると、イベント ハンドラーはエラー メッセージを生成します。

dclevent 
  handler Handler1 <EVENT_CITRIXINTERRUPT>
  var
    nInterrupt, nWindow : number;
    nStyle              : number;
    sWindowCaption      : string;
    begin
      CitrixGetActInterrupt(nInterrupt, nWindow);
      ErrorAdd(FACILITY_CITRIXENGINE, 47, SEVERITY_INFORMATIONAL);
      print(string(nWindow));
      CitrixGetWindowCaption(nWindow, sWindowCaption);
      if sWindowCaption = "Program Error Intercepted" then
        CitrixKey(67, MOD_Alt); // 'c'        
      end;
      ErrorRemove(FACILITY_CITRIXENGINE, 47);
    end Handler1;

思考時間を回避する

テスト対象のアプリケーションのスクリプトがオーバーランするのを回避するために Wait() 文または ThinkTime 文を使用しているかもしれませんが、以下の 2 つの理由からこの方法はお勧めできません。

  • 負荷の生成が増加すると、アプリケーションの処理速度が著しく遅くなる場合がある。 結果的に待機文が短すぎ、アプリケーションのオーバーランの問題自体が再度発生することがある。
  • ウィンドウ、テキスト、画面の同期のレスポンス時間を計測する場合は、Wait() 文の時間によってレスポンス時間が不自然に長くなってしまうことがあります。

これを解決するには、同期を使用します。

スクリプトの一部を記録し直す

アプリケーションの動作を変更すると、記録したスクリプトの一部が使用できなくなることがあります。 ユース ケースの一部を記録し直すというのも 1 つの手段ですが、レコーダが既存のウィンドウのハンドルを追跡できず、結果としてウィンドウの処理番号が間違ってしまうということあるため注意が必要です。 こういった問題のせいで、新しく記録したスクリプトと元のスクリプトの統合が極めて煩雑になってしまうことも考えられます。 ユース ケースが小さい場合は、ユース ケース全体を記録し直すことをお勧めします。 記録し直さない場合は、以下に概説されている処理に従って、新しいスクリプトと古くなったスクリプトを統合してください。

  1. 記録し直すコードのセクションをコメントアウトします。
  2. 置換が必要なコード セクションの場所と、ユース ケース内の対応するセクションを一致させます。
  3. ターミナル サービス セッションを、ユース ケース内の対応するポイントまで移動させます。
  4. オープン ターミナル サービス セッションの記録を開始します。
  5. 置換が必要なユース ケースのアクションを実行します。
  6. レコーダを停止します (その後記録のスクリプトが作成されます)。
  7. 新たに記録されたスクリプトのウィンドウ ハンドル変数を、それぞれ元のスクリプトのハンドルと置き換えます。 CitrixSearchWindow() などの関数を使用すると、正しいウィンドウ ハンドルを特定できます。
  8. 編集したコードを元のスクリプトにコピーします。