アプレットのテスト

概要

バージョン 5.0 以降の Curl® 言語 API では、自動テスト ツールである Mercury QuickTest Professional® (QTP) バージョン 9.0 以降を使用して Curl 言語アプリケーションをテストできます。
Mercury QTP によるテストは、Windows® プラットフォームでのみ実行できます。
QTP でテストをサポートするカスタム コントロールを記述する方法に関しては 「カスタム コントロールと自動テスト」 をご覧ください。 QTP のテスト ツールに関しては Mercury QuickTest Professional をご覧ください。

Curl RTE のインストールと QTP の実行

要約:
  • Mercury QTP は、Curl RTE を自動的に起動できます。Curl コントロール パネルの [登録] ボタンと [登録解除] ボタンを使用して、この自動起動を行うかどうかを設定できます。
  • 正常に動作させるには、QTP から Curl RTE を起動します。
  • Curl アプレットをテストする際に、QTP Web アドインをロードします。
Curl RTE または Curl IDE がマシンにインストールされていて、QTP に登録されている場合は、QTP を起動すると RTE が自動的に起動します。
コントロール パネルの [登録解除] ボタンをクリックすると、QTP から RTE の登録が解除され、自動起動は行われなくなります。[登録] ボタンをクリックすると、RTE が QTP に登録され、自動起動は再び有効になります。QTP が既にインストールされているマシンに Curl RTE をインストールする場合は、Curl は自動的に登録されます。Curl RTE のインストール後に QTP をインストールする場合は、[登録] ボタンを使用して手動で RTE を登録する必要があります。
Curl アプリケーションをテストする際の QTP Web アドインのロードは、Java アプリケーションをテストする際の推奨操作と似ています。QTP の [アドイン マネージャ] ダイアログが表示された場合は、QTP の起動時にアドインを選択できます。[ツール] メニューを使用して、開いた [オプション] ダイアログから [アドイン マネージャ] を表示することもできます。
QTP と Curl RTE 間の通信を正常に行うには、QTP から Curl RTE を起動する必要があります。通信が正常に行われない場合は、オブジェクト スパイ を使用して Curl アプレットのコントロールをテストすると、次のような結果が表示されます。
Figure: Mercury QTP が Curl RTE を認識できていない場合
さらに、Curl アプレットに対するユーザー操作も記録されません。通信が正常に行われている場合は、オブジェクト スパイ に次のような結果が表示されます。
Figure: Mercury QTP が Curl RTE を認識できている場合

テスト可能なアプレットの作成

要約:
  • test-name プロパティでは、テストするオブジェクトの一意の識別子を指定できます。
  • test-parent? プロパティでは、テスト名の名前空間を設定できます。
Mercury QTP によるテストは、クラス、プロシージャ、および一部のプロパティでサポートされています。これらのプロパティは Visual で定義され、GUI Toolkit のほとんどのオブジェクトにより継承されます。
Mercury QTP でテストする Curl アプリケーションを作成する場合に最も重要なのは、アプリケーションで使用するオブジェクトのテスト名を指定することです。テスト名を指定するには、オブジェクトの test-name プロパティを設定します。Visual.test-nameVisual で定義され、すべての GUI コントロールによって継承されます。
test-nameを指定しなければ、Curl 実行環境は、nullでなければVisual.nameプロパティを使用します。それができない時にはRTEは、タイプとアプレット内の数値順に基づいて各オブジェクトを一意に識別するテスト名 (CommandButton#0 など) を自動生成します。この機能を使用すると、既存のアプリケーションを大幅に変更することなくテストできます。ただし、アプレットを編集してコントロールの表示順を変更した場合は、QTP によってコントロールの番号が自動的に再割り当てされます。そのため、前に自動生成された名前を使用する既存のテスト スクリプトは、機能しなくなります。
テスト名は、特定のテストの親の中で一意でなければなりません。新しいテストの親を作成するには、Visual.test-parent? プロパティを使用します。たとえば、TabContainer にいくつかの TabPane を定義し、実行中にそれらのペインにコンテンツを追加します。全てのペイン内のコントロールに一意のテスト名が付いているかどうかを知るのは困難です。このような場合に、各ペインをテストの親にすると、テスト名を一意にすることができます。
テストの親をアプリケーションに追加する場合は、テストの親ごとに QTP のオブジェクト階層のレベルが追加されるという注意点があります。レベルが多すぎると、混乱が生じる可能性があります。
アプリケーションにカスタム コントロールが含まれている場合は、QTP テストをサポートするようそれらのコントロールを構築する必要があります。「カスタム コントロールと自動テスト」を参照してください。
注意: Mercury QTP [記録の]再生機能はアプレットのローディングが完了するまでは使用できません。 これはアプレットがローディング時にダイアログを表示している場合に、Mercury QTPはダイアログのテストができないことを意味しています。 以下の回避方法で読み込み終了後にダイアログを表示させることによりこの問題は回避できます。
{after 0s do
    <statements>
}
このアプローチにより、アプレットのローディングが完了するまで <statements> 部分のコードの実行を遅らせることができます。

テスト スクリプトの記録と作成

次のコードをコピーして Visual.test-nameVisual.test-parent? を使用するサンプル アプレットを作成してみてください。TextFieldRadioFrame の各ペアで同じテスト名が使用されていますが、このアプレットの QTP テストを記録したり実行したりできます。これらのテスト名を含む Frame オブジェクトでそれぞれ Visual.test-parent?true に設定しているためです。
{define-proc {child-name}:HBox
    {return
        {HBox
            {Label "Child Data: "},
            {Fill width = 3px},
            {TextField
                test-name = "child-name",
                prompt = "child's name"
            },
            {RadioFrame
                {HBox
                    {RadioButton
                        test-name = "male",
                        label = "Male",
                        style = "standard"
                    },
                    {RadioButton
                        test-name = "female",
                        label = "Female",
                        style = "standard"
                    }
                }
            }
        }
    }
}
{Dialog
    {spaced-vbox
        {Frame
            test-parent? = true,
            {child-name}
        },
        {Frame
            test-name = "child-2-data",
            test-parent? = true,
            {child-name}
        },
        {Frame
            test-name = "child-3-data",
            test-parent? = true,
            {child-name}

        }
    }
}

次の図は、このサンプル アプレットで記録された QTP テストのキーワード ビューとエキスパート ビューを示しています。この例のポイントは次のとおりです。
Figure: QTP テストのキーワード ビュー
Figure: QTP テストのエキスパート ビュー

Curl オブジェクトのプロパティとメソッド

Mercury QTP の オブジェクト スパイ を使用して、Curl オブジェクトで使用できるメソッドやプロパティを表示できます。使用できる汎用アクションは、RawClickRawDoubleClickMouseDragPressKeyType、および CallMethod です。これらのアクションの詳細については、Visual.test-run を参照してください。
TypeCallMethod は記録されませんが、スクリプトに追加することはできます。Type では、一連の PressKey アクションを行うのと同様に文字列を入力できます。CallMethod では、任意のコードを呼び出せます。
次のコードをコピーしてサンプル アプレットを作成してみてください。次の例は、CallMethod を使用する単純なドロップダウン リストを定義しています。
{title Test Applet}

{DropdownList    
    test-name = "dropdown", 
    "0", "10", "20", "30",
    value = "0"
}
次の図は、CallMethod を使用して DropdownList.select-index を呼び出し、ドロップダウン リストの index = 3 の値を選択する単純なスクリプトを示しています。
Figure: CallMethod の使用
すべてのテスト オブジェクトで使用できるプロパティは次のとおりです。
名前と型説明
abs_x:int、abs_y:intオブジェクトの画面上の絶対位置 (ピクセル単位)。
attached text:Stringオブジェクトに関連付けられているラベル (ある場合)。このラベルは test-description ゲッターから取得されます。
curl object class:StringCurl の型の名前。
displayed:boolオブジェクトが画面にピクセルを描画する可能性がある場合は true。
enabled:boolenabled? の値。
focused:boolオブジェクトがキー フォーカスを持っている場合は true。
height:int、width:intオブジェクトの現在のサイズ (ピクセル単位)。
path:Stringセミコロン (;) で区切られたオブジェクトとそのすべての祖先のテスト名 (合成される場合があります)。
rel_x:int、rel_y:intテストの親を基準としたオブジェクトの位置 (ピクセル単位)。
test-name:StringVisual.test-name の値。この値が null の場合、名前が合成されます。