クライアントの自動化

Platform 4.2 以上が必要

QuickTest Professional (QTP) を使用したNexaweb アプリケーションクライアントのテスト

ここでは、QTP を使用して、Nexaweb Platform 4.2.x. で開発した Nexaweb アプリケーションクライアントをテストする方法について説明します。

Nexaweb アプリケーションクライアントをテストするには、QTP を次のように使用します。
  • QTP の通常の記録モードを使用する
  • スクリプトを記述する
ここでは、QTPの通常の記録モードを使用して Nexaweb アプリケーションクライアントをテストする方法について説明します。

要件

  • QuickTest Professional (QTP)
  • QTP Java プラグインがインストール済みで、有効になっている
Nexaweb アプリケーションクライアントのコンフィギュレーションファイルの設定

アプレットクライアントまたはデスクトップクライアントのテストができますが、難読化されていないクライアントバージョンをテストする必要があります。

Nexaweb アプリケーションクライアントをテストして、AWT (Abstract Windowing Toolkit) コンポーネントでの主要イベントを記録できるようにするには、Nexaweb アプリケーションクライアントのコンフィギュレーションファイルを編集する必要があります。

アプリケーションクライアントのコンフィギュレーションファイルを編集するには
  1. テストするアプリケーションの WEB-INF/nexaweb-client.xml を見つけます。
  2. nexaweb-client.xml をテキスト エディタで開きます。
  3. 難読化されていないクライアントを使用する場合は、次の操作を行います。
    - 次のエントリを見つけます。<ui-test>false</ui-test>
    - このエントリを true に変更します。<ui-test>true</ui-test>
  4. AWT コンポーネントでの主要イベントを記録できるようにするには、次のエントリを <client-app> の最上位の子として追加します。
    <quick-test-pro-record-fix>true</quick-test-pro-record-fix>
  5. nexaweb-client.xml を保存して閉じます。
  6. サーバーを再起動します。
注: 主要なイベントを記録するための修正プログラムが現在 Mercury から入手できます。この修正プログラムを使用すると、<quick-test-pro-record-fix>の 設定が不要になります。この修正プログラムを入手するには、Mercury に連絡して、「patch to fix key recording bugs (主な記録バグ修正用パッチ)」というキーワードを用いてパス SR# 1-345639133 をリクエストします。

記録の準備

次のテストを実行する場合は、以下の操作を行います。

  • Nexaweb コンポーネントで呼び出された任意のメソッドの戻り値を検査する
  • テキストに関連する Nexaweb コンポーネントのテキストを検査する
NexaQtpLib というスクリプト関数のライブラリからテキストを追加します。このテキストは、QTP の関連付けのあるライブラリファイルとしてこのページの最後に示されています。

関連付けのあるライブラリファイルを追加するには、次の手順に従います。
  1. 新規テストを開始します。
  2. [テスト]、[テストの設定]、[リソース] の順に選択します。
  3. NexaQtpLib テキストを [関連付けのあるライブラリファイル] として追加します。
    これらの関数は、スクリプトライブラリ関数として QTP で表示されます。

記録

記録を実行するには、次の操作を行います。

[キーワードビュー]または[エキスパートビュー]のいずれかで、カーソルをスクリプトの下に置いて [記録]をクリックします。
  • アプレット クライアントをテストする場合:
    - [Web]タブを選択します。
    - 使用しているブラウザを選択します (この操作は一度のみ必要です)。
    - 起動するページを選択します (例: http://localhost:8080/internationalizationsample/)
  • デスクトップ クライアントをテストする場合:
    - [Java]タブを選択します。
    - 作業ディレクトリを入力します (例: C:\nexa\client)。
    - 起動に使用するコマンド ラインを入力します (例: java -cp lib\NexawebInstallClient.jar com.nexaweb.client.desktop.DesktopClient -logFile log.xml -server http://localhost:8080 -appcontext /RichText -initialPage autoime.xml)。
     
アプリケーションの初期画面が表示されたら、次の操作を行います。
  • [挿入]、[チェックポイント]、[標準チェックポイント] の順に選択します。
  • アプリケーションの画面で要素をクリックします。
    このチェックポイントにより、アプリケーションが表示されるまで待機します。チェックポイントのデフォルト設定 (true の有効化を最大 10 秒間待機) は、通常 LAN のテストを実行する場合には問題ありません。また、チェックポイントのタイムアウトに、より大きい値を設定することもできます。
この方法でチェッ クポイントを作成して、別のアクションを実行したり、記録中に UI への変更を随時確認する前に、アクションが完了するのを待機します。この同期化は、サーバーサイドのアクションの後に行われる必要があります。つまり、ク ライアントサイドのアクションの後に同期化を行うか、待機時間を1 秒追加します。待機時間を 1 秒追加するには、[挿入]、[ステップ]、[ステップジェネレータ]、[Functions]、[すべて]、[Wait]の順に選択して、引数を 1 に設定します。または、[エキスパートビュー]に切り替えて、この行に「Wait 1」と入力します。

デスクトップペインをクリックすると、NDesktop オブジェクトが記録されます。

アプリケーションで、ボタンのクリック、コンポーネントのドラッグ、テキストの入力など、再生する必要のある操作を行います。


Nexaweb コンポーネントで呼び出されたメソッドの戻り値の検査

コンポーネントでメソッドを呼び出してその戻り値を調べるには、検査対象の各ポイントで次の操作を行います。
  1. [挿入]、[ステップ]、[ループステートメント]、[do.. while] の順に選択します
  2. while 条件を False から notEqual(tv, "expected")' に変更します。ここで、expected は予想される戻り値です。
  3. [挿入]、[ステップ]、[ステップジェネレータ]、[カテゴリ] の [Test Objects] の順に選択します。ここで、 (「オブジェクトとしての Nexaweb コンポーネントの検出」を参照)。実行環境操作を選択し、使用するメソッドをドロップダウンから選択して、戻り値を変数 tv に割り当てます。 object は検査対象のオブジェクトです
  4. テスト カーソルをループの外側に移動します。これにより、後続の記録ステップがループに含まれなくなります。
テキストに関連する Nexaweb コンポーネントのテキストの検査

getText() をテキストコンポーネント (textField、textArea) から呼び出す特殊なケースでは、次の操作を1 つのコンポーネントにつき 1 度行います。
[挿入]、[ステップ]、[ステップ ジェネレータ]、[カテゴリ] の [Test Objects] の順に選択します。ここで、オブジェクトは検査対象のオブジェクトです(「オブジェクトとしての Nexaweb コンポーネントの検出」を参照)。
表示されるテストの下にあるテストオブジェクトのリストに、目的のオブジェクトが表示されていない場合は、次の操作を行います。
- 手のアイコンをクリックします。
- テストするアプリケーションで目的のオブジェクトをクリックします。
- Test メソッドから "Object" を選択します。
- "ob1" などの値を変数として保存します。
-
エキスパートビューで、ob1=...の行の最初に Set を挿入します。
- このコンポーネントの各テストに、
checkObjectText ob1, "expected text"などの行を入力します。

オブジェクトとしてのNexaweb コンポーネントの検出

標準チェックポイントを使用してNexaweb コンポーネントをテストする場合や、「Nexaweb コンポーネントで呼び出されたメソッドの戻り値の検査」や「テキストに関連する Nexaweb コンポーネントのテキストの検査」で説明した方法で値を調べる場合は、QTP でオブジェクトを選択する必要があります。

上記の場合、目的のオブジェクトがステップジェネレータの[Test Objects]ドロップダウンリストに表示されない場合は、次の操作を行います。ドロップダウンの右にある[オブジェクトの選択]ボタンをクリックします。表示されるダイアログの下側にある手のアイコンをクリックします。アプリケーションが表示され、検査対象の Nexaweb コンポーネントをクリックできます(標準チェックポイントか ら、このポイントに直接移動する必要があります)。クリック操作を行うと、ネストされた複数のコンポーネントに到達します。そのため、そのネスト構造の最 も内側にあり、使用可能な目的のオブジェクトのリストが表示されます。QTP はオブジェクトをJava クラス名によって識別するため、各オブジェクトは次の形式で表示されます。
  • ボタン: NButton
  • textField: NTextField
  • textArea: NScrollPane 内にある NViewport 内の NRichLabel
  • セル: NTextField
  • コンボボックス: NCombobox 内の NButton および NTextField ()、コンボボックスのリストボックス: NPopup 内の NTreeTable
  • ラジオボタンとチェックボックス: NToggleButton
DOM と ClientEvents へのチェックポイントの設定

この方法を用いる場合は、デスクトップクライアントを使用する必要があります。デスクトップクライアントを使用していて、コマンドラインで-logFile log.xml (または別のファイル名) をそれに渡す場合は、UI DOM の任意の場所にチェックポイントを設定できます。記録中にこのようなチェックポイントを作成するポイントに到達したら、アプリケーションの任意の場所で F9 キーを押します。次に、QTP で [挿入]、[チェックポイント]、[XML チェックポイント (ファイル)] の順に選択して、ファイルの完全パス (例: C:\Nexa\log.xml) を選択します。現在の UI DOM 要素が表示されます。調べる要素を選択します。(ヒント: XML 表示の上にある [すべて選択] ボタンをクリックしてから、選択を解除します。これにより、現在クリックされた状態であるか、または最近クリックされたかどうかによって異なりますが、異 なるスタイルを含めることができます。)

記録の停止


記録が終了したら、ブラウザまたはデスクトップクライアントのアプリケーションウィンドウを閉じて、QTP で[停止]をクリックします。

記録後の作業


次の手順に従います。
  1. 誤って記録されたクリック操作や入力を削除します。
  2. エキスパートビューに切り替えます。
    記録されたオブジェクトが NDesktopPane、NButton、NTextField、NRichLabel (NRichLabel は、ラベルのほか、textArea および textView を示す) などの形式で表示されます。
  3. 作成した obut = ... の各行の最初に Set を挿入します。
  4. QTP によって誤って記録された PressKey イベントを修正します。
    たとえば、QTP では、shift キーが押されているかどうかにかかわらず、メインキーボードから入力されたアルファベット文字が大文字で記録され、テンキーの数字が文字で記録されます。
    修正プログラムの quick-test-pro-record-fixnexaweb-client.xml 設定すると、ほとんどの修正が自動的に行われます。ただし、p から z までの文字については、手動で修正する必要があります。
    これらの文字は、一連の .PressKey( char ) を 1 つの .Type( String ) に置き換えることによって修正できます。
    - [挿入]、[ステップ]、[ステップジェネレータ]、[カテゴリ] の [Test Objects] の順に選択します。
  5. キー修飾子の記録で発生した不具合を修正します。次にその例を示します。
    - Shift + Tab キーを記録すると、Shift が省略されるため、...<object>.PressKey " "...<object>.PressKey " ", micShift に変更します。
    - Ctrl + Shift + 左方向キー (←) を記録すると、...<object>.PressKey "micShift + micLeft",micCtrl となるため、...<object>.PressKey micLeft, micCtrlShift に変更する必要があります。ただし、これを再生すると正しく動作しない可能性があるため、動作する形式 (...<object>.PressKey micShift + micLeft, micCtrl) に変更します。
    - Shift + 数字 1 キー (感嘆符) を記録すると、Shift が省略されて ...<object>.PressKey "1" となるため、...<object>.PressKey "1", micShift に変更します。これが動作しない場合は、Ctrl-Shift-$#@%...<object>.PressKey "!" を使用します。

再生

再生するには、キーワードビューで一番上の行にカーソルを置いて [実行]をクリックします。

NexaQtpLib (4.2.2+ 以前のバージョンの場合)


次の Nexaweb テストスクリプトライブラリを使用して、テキスト関連コンポーネントのテキストにチェックポイントを設定します。
  • (1 つのテストにつき 1 度) [テスト]、[テストの設定]、[リソース] を選択し、NexaQtpLib のテキストを "関連付けのあるライブラリ ファイル" として追加します。
  • (1 つのコンポーネントにつき 1 度):
    オブジェクトは、検査対象のオブジェクト (textField) です。
    - Test メソッドから Object を選択して、固有の名前を持つ値 (例: ob1) を保存します。
    エキスパートビューで、このステップの最初に Set を挿入します。
  • (テキストの検査ごとに)  エキスパートビューで、checkObjectText ob1, expected text という行を追加します。

 

CR = chr(13)
LF = chr(10)
TAB = chr(9)
tv = "UNOVERWRITTEN"
DEFAULTTIMEOUT = 9 'seconds, override with "timeout=N" prior to do-while loop
timeout = DEFAULTTIMEOUT

Function notThereTM( val, trimFirst )
 If trimFirst Then
    tvt = Trim( tv )
 Else
 tvt = tv
 End If
 notThereTM = tvt <> val
 If notThereTM Then
  timeout = timeout - 1
  If timeout <= 0 Then
   timeout = DEFAULTTIMEOUT
   Reporter.ReportEvent micFail, "notThere value timeout", "expected='" + val + "', actual='" + tvt + "' ."+cStr( trimFirst )
   notThereTM = false
  Else
   Wait 1
  End If
 Else
 timeout = DEFAULTTIMEOUT
 Reporter.ReportEvent micPass, "notThere pass", "found val='" + tvt + "' ."
 End If
End Function

Function notThere( val )
 notThere = notThereTM( val, false )
End Function

Function notEqual( nowVal, checkVal )
 tv = nowVal
 notEqual = notThereTM( checkVal, false )
End Function

Function checkObjectText( obj, val )
 Do
  tv = obj.getText 
 Loop While notThereTM( val, false )
End Function

Function checkTrimmedObjectText( obj, val ) ' QTP's VB' impl Trim() is buggy; otherwise this is a fine idea
 Do
  tv = obj.getText
 Loop While notThereTM( val, true )
End Function