Comments
Description
Transcript
Rational Functional Tester 活用 活用ガイド –
Rational Functional Tester 活用ガイド 第4版 活用ガイド –第 テスト拡張 テスト拡張 Hints&Tips 編 © Copyright 2009 IBM Corporation Rational Functional Tester 活用ガイド 目次 0.Rational Functional Tester 活用ガイド 活用ガイド-テスター の位置づけ 位置づけ ....................................- 2 ガイド テスター編 テスター編-の 1.RFT スクリプト拡張 スクリプト拡張のための 拡張のための Hints & Tips......................................................................- 3 1.1 データプール変数 データプール変数を スクリプトで利用する 利用する ...........................................................- 3 変数をスクリプトで 1.2 データプールを データプールを活用した 活用したシナリオ したシナリオ例 シナリオ例 ......................................................................- 5 1.2.1 指定の文字列が含まれる行のラジオボタンをクリックさせる方法.............- 5 1.2.2 指定の文字列が含まれる行のリンクをクリックさせる方法 .......................- 7 1.2.3 データプール値をフラグとして、分岐処理を行わせる方法 .......................- 9 1.3 オブジェクト・ オブジェクト・マップ内 マップ内のオブジェクトを オブジェクトをスクリプトで スクリプトで利用する 利用する .......................- 9 1.4 検査ポイント 検査ポイント作成 ポイント作成の 作成の Hints & Tips ........................................................................- 13 1.4.1 HTML のテーブル内容やフォーマットのチェック方法.............................- 14 - 1.4.2 さまざまな検証での検査ポイントの活用 ..................................................- 17 1.4.3 テキストがテーブルに含まれるかの検証 .................................................- 21 - 1.4.4 本日日付が表示されることのチェック方法...............................................- 22 1.4.5 ユーザーに応じた値のチェック方法 ........................................................- 22 - 1.4.6 オブジェクトが表示されないことのチェック方法...................................- 25 - 1.4.7 ファイルの内容を検査する ........................................................................- 27 1.4.8 実行時の DB データの検査方法 .................................................................- 27 1.5 特殊キ 27 特殊キーをクリックさせる クリックさせる...................................................................................させる 1.6 オブジェクトの オブジェクトの認識に 認識に関する Hints & Tips .........................................................- 28 1.6.1 RFT が認識しないオブジェクトに対して RFT スクリプトを記録する.....- 28 - 1.6.2 オブジェクト・マップを使用せずにオブジェクトを探す方法..................- 29 - © 2009 IBM Corporation - 1 - Rational Functional Tester 活用ガイド 0.RFT 活用ガイド-テスト拡張 Hints&Tips 編-の位置づけ 当ガイドは、Rational Functional Tester を使用するにあたり、事前に参照して頂くことでより 効果的に製品を活用できるように、特に、テスト記録後の設定方法の Hints & Tips をまとめた資 料です。 特に、これまでに Rational Functional Tester を利用されたユーザーから寄せられたよくある質 問、要望などを一般化してまとめ、多くの RFT 利用者に効果的に製品を活用していただく目的 で作成しています。 ガイド中では RFT 操作のヒントに加え、RFT の基本的な操作手順に補足する形で実施するテ ストについて、テストスクリプトの拡張に関するヒントを記載しています。 本ガイドでは RFT の基本操作については詳細を記載していない場合があります。RFT の基本的 な操作については、RFT のヘルプを参照してください。 RFT の提供する Java API については、RFT ヘルプの「Rational Functional Tester API リファレ ンス」を参照してください。(RFT のヘルプの参照方法は、「1.3 情報源」をご覧くださ い。 なお、当ガイドは、2009 年 6 月時点の最新バージョンである Rational Functional Tester v8.0.0.2 を Windows XP SP2 上で利用するケースを前提として記述しております。 利用する環境やバージョンの差異によって、提供される機能の名称や画面構成に若干の違いがあ る可能性がありますのでご了承ください。 また本資料で掲載するサンプルコードは、RFT v8.0.0.2 の環境にて動作確認しておりますが、 IBM および ISE が動作保証するものではないことをご了承ください。 © 2009 IBM Corporation - 2 - Rational Functional Tester 活用ガイド 1.RFT スクリプト拡張 スクリプト拡張のための 拡張のための Hints & Tips 1.1 データプール変数 データプール変数を スクリプトで利用する 利用する 変数をスクリプトで データプールを利用したスクリプトを作成する場合、記録中に「データ駆動型アクションの挿 入」を実施してアクションの挿入を行います。 ここでは、記録を伴わずにマニュアルでデータプール列の作成とコードの挿入を行う手順を紹介 します。 (1)新規データプール列を作成する 既存のデータプールがスクリプトに関連付けられている場合、それを開きます。データプール が存在しない場合には、スクリプト・エクスプローラー・ビューの「テスト・データプール」を 右クリックし、 「データプールへの関連付け」をクリックして、共用または専用のオブジェクト・ マップと関連付けます。 データプールを開いたら、エディター上で右クリックし「変数の挿入」をクリックして任意の名 前のデータプール列を作成します。 変数を作成したら、エディター上で右クリックし「レコードの挿入」をクリックして、データプ ール行を挿入します。 © 2009 IBM Corporation - 3 - Rational Functional Tester 活用ガイド レコードを挿入し、データプールの値を入力しておきます。(下図は参考例です) 以上で、データプールの作成は完了です。 (2)スクリプト中でデータプール変数を利用する 以下は、データプール変数をスクリプト中で利用するケースの例です。 ・テストログにデータプール変数の値を出力するサンプルコード ・ 入力フィールドに対して、データプール変数の値を入力させるコード setText(dpstring(“データプール列名”); (例) © 2009 IBM Corporation - 4 - Rational Functional Tester 活用ガイド 1.2 データプールを データプールを活用した 活用したシナリオ したシナリオ例 シナリオ例 1.2.1 指定の文字列が含まれる行のラジオボタンをクリックさせる方法 アクセスする度にリストの並び順序が変化する Web 画面で、特定の文字列が含まれる行のラ ジオボタンをクリックさせたい場合、 スクリプトに Java コードを追加することで実現できます。 ここでは、下記のような画面の例にてサンプルコードを作成しています。 (サンプル画面の説明) 下図のような HTML のテーブルがあり、0 列目にラジオボタン、1 列目に名前の一覧が表示され ている画面を例にします。 サンプルコードでは、RFT のデータプールにクリックしたい名前の一覧を用意しておき、 HTML 画面のテーブルから、データプール値(変数名:Name)と一致するセルを探し出して、 同じ行にあるラジオボタンをクリックさせるコードを実装します。 © 2009 IBM Corporation - 5 - Rational Functional Tester 活用ガイド 【コードの例】 public void testMain(Object[] args) { ITestDataTable myTable; myTable = (ITestDataTable)table_htmlTable_0().getTestData("contents"); boolean includeOrderId = false; int includedNum = 0; for (int row=0; row<myTable.getRowCount();++row){ for(int col=0;col<myTable.getColumnCount();++col){ if(myTable.getCell(row, col)!=null){ //データプール列 Name の値とセル row,col の値が一致していた場合、 if 文の内容を実施する if(myTable.getCell(row, col).toString().equals(dpString("Name"))){ includeOrderId = true; includedNum = row; if(includeOrderId){ //ログにテキストの存在する行を表示する logInfo("テキストは" + includedNum + "目に含まれる"); //テーブルの行=row、0 列目のセルオブジェクトを取得し、 それをクリックする TestObject cell = (TestObject)table_htmlTable_0().getSubitem(atCell(atRow(r ow), atColumn(0))); ((GuiTestObject)cell).click(); } } } } } } © 2009 IBM Corporation - 6 - Rational Functional Tester 活用ガイド 1.2.2 指定の文字列が含まれる行のリンクをクリックさせる方法 アクセスする度にリストの並び順序が変化する Web 画面で、特定の文字列が含まれる行にあ るリンクをクリックさせたい場合の対処法を解説します。 ここでは下記のような画面の例にてサンプルコードを作成しています。 (サンプル画面の説明) 下図のような Web アプリの「出席簿」リストに、研修の受講予定者の名前一覧が表示される。 講師は研修実施後に、実際に出席した人の名前の隣にあるリンク「出席」を押して出席管理をす る必要がある。 サンプルコードでは実際に出席した人の名前一覧を RFT のデータプール(変数名:Name) に用意しておき、Web アプリ画面の出席簿から名前のリンクを探し出し、名前の左側にある「出 席」リンクをクリックさせる。 © 2009 IBM Corporation - 7 - Rational Functional Tester 活用ガイド 【コードの例】 public void testMain(Object[] args) { ITestDataTable myTable; myTable =(ITestDataTable)table_htmlTable_0().getTestData("contents"); StatelessGuiSubitemTestObject rawTable = table_htmlTable_0(); String testName = dpString("name"); //データプールに含まれる名前と一致するリンクを取得 TestObject[] nameLinkCellsFor = rawTable.find(atDescendant(".class","Html.A",".text",new new RegularExpression(testName,false false))); false //名前のリンクを含むTR(列)を取得 for (int int i=0; i < nameLinkCellsFor.length ;i++){ TestObject parentTR = findParentTR(nameLinkCellsFor[i]); //TR(列)に含まれる「出席」のリンクを取得 if(parentTR != null){ if null Subitem condition = atDescendant(".class","Html.A",".text","出席"); TestObject[] CLICKlinks = parentTR.find(condition); for(int for int j=0; j < CLICKlinks.length; j++){ TestObject CLICKlink = CLICKlinks[j]; //リンクをクリック if(CLICKlink instanceof GuiTestObject){ if ((GuiTestObject)CLICKlink).click(); } } } } } private TestObject findParentTR(TestObject object){ while (true true){ true if("Html.TR".equals(object.getProperty(".class"))){ if return object; } object = object.getParent(); if (object == null){ null return null; null } } } } © 2009 IBM Corporation - 8 - Rational Functional Tester 活用ガイド 1.2.3 データプール値をフラグとして、分岐処理を行わせる方法 データプールに用意した値の種類によって、スクリプト中で実行させる動作を分岐させたい場 合の記述方法を紹介します。 例として、データプール変数「性別」を用意し、値が「男」だった場合のみ、別のスクリプトを 呼び出すサンプルコードを掲載します。 データプールには「性別」という名前の変数を用意しておきます。 値は「男」または「女」が入力されています。 スクリプト中に if 文を挿入し、分岐条件を記述します。 この例では、 《データプール列「性別」の値が「男」だった場合には、ScriptA を呼び出す》とい う構文を作成します。 【コードの例】 このようなコードを挿入すると、データプール列の値が「男」だった場合には scriptA を呼び出 し、 「女」だった場合には if 文の内容を実施せずに次の処理へと進みます。 1.3 オブジェクト・ オブジェクト・マップ内 マップ内のオブジェクトを オブジェクトをスクリプトで スクリプトで利用する 利用する スクリプト記録時に操作したオブジェクトは自動的にオブジェクト・マップ内に取り込まれま すが、ここでは記録を伴わずにオブジェクト・マップに新規情報を追加する方法を紹介します。 (1)オブジェクトを新規取得する スクリプトに関連づいているオブジェクト・マップを開きます。左端にあるボタン「テスト・オ ブジェクト:オブジェクトの挿入」をクリックします。 © 2009 IBM Corporation - 9 - Rational Functional Tester 活用ガイド ウィザードが表示されたら、「オブジェクトファインダー」をドラッグし、オブジェクト取得対 象のアプリケーションを選択します。 © 2009 IBM Corporation - 10 - Rational Functional Tester 活用ガイド オブジェクト・マップに追加するオブジェクトのオプションを選択し、「完了」をクリックしま す。 オブジェクト・マップ内に、オブジェクトが新規に取得されます。 © 2009 IBM Corporation - 11 - Rational Functional Tester 活用ガイド (2)取得したオブジェクトをスクリプト中で利用する スクリプト中で操作したいオブジェクトをオブジェクト・マップ内から選択し、右クリックメニ ューから「スクリプト xxxxx に追加」をクリックします。 (注:スクリプト名の部分は実際のスクリプトの名前が表示されます) スクリプト・エクスプローラビューを確認すると、上記で追加したオブジェクトが表示されてい ます。 スクリプト・エクスプローラビュー内のオブジェクトを右クリックし「カーソル位置に挿入」を クリックします。 © 2009 IBM Corporation - 12 - Rational Functional Tester 活用ガイド スクリプト中に、挿入したオブジェクトが入力されます。 続いて、このオブジェクトに対して行わせるアクションを追記します。 「オブジェクト名( ) .」の直後にカーソルを合わせ、 「Ctrl」+「Space」をクリックすると、コ ーディング・アシスト機能が利用できます。 (入力可能なアクションの候補のリストが表示されます。ユーザーはこのリストから任意のアク ションを選択しダブルクリックすると、自動的にコマンドが挿入されます) 例えば「click()」を挿入すると、対象オブジェクトをクリックさせることができます。 (スクリプトの例) 1.4 検査ポイント 検査ポイント作成 ポイント作成の 作成の Hints & Tips 検査ポイントはレスポンス画面の中のオブジェクトの文字列やプロパティーが期待通りのも のとなっているのかをチェックするものです。検査ポイントによって、単に画面が問題なく先に 進んでいるか、だけでなく画面の内容までチェックできます。その点を意識して、各テストケー スでチェックすべきものを検査ポイントとしてスクリプトに挿入してください。チェックする対 象は文字列だけでなくオブジェクトの持つプロパティーは全て可能です。例えば、ボタンオブジ © 2009 IBM Corporation - 13 - Rational Functional Tester 活用ガイド ェクトのラベルの文字列だけでなく、アクティブ状態かどうかなどもチェック対象とできます。 基本的には記録時に GUI モニターを利用して検査ポイントを挿入することが出来ますが、こ のような通常の手順では想定している検査ポイントを設定できないケースもあります。 以下、よくある検査ポイント設定のケースや検査方法を紹介します。 1.4.1 HTML のテーブル内容やフォーマットのチェック方法 HTML のアプリケーションがテーブルを使用した構造になっている場合でも、テーブル内のセ ル単位や行単位で検査ポイントを設定することが可能です。また、正規表現を使用することでテ ーブルの内容のフォーマットが期待通りとなっているかの検証を行なうことが出来ます。 1. HTML テーブル内容を検査ポイントに設定する方法 検査ポイントの対象(赤枠)にテーブル全体を選択します。 チェック対象が文字列であれば「データ検査ポイントの実行」を選択します。 「テーブル内容」を選択し、次に進みます。 (検査ポイント名は任意) 「テーブル内容」はヘッダー項目を含まない、テーブルに含まれる全てのデータ を検査します。(「テーブルの内容を表示」では、テーブルに含まれるデータのう ち Visible Property が True のデータのみ検査します) 「データ・グリッド」は、テーブルのヘッダー項目とテーブル内の内容を検査し ます。(「データ・グリッドの内容を表示」では、データグリッドに含まれるデー タのうち Visible Property が True のデータのみ検査します) © 2009 IBM Corporation - 14 - Rational Functional Tester 活用ガイド 「可視テキスト」にするとすべてのテキストが対象になります。 右上のリストから対象範囲を選択します。 (横1列は”行選択”、縦 1 列は”列選択”、セル一つは”セル選択”) ここでは”セル選択”として 2 つのセルを検査することにします。 対象を選択して「比較領域の更新」ボタンをクリックします。 2 つのセルを選択 ボタンクリック後、選択されたセルの背景がグレーになり、未選択領域の背景は白になります。 2 つのセルがグレーになり、 選択が有効になっている状態 © 2009 IBM Corporation - 15 - Rational Functional Tester 活用ガイド また、検査ポイントの期待値をデータプールから取り出したい場合は以下の操作を行います。 セルをダブルクリックしてセルの詳細情報画面を出します(各プロパティーを表示) 。データプ ールで置換したい期待値(ここでは data プロパティー)を右クリックして 「データプール参照への値の変換」をクリックします。 2.期待値を正規表現にしてパターンマッチングさせる方法 検査ポイント画面で正規表現に変換したい期待値部分を右クリックし、 「正規表現への値の変換」 をクリックします 期待値に「xy」の正規表現マークが現れるのを確認し、フィールド内を正規表現の記述に書き換 えます。 © 2009 IBM Corporation - 16 - Rational Functional Tester 活用ガイド 正規表現の記述チェックを行う機能を使用する場合は、右クリックメニューから「正規表現の評 価」をクリックします。 正規表現の詳細は、 「RFT 活用ガイド-テスト記録 Hints&Tips 編- 1.3.1 正規表現の活用」 の項目をご覧ください。 1.4.2 さまざまな検証での検査ポイントの活用 画面内のデータやプロパティが想定どおりになっているかを検証するには、検査ポイントを使 用します。 (アプリケーションの操作を再現するのみであれば、検査ポイントは使用しません。 ) 例えば、以下のようなテストシナリオを作成した場合、「予想結果」に記述された内容を確認す るためには検査ポイントを追加します。 1) テスト手順 「XX管理メニュー」画面で「XX情報登録」ボタンを押下する。 1) 2) 「XX情報登録」画面で「更新」ボタンを押下する。 2) 予想結果 「XX情報登録」画面が表示される。 「XX管理メニュー」画面が表示される。 AAAテーブルにデータが更新されている。 検査ポイントでは、様々な画面上のオブジェクトのデータやプロパティをチェックすることがで きますが、検査項目が細かすぎると検査ポイントを追加する作業自体の負担が大きくなりすぎる こともあります。そのため、本当に必要な検査ポイントを見極めることが重要です。 例えば、 「XXX 画面が表示される」ことを確認したい場合、画面の項目全てを検査するのではな く、画面遷移が行なわれたことのみを確認し、必要に応じて画面内の部品(テキストボックスの 初期値やボタンの状態など)の検査を追加することを推奨します。 以下に、一般的な照会処理、更新処理の「予想結果」を効率よく検証するための確認方法と、 RFT による実装方法のサンプルを記載します。 © 2009 IBM Corporation - 17 - Rational Functional Tester 活用ガイド 1. 照会処理 No 予想結果 確認方法案 RFT での実装例 1 XXX 画面が表示される 遷移の確認のみを行なう 画面内の一番外枠(Html.document) こと。 に対し、検査ポイントを設定。アク (「XXX 画面に戻るこ ションの選択で「選択されたテスト と。 」も同義) オブジェクトを待機します」を選択 する。 2 テーブルの列が表示さ 表示されるべきテーブル 画面を表示し、列が表示されていな れないこと。 の列をチェックする い状態のテーブルを検査ポイント の期待値に設定する。 3 特定のデータが表示さ テスト前にデータのリセ データリセット後に画面を表示し、 れること。 ットを行い、表示される 検査ポイントに設定する べきデータを決めてお き、そのデータが表示さ れることを確認する 4 XXX 画面が表示されな 表示されるべき画面を決 いこと。 めておき、その画面が表 示されることを確認する (または画面が変わらな いことを確認) 5 X ボタンが表示されな ボタンが表示されないこ 「3.4.6_オブジェクトが表示 いこと。 とを確認する されないことのチェック方法.」参 照 6 X ボタンが表示される ボタンが表示され、押せ ボタンにプロパティの検査ポイン こと。 るようになっていること トを設定し、「disabled」のプロパ を確認する。 ティをチェックする(HTML のボタ ンの場合) © 2009 IBM Corporation - 18 - Rational Functional Tester 活用ガイド 2. 更新処理 No 予想結果 確認方法案 RFT での実装例 1 入力チェック 未入力またはエラーとな 入力操作を記録し、エラーメッセー ・ 未入力でエラーと る値を入力して Submit ボ ジにデータの検証ポイントを設定 タンを押下し、エラーメッ する。 セージが表示されること 同じ画面遷移であれば、入力文字列 を確認する とエラーメッセージの対応をデー なること。 ・ 入力可能な値以外 でエラーとなるこ と 2 タプールに設定する。 リストから「XXX」or リストに表示される項目 リストにプロパティの検査ポイン 「YYY」のいずれかが を確認する。 トを設定する。 選択できること リストから 1 つしか選択 できないことを確認する。 3 当日がデフォルト表示 表示内容とシステム日付 「3.4.4 になっていること を比較する。 法」参照 本日日付チェック方 考慮点:プログラミングが必要なの で作業の負荷がやや大きい 4 入力された内容がすべ 入力画面のフォーム内の デフォルト値が表示された状態の てリセットされるこ 内容がデフォルトの状態 画面を検査ポイントに設定する と。 に戻っていることを確認 する。 5 (前画面で)入力した 前画面での入力内容と画 内容どおりに表示され 面表示の内容を比較する。 ストを挿入し、データプールに値を ていること 前画面の入力欄にデータ駆動型テ 格納する。さらに、確認画面のテー ブルには検査ポイントを設定し、期 待値をデータプールから取得する。 (入力パターンが一つの場合は固 定でよい) 6 登録した内容が DB に 方法① 更新されること。 DB 内容の確認は目視で行 なし なう。 7 8 登録した内容が一覧に © 2009 IBM Corporation 方法② プログラミングで DB にアクセスし DB 内容の確認はプログラ テーブルの内容を確認する。 ムで DB にアクセスして 考慮点:プログラミングが必要なの 確認する。 で作業の負荷が大きい 方法① テーブルに検査ポイントを設定し、 - 19 - Rational Functional Tester 活用ガイド 含まれていること テスト前にデータのリセ 期待値の値はデータプールから取 ットを行い、表示される場 得する 所を固定して、そこに入力 (入力パターンが一つの場合は固 したデータが表示される 定でよい) ことを確認する 9 方法② テーブルの列の値をプログラミン 一覧内のユニークな値が グで取得して、入力に使用したデー 格納される列(注文 ID な タプール内の値と比較する ど)に新規追加した値が含 考慮点:プログラミングが必要なの まれるかを確認する。 で作業の負荷がかなり大きい( 「3. 4.3 テキストがテーブルに含ま れるかの検証サンプルコード」参 照) 10 エクスプローラーの画 エクスプローラーの「ファ 操作を行い、更新画面のファイル名 面が表示され、ファイ イル名」欄にファイルパス 表示エリアに検査ポイントを設定 ルが添付できること。 +ファイル名を入力し「開 する。期待値はデータプールから取 く」ボタンを押下すると、 得する。 更新画面に表示されるこ (入力パターンが一つの場合は固 とを確認。 定でよい) (エクスプローラーのツ リーから選択できること の確認は、エクスプローラ ーの機能の検証も含むの で行なわない) © 2009 IBM Corporation - 20 - Rational Functional Tester 活用ガイド 1.4.3 テキストがテーブルに含まれるかの検証 例えば、登録画面で入力した内容が一覧画面に追加されるかを確認する場合など、テーブル内の 全体もしくは決まった位置にある値をチェックするのではなく、テーブル内の任意の位置に特定 の値が含まれるかどうかの確認を行ないたい場合もあります。その場合は、プログラミングでテ ーブル内の情報をチェックすることが可能です。 例)AAALoanTable オブジェクトに”C0001”という文字列が含まれるかどうかを検証する場合 ※以下のコードは基本的な検証の流れを示したものですので、例外処理等のロジックは含まれて おりません。実際の検証では状況に合わせてカスタマイズしてください。 ITestDataTable dataTable = (ITestDataTable) AAALoanTable.getTestData("contents"); boolean includeOrderId = false; int includedNum = 0; for (int row=0; row < dataTable.getRowCount();++row){ // 全てのセルをループする for (int col=0; col < dataTable.getColumnCount();++col){ // (row,col) のセルの内容をチェックする if(dataTable.getCell(row,col)!=null){ if(dataTable.getCell(row,col).toString().equals(“C0001”)){ includeOrderId = true; includedNum = row; } } } } if ( includeOrderId ) { logTestResult("テキストがテーブル一覧に含まれるかの検証結果",includeOrderId," C0001は "+includedNum+"行目に含まれる"); } © 2009 IBM Corporation - 21 - Rational Functional Tester 活用ガイド 1.4.4 本日日付が表示されることのチェック方法 検査ポイントの期待値は固定値、正規表現、データプールから取得した値を設定できますが、 場合によっては、本日日付を設定したいケースもあります。その場合は、Java の標準 API で日 付を取得し、自作した検査ポイント内でチェックします。 (例) import java.util.*; import java.text.*; //標準 API から日付を取得 Calendar cal = Calendar.getInstance(); //フォーマットを指定 SimpleDateFormat format = new SimpleDateFormat("MM 月 dd 日 E 曜日"); //検査ポイントを作成します IFtVerificationPoint a = vpManual("manualVP",format.format(cal.getTime()),本日日付 ().getProperty(".text")); //作成した検査ポイントを実行します a.performTest(); vpManual()の引数は、検査ポイント名(任意)、期待値、比較対象です。 期待値には実行時にシステムから取得した本日日付を指定します。 比較対象には画面内の日付が表示されるオブジェクトを指定します。スクリプトエクスプローラ 内でオブジェクト名を発見し、getProperty()でプロパティ名を指定することで実行時の値を取得 できます。プロパティ名はスクリプトエクスプローラ内の該当オブジェクトをダブルクリックす るとプロパティとその値の一覧が出ますので、そちらで確認できます。 API の詳細はヘルプの API リファレンスをご参照ください。 1.4.5 ユーザーに応じた値のチェック方法 アプリケーションによっては、ユーザーごとに異なる画面を表示するものもあります。その場 合、ユーザーID と画面のデータやプロパティの組み合わせを用意しておくと、同じスクリプト にデータを差し替えて実施するデータ駆動型テストで効率よく実施することが出来ます。その手 順は以下の通りです。 © 2009 IBM Corporation - 22 - Rational Functional Tester 活用ガイド 1. ユーザーID、パスワード、プロパティの期待値(例,ボタンの状態)を格納するデータプー ルを作成する 例)データプール:LoginUserID userID:String password:String hyoji_disabled:boolean 001 001001 false(ボタンがアクティブ) 002 002002 true(ボタンがアクティブでない) 003 003003 true(ボタンがアクティブでない) 2.ログインのスクリプト、画面表示を確認するスクリプトを作成する (ログインは他のスクリプトでも使用するので、独立したスクリプトにしておく) 2-1.スクリプト作成時に、1で作成したデータプールを使用するように設定する。 スクリプト記録時に最初の画面で「次へ」を押下 2-2.ログインのスクリプトでは、ユーザーID、パスワードはデータプールから取得する。 例)ログインスクリプト nameCombo().click(atText(dpString("userID"))); memberLogon().inputChars(dpString("password")); © 2009 IBM Corporation - 23 - Rational Functional Tester 活用ガイド 2-3.画面表示を確認するスクリプトでは、ボタンに検証ポイントを設定し、プロパテ ィーの検証ポイントで「.disabled」の期待値をデータプールから取得する。 手順: (1) ボタンに検証ポイントを設定する (2) 「プロパティー検査ポイントの実行」を選択 (3) プロパティーの一覧から「.disabled」を探し、値のセルで右クリックし、「データプー ル参照への値の変換」を選択 (4) データプール内のボタンのステータスを格納した変数を選択(例、hyoji_disabled) 3.2つのスクリプトをまとめて実行するスクリプトを作成 3-1.callScript()を使用して、順番に実行したいスクリプトを呼び出す。 例)all1 スクリプト callScript("Login"); callScript("Order"); 3-2.all1 スクリプトにも1で作成したデータプール(例、LoginUserID)を関連付ける © 2009 IBM Corporation - 24 - Rational Functional Tester 活用ガイド 4.さらに3で作成したスクリプトを呼び出すスクリプトを作成する callScript にデータプールの全ての行を実行する引数をつけて呼び出す。 例)all2 スクリプト callScript("all1", DEFAULT_ARGS, DP_ALL); 1.4.6 オブジェクトが表示されないことのチェック方法 検査ポイントでは画面内に表示されたオブジェクトのデータやプロパティをチェックします が、アプリケーションによってはログインしたユーザーの権限に応じて特定の部品が「表示され ないこと」を確認したい場合もあります。その場合は、検査ポイント無しのスクリプトを記録し、 後から検査ポイントを手動で追加し、コーディングすることで実現できます。 検査ポイントを追加するには、まず対象のオブジェクトが存在している画面までアプリケーショ ンを進めておきます。 スクリプト内で検査ポイントを追加したい場所にカーソルを合わせ、スクリプトエクスプローラ 内の検査ポイントを右クリックして「検査ポイントの挿入」をクリックします。 オブジェクトファインダーでアプリケーション内の該当オブジェクトを選択し、データ検査ポイ ントとしておきます。(実行時にはこのオブジェクトは見つからないのでチェック内容は何でも よいです) スクリプト中に検査ポイントのコードを追加したら、その周囲を try~catch で囲み以下のように 編集します。 try{ 追加した 追加した検査 した検査ポイント 検査ポイント logTestResult("オブジェクト オブジェクト非存在 オブジェクト非存在チェック 非存在チェック",false); チェック }catch(ObjectNotFoundException e){ logTestResult("オブジェクト オブジェクト非存在 オブジェクト非存在チェック 非存在チェック",true); チェック } © 2009 IBM Corporation - 25 - Rational Functional Tester 活用ガイド logTestResult はレポート出力するメソッドで、引数はレポート内の見出し、成功か不成功か(成 功と出力したい場合は true)です。 実行時に該当オブジェクトが存在しなければ、try 内で ObjectNotFoundException が 発生します。その場合は期待通りですので非存在チェックに成功したことをレポート 出力します。出力内容は以下のようになります。 © 2009 IBM Corporation - 26 - Rational Functional Tester 活用ガイド 1.4.7 ファイルの内容を検査する ワードパッドやノートパッドなど、Win32 コントロールを持つ Windows アプリケーションの exe ファイルをあらかじめ一つの GUI アプリケーションとして RFT に登録しておき、それらの アプリケーションを RFT から起動し、所定のファイルを開いて、中の文字列全体を検査するこ とが可能です。この時、ファイル名は記録時と同様にしておく必要があります。(コーディング により対応することは可能です。)csv ファイルなども同様にエディタで開いて、文字列全体と して検査をすることはできます。ただし、Microsoft Office 製品(Word や Excel など)は RFT がサポートしていないため、CSV ファイルを Excel で開いてテストを行うことなどはできませ ん。 1.4.8 実行時の DB データの検査方法 RFT はクライアント側の GUI アプリケーションに対してユーザーが画面に対して行う操作を 実行したり、GUI 上に返ってきた内容が正しいものかどうかを検査したりします。基本機能で サーバー側の状況を把握したり、検査したりすることはできません。 ただし、DB がリモートから接続可能なクライアント GUI アプリケーションを提供している場 合は (DB2 ではコントロールセンターなど)、 そのアプリケーションを RFT に登録しておき、 「DB アクセスアプリケーションを起動して検査対象データを照会する」というユーザー操作を別のス クリプトとして記録することができます。この時、GUI 上に表示される照会結果に対して検査 ポイントを設定することで DB 内のデータを検査することができます。 1.5 特殊キー 特殊キーを クリックさせる キーをクリックさせる アプリケーション上でキー入力をするシナリオを RFT で記録した場合、下記のようなスクリ プトが生成されます。 (例) オブジェクトに対して文字列「abcde fgh」と入力した場合のスクリプト オブジェクト().inputChars(“abcde fgh”); 通常のキーを入力する場合は「inputChars()」メソッドが使用されますが、特殊キーを入力す る場合には「inputKeys()」メソッドが使用されます。特殊キーは、F5 のようなファンクション キーや、SHIFT、TAB、Backspace などがあります。 例えば TAB キーをクリックした場合、下記のようなスクリプトが生成されます。 (例) オブジェクトに対して「TAB」キーをクリックした場合のスクリプト オブジェクト().inputKeys(“{TAB}”); © 2009 IBM Corporation - 27 - Rational Functional Tester 活用ガイド 特殊キーを含む幾つかのキーを同時に押下する場合(Ctrl キーを押しながら s を押下、など) のスクリプト表記は以下のとおりです。 ・「+」 :Shift キーを押しながら入力 (例) 「+s」→大文字の S が入力される ・「^」 :Ctrl キーを押しながら入力 (例) 「^s」→Ctrl キーを押しながら S を押下 (例) 「%{F4}」→Alt キーを押しながら F4 を押下 ・「%」 :Alt キーを押しながら入力 1.6 オブジェクトの オブジェクトの認識に 認識に関する Hints & Tips 1.6.1 RFT が認識しないオブジェクトに対して RFT スクリプトを記録する RFT がサポートするアプリケーション(HTML、Java アプリケーション、など)においては、 個々のオブジェクトを認識して操作することが出来ます。サポート外のアプリケーションは RFT が個々のオブジェクトを認識しませんが、通常 Window オブジェクトに対する操作は可能 です。Window に対してキー操作を実施したい場合には「IWindow」クラスを利用し、アクティ ブウィンドウに対してキー操作を実行することが可能です。 © 2009 IBM Corporation - 28 - Rational Functional Tester 活用ガイド 例えば、以下のようなコードで、Window にキー入力を行うことが出来ます。 //アクティブな画面を取得します IWindow activeWindow = getCcreen().getActiveWindow(); //アクティブな画面に対してキー入力を行います activeWindow.inputChars(“abcde”); //入力内容を保存するため、 「Ctrl+s」キーを入力させます activeWindow.inputKeys(“^s”); また下記のスクリプトにて、アクティブな画面の画面タイトルを取得することが出来ます。 これを活用し、アクティブ画面が、操作対象のアプリケーションかどうかを画面タイトルから判 断することが出来ます。 //アクティブな画面を取得します IWindow activeWindow = getScreen().getActiveWindow(); //画面のタイトルを取得します String title = activeWindow.getText(); 1.6.2 オブジェクト・マップを使用せずにオブジェクトを探す方法 RFT は、オブジェクト・マップにてテスト対象アプリケーションのオブジェクト情報を一元 管理し、この情報を基にして実際のアプリケーションを認識・操作します。 ここでは API を利用し、オブジェクト・マップ内に情報のないオブジェクトを操作する例を 掲載します。(find メソッドを利用し、オブジェクト・マップを経由せずにオブジェクトをコン トロールします) © 2009 IBM Corporation - 29 - Rational Functional Tester 活用ガイド (例)「OK」という名前のボタンをクリックするスクリプト //ボタンオブジェクトを取得します TestObject[] objects =find(atProperty(“.class”,”Html.INPUT.button”)); //.value が「OK」であるボタンを探し、クリックします for( int i = 0; i < objects.length; i++){ TestObject button = objects[i]; String value = button.getProperty(“.value”); if(“OK”.equals(value)){ ((GuiTestObject)button).click(); return; } } © 2009 IBM Corporation - 30 -