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 コマンドラインから コマンドラインから RFT スクリプトを スクリプトを実行させる 実行させる ...............................................- 3 1.1.1 コマンドライン実行方法..............................................................................- 3 1.1.2 スケジューラを活用したスケジュール実行.................................................- 3 1.2 複数スクリプト 5複数スクリプト実行時 スクリプト実行時に 実行時にエラーで エラーで止まらないようにする......................................まらないようにする 1.3 対話モード 対話モードの モードの変更 ...................................................................................................- 6 1.4 再生がうまく 再生がうまく行 がうまく行かない場合 かない場合の 場合の対処法 ......................................................................- 9 1.4.1 実行時にオブジェクトがクリックできない場合はスクリプトを確認する..- 9 1.4.2 アプリケーション側の環境がリセットされているかどうか確認する .........- 9 2.RFT テストログ活用 テストログ活用のための 活用のための Hints & Tips....................................................................- 10 2.1 画面ショット 画面ショットを ショットをログに ログに含める ...............................................................................- 10 2.1.1 任意の場所で画面ショットを取得する ......................................................- 10 2.1.2 スクロールが必要な縦長の画面を取得する...............................................- 13 2.2 ログの ログの名前を 名前を重複しないようにする 重複しないようにする ....................................................................- 13 - © 2009 IBM Corporation - 1 - Rational Functional Tester 活用ガイド 0.Rational Functional Tester 活用ガイド の位置づけ 活用ガイド-テスター ガイド テスター編 テスター編-の 位置づけ 当ガイドは、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 コマンドラインから コマンドラインから RFT スクリプトを スクリプトを実行させる 実行させる 1.1.1 コマンドライン実行方法 RFT ワークベンチを起動せずに、コマンドラインから RFT スクリプトを実行させる方法です。 ここの例では、ワークスペースのロケーションは下記となっています。 C:¥Documents and Settings¥iseadmin¥IBM¥rationalsdp¥workspace 既にワークスペースに RFT のプロジェクト「RFTprj」があり、既存のスクリプト「scriptB」を コマンドラインから実行します。 RFT スクリプトを実行するコマンドは下記のとおりです。 java -classpath <rational_ft.jar のフルパス> com.rational.test.ft.rational_ft -datastore <プロジェクトロケーションのフルパス> -log <ログの名前> -rt.log_format “html” –rt.bring_up_logviewer false -playback <スクリプト名> 下記は、プロジェクト内のスクリプト「scriptB」を実行させる場合のコマンド例です。 "C:¥Program Files¥IBM¥SDP¥jdk¥bin¥java" -classpath"C:¥Program Files¥IBM¥SDP¥FunctionalTester¥bin¥rational_ft.jar" com.rational.test.ft.rational_ft -datastore "C:¥Documents and Settings¥iseadmin¥IBM¥rationalsdp¥workspace¥RFTprj" -log scriptB -rt.log_format "html" -rt.bring_up_logviewer false -playback scriptB ※-rt.log_format “html”・・・ログの形式を html に指定するオプションです。 ※-rt.brint_up_logviewer false ・・・スクリプト実行後にログファイルを開かないように指定す るオプションです。 1.1.2 スケジューラを活用したスケジュール実行 Windows の場合、 「タスク」機能を活用して、RFT スクリプトの実行をスケジューリングする ことが出来ます。 まず、1.1.1「コマンドライン実行方法」にあるコマンドを利用してバッチファイルを作 成する必要があります。 その後、すべてのプログラムから「アクセサリー」>「システムツール」>「タスク」をクリ ックして「スケジュールしたタスクの追加」をダブルクリックします。 © 2009 IBM Corporation - 3 - Rational Functional Tester 活用ガイド タスクウィザードが起動したら「次へ」をクリックします。 実行するバッチファイルを選択し、タスクを実行するタイミングを指定します。 © 2009 IBM Corporation - 4 - Rational Functional Tester 活用ガイド コンピューターにログオンでき、バッチファイルを実行可能なユーザーのユーザー名、パスワー ドを入力し、「次へ」をクリックします。 内容を確認し、 「完了」ボタンをクリックして、ウィザードによる設定画面を終了します。この タスクの設定によって、バッチファイルがスケジュール実行されることにより、任意の RFT の スクリプトを指定した時刻に自動実行させることが出来ます。 1.2 複数スクリプト 複数スクリプト実行時 エラーで止まらないようにする スクリプト実行時に 実行時にエラーで RFT の基本機能では、エラー終了時(次にアクションを起こすべきオブジェクトが存在しない 場合など)は例外を発生してスクリプトが終了されます(検査ポイントが失敗の場合では止まり ません)。しかし、データ駆動型テストでスクリプトを反復させたり、複数のスクリプトをまと めて自動実行したりする際には、途中でエラーが発生しても、スクリプトを停止せずに最後まで 実行させたいケースがあります。 そのような場合は、スクリプト中で以下のコーディングをすることで、「例外を発生した場合は 終了するのではなく、その時の画面ショットをレポートに残して、次のスクリプトを実行する」 ようになります。やり方は、記録した一連のシナリオをtry-catch構文で囲むだけでよく、catch 構文中に例外発生時の対応処理を記述することもできます。 try{ RFT で記録した 記録したシナリオ したシナリオ } catch (Exception e){ //必要に応じて、例外処理を記述 } © 2009 IBM Corporation - 5 - Rational Functional Tester 活用ガイド 例えば、画面が予定通り遷移しなかった場合など、次の遷移した画面で行なうはずだった処理 が行えなくなりエラーが発生します。 エラーが発生すると通常はスクリプトが強制終了しますが(※対話モードがオフの場合) 、あ らかじめ try~catch 構文を記述しておくことで、例外をキャッチしてもスクリプトを停止せずに、 続きの処理を続行します。データ駆動型テストの場合、現在のデータプール行のデータによるテ ストは例外が発生した時点で終了となり、次のデータプール行のデータを使ったテストがスクリ プトの先頭から始まります。 途中で例外が発生した場合には、アプリケーションが初期状態に戻っていない可能性がありま す。例えば、スクリプトの先頭で startApp コマンドを使ってアプリを起動し、スクリプトの最 後にブラウザを閉じる処理を実装している場合、スクリプトの途中で例外が発生してスクリプト の先頭に戻ってしまうと、アプリケーションが画面上に残ったままの状態となっている可能性が あります。このような事態が想定される場合は、catch ブロック内にエラー発生時に必要な措置 (例. 「アプリの画面をクローズする」 )といったコードを記録しておくことで、例外が発生した 時点でアプリケーションを初期状態に戻すことが出来ます。途中でアプリを一旦終了させること ができます。 (例)もし画面上にブラウザが存在していた場合にはそれを閉じるサンプルコード public void testMain(Object[] args) { try { startApp("○○○"); … … } catch (Exception e) { if (browser_htmlBrowser(document_ XXXX (),MAY_EXIT).exists()) { browser_htmlBrowser(document_XXXX(),MAY_EXIT).close(); } } } 1.3 対話モード 対話モードの モードの変更 RFT スクリプト実行時のウィザード「再生オプションの指定」にて、 「対話モード」のオン、 オフを指定することが出来ます。デフォルトはオンになっています。対話モードがオンになって いると、実行中のスクリプトで例外が発生した際にスクリプトが強制終了せず、その後のアクシ ョンをユーザーが GUI で指定出来ます。 © 2009 IBM Corporation - 6 - Rational Functional Tester 活用ガイド 対話モードで 実行されます © 2009 IBM Corporation - 7 - Rational Functional Tester 活用ガイド スクリプトを作成するフェーズや、アプリ変更後にスクリプトを確認する際には、この対話モー ドでテストを実施されることをお勧めします。 逆に、夜間など無人の状態で運用実施される際には、対話モードはオフにしておきます。 (無人で実行させる際の例外ハンドリングは、try~catch 構文などを使用して、スクリプト側で 実施させるようにします) 【対話モード】 対話モードでスクリプトを実行すると、オブジェクトが見つからないなど例外発生時に下図のよ うなダイアログが表示されます。 RFT の機能を使って、問題の修正を試行することができます。 ● アプリケーションの アプリケーションの開始 登録済みのアプリケーションをここから起動できます ● 環境を 環境を使用可能にする 使用可能にする ブラウザや Java 環境などの設定を実施できます ● オブジェクトの オブジェクトの検索 起動中のアプリケーションから、対象のオブジェクトを探してポイン トします ● オブジェクトマップエディターの オブジェクトマップエディターの表示 オブジェクトマップを開き、確認・修正ができます 例外が発生した行を再度実行します 例外が発生した行をスキップして後続のスクリプトを実行します このスクリプト実行を停止します ダイアログが表示されている間は、スクリプトの実行が一時停止しています。テスト対象の環境 が整っていないなどの理由でスクリプトが停止している場合は、「アプリケーションの開始」や 「環境を使用可能にする」のメニューを使用して、テストが実行できる状態にしてから「操作の 再試行」を実施します。 アプリケーションの変更などが原因で目的のオブジェクトが見つからない場合には、 「オブジェ © 2009 IBM Corporation - 8 - Rational Functional Tester 活用ガイド クトの検索」を実施して目的のオブジェクトを手動でポイントし、 「操作の再試行」を実施しま す。対象オブジェクトがアプリケーション上から存在しなくなっているなど、このスクリプト行 を実行する必要がない場合には「操作のスキップ」を実行して先のスクリプト実行へ進ませます。 いずれの操作も例外を回避するための機能であり、この操作によってテストスクリプトの内容は 更新されていないことにご注意ください。 1.4 再生がうまく 再生がうまく行 かない場合の がうまく行かない場合 場合の対処法 1.4.1 実行時にオブジェクトがクリックできない場合はスクリプトを確認する ラジオボタンが並ぶアンケート画面などを記録する際、早く作業を終えようと一つのラジオボ タンをクリックしてすぐにその下のラジオボタンにマウスを動かそうとすることがあります。 RFT で操作を記録する際に、クリックしながらマウスが動いていた場合にはクリックではなく ドラッグと判断します。したがって、自動生成されるメソッドも click()ではなく drag(座標パラ メータ)となってしまいます。ですので、実行時にクリックが成功したり失敗したりと不安定な 場合にはスクリプトを確認し、drag()を click()に編集することで安定させることができます。 (例) (修正前) radioButton__1010402043().drag(atPoint(10,5),atPoint(10,10)); (修正後) radioButton__1010402053().click(); 1.4.2 アプリケーション側の環境がリセットされているかどうか確認する スクリプトの再生を開始する時には、スクリプトの記録を開始した時と同じ状態にリセットして おく必要があります。 ・ スクリプトに「アプリケーションの起動」が挿入されている場合は、画面上に何もアプリケ ーションが起動していない状態にしておく(テストに関係のない、余計なアプリケーション も終了しておきます)。アプリケーションをあらかじめ起動してからテストの記録を開始し た場合は、開始点のページを起動しておきます。 ・ データベースの入力を伴うアプリケーションでは、スクリプトの記録時に追加したデータを 削除します。スクリプトの記録時にデータベースにユニークなデータを挿入した場合、その データを残したままスクリプト再生すると、同じデータを追加しようとして、キー重複エラ ーが発生します。 ・ スクリプト終了時に画面の状態が変更される場合があります。そのため、スクリプトの記録 開始時に開いていた、すべての画面を元の状態に戻す必要があります。 ・ その他、入出力外部ファイルが存在する場合、入力に使用するファイルは準備し、出力され たファイルは削除しておきます。 © 2009 IBM Corporation - 9 - Rational Functional Tester 活用ガイド 2.RFT テストログ活用 テストログ活用のための 活用のための Hints & Tips 2.1 画面ショット 画面ショットを ショットをログに ログに含める 2.1.1 任意の場所で画面ショットを取得する RFTの基本機能では、エラー終了時(操作するオブジェクトが存在しない場合など)のみ、デ フォルト設定で画面ショットを取得しレポート内に表示しますが、正常にテストが実行されてい る時には画面ショットを残しません。任意の箇所で画面ショットを取得したい場合は、以下の1 行を追記することで実現できます。logInfoメソッドの第1引数にはレポート上に表示されるラ ベル文字列を指定できます。 logInfo("表示させるメッセージ", getRootTestObject().getScreenSnapshot()); 上記のコードは、画面全体のスクリーンショットを取得します。特定ウィンドウのみの画面キ ャプチャーを取得したい場合は、以下の手順でコードを挿入することによって実現できます。 (画 像は.jpg ファイルとしてログフォルダに保存されます。) サンプルアプリケーション“ClassicsCD”を元に手順を説明します。 ① 記録中、対象のウィンドウが表示されたら対象ウィンドウ上部をクリックします。 対象 ウィンドウ 上部 をクリックする クリックする。 する。 このコードをスクリプトのどこに追加するかを判断するためにスクリプトコード記録中、画面 ショットを取得したいタイミングで「スクリプト・サポート・コマンドの挿入」ボタンより、コ メントを挿入しておきます。こうすると、コード生成後にコメントをカスタマイズコードに置換 するだけで適切なタイミングで画面ショットを取得できます。 © 2009 IBM Corporation - 10 - Rational Functional Tester 活用ガイド ② 記録終了後、スクリプトから対象ウィンドウの上部をクリックした操作のコードを見つけま す。 ③ ②のコードの後に対象ウィンドウの画面キャプチャを取得するコード(以下参照)を手入力 します。 logInfo("ログ ログに ログに表示する 表示するコメント するコメント", コメント 対象ウィンドウ 対象ウィンドウの ウィンドウのオブジェクト.getScreenSnapshot()); オブジェクト ・1番目の引数で記入した"ログ ログに 表示するコメント ログに表示する するコメント"は、取得した画像と一緒にログに記載され コメント ます。必要に応じてコメントを記入してください。 ・2番目の引数の対象 対象ウィンドウ オブジェクト 対象ウィンドウの ウィンドウのオブジェクトは、例では手順①、②で記録されたオブジェ クトに該当します。最後に.getScreenSnapshot()と入力します。 (例) © 2009 IBM Corporation - 11 - Rational Functional Tester 活用ガイド logInfo("ClassicsCD 画面の 画面のスクリーンショット", スクリーンショット classicsJava().getScreenSnapshot()); ④ スクリプトを再生します。 → テストログに画面キャプチャーが表示されていることを確 認します。 ※ 画面がロード中で完全に表示されていなかった場合は、スクリプトに遅延 (waitForExistence または sleep)を挿入するなどして、画面が完全に表示されるまで待機させ るようにしてください。 © 2009 IBM Corporation - 12 - Rational Functional Tester 活用ガイド 2.1.2 スクロールが必要な縦長の画面を取得する 2.1.1の手順にて任意の箇所で画面キャプチャーを取得することができますが、画面が縦 長な場合など一度に画面上に表示しきれないケースでは、画面に表示されている部分のみがキャ プチャーされます。 もしページのすべてを画像として取得したい場合は別途対応が必要です。 以下、代表的な対応策を紹介します。 (1)PgDn ボタンを併用し、複数枚のスクリーンショットを取得する 画面の最上部のスクリーンショットを取得した後、 「PgDn」ボタンをクリックし、画面をスクロ ールダウンさせます。この状態で再度、スクリーンショットを取得します。 以下、画面の最下部に到達するまで同様の操作を繰り返し、画面を分割してスクリーンショット を取得します。 (2)画像取得ツールを併用する 縦長の画面を取得可能なキャプチャーソフトを併用する方法です。 任意のキャプチャーソフトで画面を取得する操作を RFT で記録して、画面をキャプチャーする ことができます。 (3)画面の HTML ファイルを保管する 画面ショットとして画像を取得するのではなく、画面の HTML そのものをエビデンスとしてロ ーカルに保管する方法です。 例えば Internet Explorer で画面にアクセスしている場合であれば、メニューバーより「ファイル」 >「名前を付けて保存」をクリックし、任意のロケーションに HTML を保管することができま す。この操作を RFT で自動化させる方法です。 2.2 ログの ログの名前を 名前を重複しないようにする 重複しないようにする RFT スクリプトを再生する際にログの名前を指定することが出来ますが、スクリプトを 2 回目 以降に実行する際に前回と同じログ名を利用すると、既存のログが上書きされてしまいます。過 去のログをきちんと残したい場合には、毎回ユニークなログ名を指定する必要があります。 一般的に管理しやすい手段として、デフォルトの入力値であるスクリプト名に加えて、タイムス タンプを追記しておく方法があります。 タイムスタンプは将来的に文字列が重複する可能性がないので、ユニーク性を確保することがで きます。また日付を頼りに過去のログを探すことが出来るので便利です。 例えば、scriptB を実行する場合であれば、 「scriptB_20090617」などのようにログ名を付けます。 © 2009 IBM Corporation - 13 - Rational Functional Tester 活用ガイド 同じ日に何度もスクリプトを実行する可能性のある運用の場合は、年月日だけでなく「時・分」 も付けるとよいでしょう。 (「scriptB_20090617_1143」など) 上記の手順を自動化するために、バッチ処理を活用して、コマンドで取得したシステム時間をそ のままログにつける運用方法も可能です。 下記はバッチファイルの一例です。 @echo off rem システムの日付データを取得 set yyyymmdd=%DATE:/=% rem コマンドラインからスクリプト「scriptB」を実行 “C:¥Program Files¥IBM¥SDP¥jdk¥bin¥java” –classpath “C:¥Program Files¥IBM¥SDP¥FunctionalTester¥bin¥rational_ft.jar” com.rational.test.ft.rational_ft –datastore “C:¥Documents and Settings¥iseadmin¥IBM¥rationalsdp¥workspace¥RFTprj” –compile scriptB –playback –log scriptB_%yyyymmdd% 上記のバッチファイルを 2009 年 6 月 17 日に実行すると、RFT スクリプト「scriptB」が 「scriptB_20090617」というログ名で実行されます。 (ログ名の日付部分には、実行時の実際の日付が入ります。) © 2009 IBM Corporation - 14 -