ターミナル サービス スクリプトを記録する際は、再生中の対象のウィンドウの位置とサイズが予定外のイベントにより変更され、テストの実行が失敗する可能性があることを認識する必要があります。 ここでは、そのような再生エラーを探して修正するという作業を行わなくてすむようにする、全般的なヒントを提供します。
Windows の ファイル名を指定して実行 コマンドで、アプリケーションを起動します。 デスクトップ アイコンから、またはマウスをクリックしても、アプリケーションを起動できますが、アプリケーションを異なるサーバーに移動する場合、または GUI がユーザー間で異なる場合は、デスクトップ アイコンは別の場所に表示される可能性があることを考慮してください。 このため、Windows の ファイル名を指定して実行 コマンド ウィンドウで、アプリケーションの EXE ファイルへのパスを入力することをお勧めします。
マウス クリックでは、x/y 座標、ウィンドウのリファレンスが必要となり、対象のウィンドウには、フォーカスがあてられている必要があります。 マウス クリック追跡のための GUI テストのテクノロジは信頼性が高まりましたが、その一方で、Windows は動的に変化する環境のままです。このため、小さな不整合を許容できるスクリプトを構築する必要があります。 このための方法の 1 つは、キーボードのショートカットを使用することです。 ショートカットでの唯一の要件はウィンドウのフォーカスです。
Windows アプリケーションのほとんどすべてのメニュー システムで、Alt キーの組み合わせを使用して特定のコマンドを開始することができます。 Alt キーのショートカットの使用を記録するには、まずアプリケーションにフォーカスをあて、次に Alt キーを押します。これにより、メニュー システムがフォーカスされます。 メニュー項目の多くには、下線付きの文字が 1 つ付与されています。 これは、Alt キー コマンドが特定のメニュー項目に利用可能であることを示しています。 適切な文字キーを押してサブメニューにアクセスし、開始するメニュー項目まで移動します。 メニュー項目自体にキーの組み合わせがある場合もあります。 たとえば、Microsoft Word で文書を開くには、Ctrl+O の組み合わせを使用します。 このショートカットでは、メニューがフォーカスされている必要はありません。
キーボードのショートカットが利用できず、マウスを使わなくてはならない場合は、作業中のウィンドウを最大化することで、不正なマウス クリックをする可能性を軽減できます。 これにより、毎回ウィンドウが決まった位置に固定され、マウス クリックはより正確になります。 原則として、ウィンドウの最大化が可能な場合は最大化することをお勧めします。
セッションの記録中、ウィンドウを最大化できない場合は、クリックするまえにウィンドウをデスクトップの左上隅に移動します。 記録時に、Recorder がフォアグラウンドにあるウィンドウのハンドルをつかめないことがあります。そのため、座標をデスクトップに対する相対座標にすることが必要です。
ターミナル サービス セッション中に予期しないイベントが起こらないようにするために、Windows のデスクトップをできる限り整理した状態を維持してください。 たとえば、スクリプトの再生中に Windows ネットワークのメッセージが表示されるとします。 その後のマウス クリックが、意図したアプリケーション ウィンドウではなく、Windows ネットワークのメッセージ ウィンドウに対して行われると、スクリプトが動作しなくなります。
ウィンドウをクリックする前に、クリックするウィンドウが存在し、フォーカスが設定されているか確認します。 以下は、このプロセスの自動化を支援するサンプルの BDL 関数です。
function MyCitrixWaitForWindowCreationAndActivation(sCaption:string; 
				nMatch    : number optional;
				nStyle    : number optional;
				nX        : number optional;
				nY        : number optional;
				nWidth    : number optional;
				nHeight   : number optional
				) : number
var 
    hwndNewWindow  : number;  // hwnd of the new window created
    nRTT:number; 
begin
	//
	// Check if window exists
	//
		hwndNewWindow := CitrixSearchWindow(sCaption, nMatch);
  		hwndNewWindow := 0;
	//
	// If window doesn’t exist, wait for creation
	//   
		if (hwndNewWindow < 1) then
			hwndNewWindow := CitrixWaitForWindowCreation(sCaption, nMatch,
			nStyle, nX, nY, nWidth, nHeight);
		end;
	// 
	// Check if window is already active, wait if it’s not active 
	// 
		MyCitrixWaitForWindowActivate(hwndNewWindow);     
		MyCitrixWaitForWindowCreationAndActivation:=hwndNewWindow;
		
end MyCitrixWaitForWindowCreationAndActivation;
 2 度以上同じ情報を入力すると、テスト対象のシステムは、同じ作業を繰り返すのではなく、 データをメモリにキャッシュします。 このため、作業ができるだけ現実的なものとなるように、入力/リクエスト データを変更することが重要です。 たとえば、異なるデータ範囲を有する異なるユーザー アカウントを使用します。 これは、テストに CSV (コンマ区切り値) ファイルを入力として使用することで実現できます。
検証とは、サーバーから受信されたレスポンスが正しいかどうかを確認するためにコードに追加されるチェックです。 GUI ベースのテストを実施する場合、検証はウィンドウの同期により自動的にスクリプトに追加されますが、コードに検証をさらに追加することをお勧めします。
カスタム タイマは、アプリケーションのレスポンス時間の追跡のために非常に重要です。 カスタム タイマがないと、アプリケーションに対する総合的なエンド ユーザー体験を判断することができません。 指標は、アプリケーションのどの点がよく実行されており、どの点がそうでないのかを判断する際に役立ちます。
テストスクリプトにカスタム タイマを追加する前に、アプリケーションの重要な領域を特定して、MeasureStartおよび MeasureStop 呼び出しを行う場所を決定します。 この作業については、TrueLog Explorer のログが参考になります。
以下は、Silk Performer のスクリプトでタイマを使用している例です。
// 
// Submit a work order. 
// 
CitrixMouseClick(27, 31, hwndWorkOrder, MOUSE_ButtonLeft);     
// 
// Start the response time clock. 
// 
MeasureStart("202.01: Work Order Submission.");
// 
// Wait for the "Order Submission Complete" dialog box. 
// 
MyCitrixWaitForWindowCreationAndActivation(
	"Order Submission Complete",
	MATCH_Exact
	);   
// 
// Stop the response time clock. 
// 
MeasureStop("202.01: Work Order Submission ");