このセクションでは、値を抽出して検証したり、他のシナリオ ステップやツールで使用するために格納する方法について説明します。
このセクションの内容:
抽出と検証について
ブラウザーから記録された各シナリオ ステップに自動的に追加された Browser Contents Viewer ツールで、レンダリングされたビューの中のページ要素をクリックし、自動的にこれらの要素に機能テストを設定できます。後続の再生で検証が満たされない場合、関連するシナリオ ステップは失敗します。
さらに、これらの要素からデータを "抽出" して格納できます。そして抽出した値を追加のツール (フォーム フィールドのデータ投入やデータの検証のためのインスタンスのためのツール) で使用できます。 このため、動的データの検証が重要なシナリオを簡単に設定できます。抽出したデータは Web テストとサービス/API テストの両方で使用できます。
また、パスをレコーディングしている最中に、Web ブラウザーでパス要素を抽出することもできます。それには、ブラウザーで要素を右クリックし、ショートカット メニューの [Configure Validations] を選択します。[Validation Options] ダイアログが表示されます。このダイアログに表示されるオプションは、Browser Contents Viewer ツールのオプションと同じです。このツールは、パスを記録し、少なくとも 1 回再生した 後に 表示されます。
値の検証または格納
レンダリングされたページで表現される値の検証や格納をするには、Browser Contents Viewer のツール コンフィギュレーション パネル (ツールのノードをダブルクリックして開く) または [アクション後のブラウザー コンテンツ] タブ (抽出のみ) で次の設定を行います。
- 検証または格納したい値のページ要素を右クリックします (たとえばリンクを右クリックします)。そしてショートカット メニューから [<element> 要素から値を抽出] を選択します。
- 開いたウィザードで、[プロパティ名] ボックスで適切な要素が選択されていることを確認します。
- 抽出する値にズームインしたい場合は、ウィザードの [部分的な値の分離] ページを入力します。全体の文字列の検証や格納をしたい場合、このページは無視します。
- プロパティ値の一部だけを、検証したりデータ ソースへ送信したりしたい場合があります。 このような場合には、[テキストの切れ目を使い、値を部分的に分離] チェックボックスをオンにすることで、使用するプロパティ値を部分的に分離できます。そして、入力した値の境界となる [左辺テキスト] と [右辺テキスト] を入力します。プレビュー ペインは、入力した境界値に基づいて、どんな値が使用されるかを表示します。たとえば、プロパティ値が "Click here to log in” であるとします。
- “Click” を分離する場合、[左辺テキスト] は空にし、[右辺テキスト] には “ here” (空白を含む) を入力します。
- “here” を分離する場合、[左辺テキスト] に “Click “ を入力し、[右辺テキスト] には “ to” を入力します (それぞれ、空白を含む) 。
- “in” を分離する場合、[左辺テキスト] に“log “ (空白を含む) を入力し、[右辺テキスト] は空にします。
- プロパティ値の一部だけを、検証したりデータ ソースへ送信したりしたい場合があります。 このような場合には、[テキストの切れ目を使い、値を部分的に分離] チェックボックスをオンにすることで、使用するプロパティ値を部分的に分離できます。そして、入力した値の境界となる [左辺テキスト] と [右辺テキスト] を入力します。プレビュー ペインは、入力した境界値に基づいて、どんな値が使用されるかを表示します。たとえば、プロパティ値が "Click here to log in” であるとします。
- 値を検証するには、次の操作を行います。
- [値の検証] を選択します。
- 次の期待値オプションから選択します。
- 等しい: プロパティ値が期待値と正確に一致することを検証します。
- 次と等しくない: プロパティ値が期待値と一致しないことを検証します。
- 含む: プロパティ値のどこかに期待値が含まれていることを検証します。
- 次で始まる: プロパティ値が期待値で始まることを検証します。
- 次で終わる: プロパティ値が期待値で終わることを検証します。
- 次より小さい: プロパティ値が期待値より小さいことを検証します。
- 次より大きい: プロパティ値が期待値より大きいことを検証します。
- 存在しない: 指定したプロパティがページ上に現れないことを検証し、現れる場合はエラーをレポートします。Web アプリケーションが表示するべきでないエラー メッセージを表示しているような場合に利用できます。
- 色の一致: 検証の色マッピング ファイルで指定された色名と色の値が一致することを検証します。詳細については「要素の色を検査」を参照してください。
- 固定、パラメータライズ、スクリプトを選択し、値を指定します。
- [パラメータライズ] オプションを選択した場合、データ ソースから列名を指定できます。 シナリオが再生されるとき、期待値はデータ ソースの適切な行と列から取得されます。列名は 1 つのデータ ソースからだけ表示されるので、プロジェクトに複数のデータ ソースがある場合、連結されている Browser Validation Tool の上部で、使用されているデータ ソースを変更する必要があります。異なる HTML ページから抽出して設定されたため、他の抽出された列名が利用可能な場合、プロジェクトがデータ ソースを定義していなくても、それらも利用可能な列名のリストに入ります。
- データ ソースに選択したプロパティの値を送信する場合 (そうすることで、その値は後で他のシナリオやツールで使用できる)、次の操作を行います。
- [データ バンクに値を抽出] を選択します。
- 抽出した値を格納するデータ ソース列を指定します。
カスタム列名: 値を格納するデータ ソース列の名前です。特に指定しない限り、値は内部データ ソースに格納されます (たとえば [書き込み可能なデータ ソースの列] または [変数] を選択する場合)。この列名を使って、他の場所で値を参照します。たとえば、My Value というデータ ソース列にデータを格納する場合、パラメータライズされた値として My Value を選択します。リテラル ビューまたは複数レスポンス ビューでは、${My Value} として参照することもできます。
書き込み可能なデータ ソースの列: 書き込みできるデータ ソース列に値を格納します (詳細については「書き込み可能なデータ ソースの構成 」を参照)。値の配列を格納できます。他のツールは格納した値を反復できます。
一致するすべての列に書き込む: 指定の文字列を含むすべての列に値を格納します。あるメッセージから複数の値を抽出する場合、各値は、一致するすべての列に書き込まれます。反対に、1 つの書き込み可能なデータ ソースの列 (上記のオプション) を選択した場合、値はその列の複数の行にわたって書き込まれます。
変数: 指定の変数に値を保存して、現在のテスト スイートで再利用できるようにします。「変数の定義」で説明するように、変数は現在のテスト スイートにすでに追加されていなければなりません。[変数] で設定した値は、テスト スイート プロパティ パネルで指定されたローカル変数値を上書きします。
シナリオ ステップを実行すると、ページからプロパティ値が抽出され、指定の名前で列中の一時データ ソースに格納されます。 シナリオの後半部分がこの列名を参照すると、一時データ ソースに格納された値が使用されます。 必要であれば、プロパティ値の検証とデータ ソースへの送信を同時に行うことができます。
- [終了] をクリックします。
シナリオを実行したときに、値が検証されて格納されます。
検証を構成するには
Browser Validation Tool がテストに連結されます。このツールは検証を行います。後で検証を修正したい場合は、このツールの設定を変更することで修正可能です。
検証のソースとなる要素は、Browser Contents Viewer と Browser Validation Tool の [アクション後のブラウザー コンテンツ] タブで、赤い太線でハイライトされます。
抽出を構成するには
Browser Data Bank は Browser Playback Tool に連結されます。このツールは、抽出された値を格納します。抽出された値は、パラメータライズされた値として、後続のシナリオ ステップや他のツールでの入力値に使用できます。格納された値を後から修正する場合は、このツールの設定を変更することによって修正可能です。
抽出のソースとなる要素は、 Browser Contents Viewer と Browser Data Bank の [アクション後のブラウザー コンテンツ] タブで灰色の太線でハイライトされます。
検証と抽出の両方を構成するには
上に記載のとおり、Browser Validation Tool と Browser Data Bank はテストに連結されます。さらに、ソースとなる要素は紫色の破線でハイライトされます。
特殊な抽出 / 検証
テキストの検証または抽出
ページ上に出現したテキストを検証するには (または Browser Data Bank にテキストを抽出するには)、 次の操作を行います。
- 検証または抽出したいテキストを選択します。
- 選択した箇所を右クリックし、次のいずれかを選択します。
- 選択したテキストの検証を構成するには、ショートカット メニューから [選択したテキストの検証] を選択します。
- 選択したテキストの抽出を構成するには、ショートカット メニューから [選択されたテキストをデータ バンクに抽出] を選択します。
- ダイアログが開くので、 検証/抽出の設定をします。
- [終了] をクリックします。
要素の色の検査
ページ上の色を検査するテストを作成するには、次の操作を行います。
- テストを作成したいページ要素を右クリックします (たとえば、リンクを右クリックします)。ショートカット メニューから [<要素> 要素から値を抽出] を選択します。
- ウィザードが開くので、[プロパティ名] ボックスで [style_color] を選択します。[次へ] ボタンを 2 回クリックします。
- ウィザードの [抽出操作] ページで、 [期待値] ドロップダウン メニューから [色の一致] を選択し、テキスト フィールドに色を入力します (例:"red")。[色の一致] オプションは、Validation Colors Mapping ファイルに指定された色の名前に一致する色の値を検査します。 これらのマッピングは、16 進数表記 または RGB表記 (rgb(0, 255, 0)) です。詳細については「Validation Colors Mapping File」を参照してください。
- [終了] をクリックします。
色の検査は、テスト実行時に行われます。
Validation Colors Mapping ファイル
SOAtest には Validation Colors Mapping というファイルが同梱されています。 このファイルは、 SOAtest が色を名前で検査する方法を定義します。 次の場所に格納されています: <SOAtest_Installation_Directory>/plugins/com.parasoft.xtest.libs.web_<soatest_version>/root/validation/validationColors.txt.
ファイルの各行は、RGB カラーモデルの各構成要素の範囲とともに、名前で色を定義しています。 範囲を指定することで、検査される色が RGB カラー モデルの各構成要素の範囲内に含まれる場合、その色はこれらの範囲で定義された色に一致するということを判断します。 たとえば、下記はこのファイルの中の一行です。
red, b0-ff, 00-30, 00-30
この行は、 "red" の有効範囲を定義しています。 範囲は 16 進数で指定されています。 赤色の有効な R の範囲は 16進数の b0 と ff の間であることを表しています。 赤色の有効な G と B の範囲は 16進数の 00 と 30 の間です。 言い換えると、16 進数で #c80000 という値を要素が持っていた場合、その要素は赤であると見なされます。なぜなら、R の値、c8 は b0 と ff の間に含まれており、G と B の値、00 は 00 と 30 の間に含まれているからです。 しかしながら、赤であると期待される要素を検査したところ、その要素の色が 16 進数の #909090 であった場合、SOAtest は要素が間違った色を持っているというメッセージを表示します。
マッピング ファイルには、すでにいくつかの標準カラーが定義されています。 しかし、ファイルを修正して追加の色を指定することができます。 定義できる色は、1 行につき 1 色までです。 また、マッピング ファイルを修正して、定義済みの色の RGB 範囲を変更できます。 範囲は、「b0-ff」のようにハイフンで指定するか、「ff」のように単一の値を指定します 。 単一の値を指定する場合は、有効な値の範囲はその値だけとなります。 先にも述べたとおり、範囲は 16 進数で定義します。
このファイルへの変更を有効にするには、SOAtest を再起動してください。
スタイル プロパティの検証
スタイル プロパティを検査するには、Browser Validation Tool のコンフィギュレーション パネルを開き、[要素のプロパティ] フィールドに "style_" + <the JavaScript name of the property> を設定します。たとえば、 text-decoration スタイル プロパティを検査する場合、[要素のプロパティ] フィールドに style_textDecoration を指定します (textDecoration は JavaScript で text-decoration を指定する場合の記述です)。そして [期待値] 項目で適切なプロパティ値を指定します。 text-decoration の場合は、期待値は line-through または underline などと等しくなるかもしれません。
Validation Styles List ファイル
検査ウィザードで特定のスタイル プロパティを利用可能なプロパティとして表示したい場合、Validation Styles List にそのスタイルを追加できます。
Validation Styles List ファイルは、次の場所に格納されています。検証できる ランタイム スタイル プロパティ を指定します。
<SOAtest_Installation_Directory>/plugins/com.parasoft.xtest.libs.web_<soatest_version>/root/validation/validationStylesList.txt
このファイルのフォーマットは、1 行につき 1 プロパティです。 デフォルトで color プロパティがファイルに指定されていますが、検査したい有効なスタイル プロパティを追加できます。 このファイルへの変更を有効にするには、SOAtest を再起動する必要があります。再起動すると、記録中の Firefox ブラウザーか記録後のレンダリングされたビューで要素を右クリックしたときに、検査ダイアログでこのファイルで指定したプロパティを確認できます。 各プロパティに“style_” が付加されたものは、個別のスタイル プロパティのランタイム値を参照することを表します。
これらのプロパティを使用して設定した検査は、そのスタイル プロパティのランタイム値を検査します。 ランタイム値とは、すべてのインライン スタイルと CSS ファイルで定義されたスタイルが適用されたプロパティ値です。 このため、要素のインラインで定義されている値とは異なる値かもしれません。 たとえば、ランタイム スタイル検査は、ブラウザーですべてのスタイルが適用された後でユーザーが目にする実際の色を検査できます。
検証失敗時に表示するメッセージのカスタマイズ
各検証で、SOAtest は検証が失敗した場合に [品質タスク] ビュー (およびレポート) で表示されるメッセージを自動的に構成します。 このメッセージは、一般的には次のようなものです: "Validation failed for property [property_name]: Actual value found on the page [actual value]" must be equal to expected value [expected value]."
アプリケーションにとってより意味のあるカスタム メッセージに簡単に設定できます。たとえば、オンライン バンキング アプリケーションで作業していて、口座残高がゼロに達していないことをチェックする検証を追加するとします。この場合、"//span[text() = "account" was not found" といったデフォルトのビルトイン メッセージの代わりに、"Account should not be zero" といったカスタム メッセージを指定できます。
カスタム検証メッセージを設定するには、次の操作を行います。
- 設定したい Browser Validation Tool のコンフィギュレーション パネルを開きます。
- [デフォルト メッセージの使用] オプションをオフにします。
- テキスト フィールドに適切なメッセージを指定します。任意のテキストを使用できます。また、次の 2 つのキーワードも使用できます。
- ${ActualValue} - HTML ページで見つかった実際の値と置き換えられます。
- ${ExpectedValue}- 期待値 (固定、パラメータライズ、スクリプト) と置き換えられます 。
テスト実行中に使用された格納された変数の確認
[コンソール] ビュー ([ウィンドウ] > [ビューの表示] > [コンソール]) を構成して、テスト実行時に使用された格納されたデータ バンク変数を表示できます。詳細については、「[コンソール] ビュー」を参照してください。
XPath を使ったカスタム検証の構成
XPath を使用して複雑な検証を指定できます。XPath を使用するには、Browser Validation Tool の [要素の指定] フィールドを [XPath の使用] に設定し、適切な XPath を指定します。XPath の使用に関する詳細については、「XPath のリファレンス」を参照してください。
スクリプトを使ったカスタム検証を構成
GUI の制御画面では適切に表現できない複雑な検証を行う場合は、スクリプトを使用して表現できます。Browser Validation Tool の [要素の指定] フィールドで [スクリプトの使用] を選択し、適切なスクリプトを指定します。
たとえば、テーブルのすべての行を検証すると仮定します。対象のテーブルは可変長である可能性があります。ブラウザー機能テストに Extension Tool を接続し、input.getDocument() によって提供される文書から値を引っ張ることができます。以下は、この動作を達成する JavaScript スクリプトのサンプルです。
var Application = Packages.com.parasoft.api.Application; var WebBrowserTableUtil = Packages.webking.api.browser2.WebBrowserTableUtil; var WebKingUtil = Packages.webking.api.WebKingUtil; // Verify that all values in a table column are equal to a previously // extracted value. For example, we searched for all places in which // widget 11 is sold, and we want to make sure that all results are // for widget 11. // input: com.parasoft.api.BrowserContentsInput. // context: com.parasoft.api.ExtensionToolContext. function validateTable(input, context) { // For the column we want to validate. var widgetColumnIndex = 0; // We extracted through a Browser Data Bank in a previous test // the expected value to data bank column "widgetName". // The value was extracted, not from a data source, so use "" or // null (None in Python) as the name of the data source. var expectedWidgetName = context.getValue("", "widgetName"); var document = input.getDocument(); // Table should have some unique identifying attribute (e.g., id). var table = WebBrowserTableUtil.getTable("id", "mytable", document); // If the first row of the table contained column headers, we could // use getCellValuesForColumn(String, Element). For example if the // widget name column was named "Widget Name", then we could use // getCellValuesForColumn("Widget Name", table). In either case, // getCellValuesForColumn returns an array of String objects. See // the JavaDocs for more information. var values = WebBrowserTableUtil.getCellValuesForColumn(widgetColumnIndex, table); if (values.length == 0) { context.report("No rows found!"); } for (var i = 0; i < values.length; ++i) { if (values[i] != expectedWidgetName) { var errorMessage = "Widget name (column " + widgetColumnIndex + "): " + "Expected value '" + expectedValue + "', but found '" + values[i] + "'."; context.report(errorMessage); } }