QTP-クイックガイド

QTPは QuickTEST(東部基準時 Professional、の製品 Hewlett Packard (HP)。このツールは、スクリプトの開発が完了すると、テスターが監視せずにシームレスに自動機能テストを実行するのに役立ちます。

HPQTPは Visual Basic Scripting (VBScript)アプリケーションを自動化するため。スクリプトエンジンはWindowsOSの一部として利用できるため、排他的にインストールする必要はありません。VBScriptの現在のバージョンは5.8で、Win 7の一部として利用できます。VBScriptはオブジェクト指向言語ではなく、オブジェクトベースの言語です。

テストツール

ソフトウェアテストコンテキストのツールは、計画、要件、ビルドの作成、テスト実行、欠陥ログ、テスト分析から1つ以上のテストアクティビティをサポートする製品として定義できます。

ツールの分類

ツールは、いくつかのパラメータに基づいて分類できます。含まれています-

  • ツールの目的
  • ツール内でサポートされているアクティビティ
  • サポートするテストのタイプ/レベル。
  • ライセンスの種類(オープンソース、フリーウェア、商用)
  • 使用されているテクノロジー

ツールの種類

シニア番号 ツールタイプ のために使用される によって使われた
1 テスト管理ツール テスト管理、スケジューリング、欠陥ログ、追跡、分析。 テスター
2 構成管理ツール 実装、実行、変更の追跡 すべてのチームメンバー
3 静的分析ツール 静的テスト 開発者
4 テストデータ準備ツール 分析と設計、テストデータの生成 テスター
5 テスト実行ツール 実装、実行 テスター
6 テストコンパレータ 期待される結果と実際の結果の比較 すべてのチームメンバー
7 カバレッジ測定ツール 構造的なカバレッジを提供します 開発者
8 パフォーマンステストツール パフォーマンス、応答時間の監視 テスター
9 プロジェクト計画および追跡ツール 計画のため プロジェクトマネージャー
10 インシデント管理ツール テストを管理するため テスター

QTPはどこに適合しますか?

QTPは機能テストツールであり、アプリケーションの回帰テストに最適です。QTPは、HPが所有するライセンス/商用ツールであり、市場で入手可能な最も人気のあるツールの1つです。実際の結果と期待される結果を比較し、実行の概要で結果を報告します。

QTP –歴史と進化

HP Quick Test Professionalは、もともとMercury Interactiveが所有していたもので、HPが買収したものです。元の名前はAstraQuick Testで、後にQuick Test Professionalという名前になりましたが、最新バージョンはUnified Functional Tester(UFT)として知られています。

バージョン履歴

それでは、QTPのバージョン履歴を見てみましょう。

バージョン タイムライン
Astraクイックテストv1.0からv5.5-MercuryInteractive 1998年5月から2001年8月
QuickTest Professionalv6.5からv9.0-MercuryInteractive 2003年9月から2006年4月
HP-QuickTest Professionalv9.1からv11.0-HPが買収およびリリース 2007年2月から2010年9月
HP-統合機能テストv11.5からv11.53 2012年から2013年11月

利点

  • VBScriptを使用した自動テストの開発には、高度なスキルを持つコーダーは必要なく、他のオブジェクト指向プログラミング言語と比較すると比較的簡単です。

  • 使いやすさ、ナビゲーションのしやすさ、結果の検証、およびレポートの生成。

  • 簡単なスケジューリングと監視を可能にするテスト管理ツール(Hp-Quality Center)とすぐに統合されます。

  • モバイルアプリケーションのテストにも使用できます。

  • HP製品であるため、技術的な問題に対処するためにHPおよびそのフォーラムによって完全なサポートが提供されます。

短所

  • Seleniumとは異なり、QTPはWindowsオペレーティングシステムでのみ機能します。

  • ブラウザのすべてのバージョンがサポートされているわけではなく、テスターはメジャーバージョンごとにパッチがリリースされるのを待つ必要があります。

  • とはいえ、商用ツールであるとはいえ、ライセンス費用は非常に高い。

  • スクリプト作成時間は短くなりますが、CPUとRAMに負荷がかかるため、実行時間は比較的長くなります。

自動化されたツールの実装の場合、以下はそのフェーズ/ステージです。各段階は特定の活動に対応し、各段階には明確な結果があります。

  • Test Automation Feasibility Analysis−最初のステップは、アプリケーションを自動化できるかどうかを確認することです。制限があるため、すべてのアプリケーションを自動化できるわけではありません。

  • Appropriate Tool Selection−次の最も重要なステップは、ツールの選択です。これは、アプリケーションが構築されているテクノロジー、その機能、および使用法によって異なります。

  • Evaluate the suitable framework−ツールを選択したら、次のアクティビティは適切なフレームワークを選択することです。フレームワークにはさまざまな種類があり、それぞれのフレームワークには独自の意味があります。フレームワークについては、このチュートリアルの後半で詳しく説明します。

  • Build Proof of Concept−概念実証(POC)は、ツールがアプリケーションの自動化をサポートできるかどうかを評価するためのエンドツーエンドのシナリオで開発されています。これはエンドツーエンドのシナリオで実行され、主要な機能を自動化できるようにします。

  • Develop Automation Framework− POCを構築した後、フレームワークの開発が実行されます。これは、テスト自動化プロジェクトを成功させるための重要なステップです。フレームワークは、アプリケーションで使用されるテクノロジーとその主要な機能を入念に分析した後に構築する必要があります。

  • Develop Test Script, Execute, and Analyze−スクリプトの開発が完了すると、スクリプトが実行され、結果が分析され、欠陥がある場合はログに記録されます。テストスクリプトは通常、バージョン管理されています。

QTPは商用ツールであり、試用版はHPサイトから直接ダウンロードできます。統合機能テスト(11.5x)である現在のバージョンのみがダウンロードできます。以下は、試用版をダウンロードできるURLです。

ダウンロードURL- QTP

インストール手順

Step 1 −以下に示すように、[試用版とデモ]リンクをクリックし、[HP統合機能テスト11.50CC英語SWEメディア評価]を選択します。

Step 2−「HPUnified Functional Testing 11.50」を選択すると、ダウンロードウィザードが開きます。個人情報を入力し、[次へ]をクリックします。

Step 3 −「利用規約」を読み、「次へ」をクリックします。

Step 4−ダウンロードウィンドウが開きます。次に、「ダウンロード」ボタンをクリックします。

Step 5−ダウンロードされたファイルの形式は.RARになります。次に、アーカイブを解凍する必要があります。フォルダーの内容は次のようになり、Setup.exeを実行します。

Step 6 −セットアップファイルの実行時に、インストールするために、以下に示すようにリストから「統合機能テストセットアップ」を選択します。

Step 7 −次に、[次へ]をクリックして続行します。

Step 8− [カスタムセットアップ]ウィンドウで、自動化に必要なプラグインを選択します。つまり、テスト対象のアプリケーションのテクノロジーに基づいてプラグインを選択する必要があります。たとえば、アプリケーションが.NETに基づいている場合は、必ず.NETを選択する必要があります。

Step 9−インストールに必要なプラグインを選択したら、[次へ]をクリックします。インストールが完了すると、[完了]ボタンウィンドウが表示されます。

Step 10−インストールが完了すると、[追加のインストール要件]ダイアログボックスが開きます。「ライセンスインストールウィザードの実行」以外のリストからすべてを選択し、「実行」をクリックします。試用版をインストールしているため、「ライセンスインストールウィザードの実行」を選択する必要はありません。試用版では、デフォルトで30日間のライセンスが付与されます。

Step 11−追加のインストール要件が完了すると、チェックマークが表示され、コンポーネントが正常にインストールされたことを示します。次に、[閉じる]をクリックします。

UFTとアドインページの起動

Step 1 −インストール後、図に示すように、スタートメニューからアプリケーションを起動できます。

Step 2−ライセンスページが表示されます。試用ライセンスがインストールされているので、[続行]をクリックできます。

Step 3 −ユーザーが必要なアドインを選択するための[アドイン]ダイアログボックスが開きます。

Note −すべてのアドインをロードするのではなく、必要なアドインだけをロードして、[OK]をクリックします。

Step 4 −必要なアドインをロードした後、ユーザーに対してUFT 11.5ツールが開き、以下に示すようにUFTの最初の垣間見ることができます。

テストの記録は、UFTが再生可能なスクリプトを自動的に生成するように、テスト対象のアプリケーションのユーザーアクションを記録することに対応します。初期設定が正しく行われていれば、記録と再生は、ツールがテクノロジーをサポートできるかどうかにかかわらず、ツールの第一印象を与えることができます。

録音と再生の手順は次のとおりです-

Step 1 −以下に示すように、スタートページから「新規」テストをクリックします−

Step 2− [新規]リンクをクリックすると、新しいテストウィンドウが開き、ユーザーはテストタイプを選択する必要があります。「GUIテスト」を選択し、テストの名前と保存する必要のある場所を指定します。

Step 3−新しいテストが作成されると、次のように新しいテスト画面が開きます。次に、デフォルトで1つのアクションで作成される[アクション1]タブをクリックします。

Step 4 −以下に示すように、「記録」メニューをクリックし、「記録と実行の設定」を選択します。

Step 5− [記録と実行の設定]ダイアログボックスが開き、アプリケーションの種類に基づいて、Web、Java、またはWindowsアプリケーションを選択できます。たとえば、ここでは、Webベースのアプリケーション(http://easycalculation.com/)を記録します。

Step 6− [記録]をクリックします。Internet Explorerは、Webアドレスで自動的に開きますhttps://www.easycalculation.com/設定に従って。「代数」の下の「数字」リンクをクリックし、数字を入力して「計算」をクリックします。アクションが完了したら、記録パネルの「停止」ボタンをクリックします。スクリプトが次のように生成されていることがわかります-

Step 7−再生ボタンをクリックしてスクリプトを再生します。スクリプトが再生され、結果が表示されます。

Step 8 −結果ウィンドウがデフォルトで開かれ、実行、合格、および失敗したステップのタイムスタンプが正確に表示されます。

記録と再生の重要性

  • これは、UFTがテクノロジー/アプリケーションをサポートできるかどうかを検証するための予備調査方法として使用されます。

  • 長期的なメンテナンスを必要としないアプリケーションまたは機能の基本機能をテストするために使用されます。

  • マウスの動きとキーボード入力の両方を記録するために使用できます。

録音モード

  • Normal Recording −これは、テスト対象のアプリケーションで実行されたオブジェクトと操作を記録するデフォルトの記録モードです。

  • Analog Recording −これは、キーボードの動作だけでなく、画面またはアプリケーションウィンドウに対するマウスの動きも記録します。

  • Low-Level Recording−これは、UFTがオブジェクトを認識しているかどうかに関係なく、オブジェクトの正確な座標を記録します。座標を記録するだけなので、マウスの動きは記録しません。

  • Insight Recording − UFTは、ネイティブプロパティではなく、外観に基づいて操作を記録します。

録音モードの選び方

記録ボタンをクリックした後、記録が開始されると、ユーザーは画面に表示される記録ペインから記録モードを選択できます。選択は、上記で説明したもののいずれかから行うことができます。

次のシナリオがすべてのモードで記録され、さまざまな状況で同じアクションが記録されていることがわかります。

  • IEを起動します- https://www.easycalculation.com/
  • 「代数」の下の「数字」をクリックします
  • 「平方根」リンクをクリックします
  • 平方根を計算する値を入力します。10としましょう
  • 計算を押す

デフォルト、アナログ、および低レベルの記録モードで記録されたスクリプトを以下に示します。

' DEFAULT RECORDING MODE 
Browser("Free Online Math Calculator").Page("Free Online Math 
Calculator").Link("Numbers").Click 

Browser("Free Online Math Calculator").Page("Numbers Calculator - 
Math").Link("Square Root").Click 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebEdit("n").Set "10" 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebButton("calculate").Click 

' ANALOG RECORDING MODE 
Desktop.RunAnalog "Track1" 

' LOW LEVEL RECORDING MODE 
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
235,395 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
509,391 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
780,631 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Type 
"10" 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
757,666

インサイト記録モードを使用した記録は以下のようになります-

オブジェクトリポジトリ

オブジェクトリポジトリは、QTPがオブジェクトを認識して操作できるようにするオブジェクトとプロパティのコレクションです。ユーザーがテストを記録すると、オブジェクトとそのプロパティがデフォルトでキャプチャされます。オブジェクトとそのプロパティを理解しないと、QTPはスクリプトを再生できません。

オブジェクトリポジトリとそれに関連する機能の詳細については、次の各トピックをクリックしてください。

シニア番号 トピックと説明
1 オブジェクトスパイとその機能

オブジェクトスパイの使用法とそれに関連する機能を理解する。

2 オブジェクトリポジトリの操作

オブジェクトリポジトリおよびそれに関連する機能からのオブジェクトの追加、編集、削除。

3 オブジェクトリポジトリの種類

共有オブジェクトとローカルオブジェクトリポジトリ、およびスクリプトに関するそれらのコンテキストを扱います。

4 ユーザー定義オブジェクト

ユーザー定義オブジェクトを使用する状況に対処します。

5 XMLのオブジェクトリポジトリ

ORをXMLに変換し、オブジェクトリポジトリをXMLとして使用することを扱います。

6 比較とマージOR

ORの比較、ORのマージなどの操作により、オブジェクトリポジトリと効果的に連携します。

7 序数識別子

序数識別子が使用される状況とその利点。

8 子オブジェクト

効果的なスクリプト作成のための子オブジェクトの使用

アクションは、テスターがスクリプトをQTPステートメントのグループに分割するのに役立ちます。アクションはVBScriptの関数に似ています。ただし、いくつかの違いがあります。デフォルトでは、QTPは1つのアクションでテストを作成します。

行動 関数
アクションはQTPの組み込み機能です。 VBScript関数は、VBScriptとQTPの両方でサポートされています。
アクションパラメータは値によってのみ渡されます。 関数パラメーターは、値または参照のいずれかによって渡されます。
アクションの拡張子は.mtsです 関数は.vbsまたは.qflとして保存されます
アクションは再利用できる場合とできない場合があります。 関数は常に再利用可能です。

アクションのプロパティには、スクリプトエディタウィンドウを右クリックして[プロパティ]を選択することでアクセスできます。

アクションプロパティには、次の情報が含まれています-

  • アクション名
  • Location
  • 再利用可能なフラグ
  • 入力パラメータ
  • 出力パラメータ

アクションの種類

アクションには3つのタイプがあります-

  • Non-reusable action −設計された特定のテストでのみ呼び出すことができ、1回だけ呼び出すことができるアクション。

  • Reusable action −複数回呼び出すことができるアクション、それが存在する任意のテスト、および他の任意のテストでも使用できます。

  • External Reusable action−別のテストに保存されている再利用可能なアクションです。外部アクションは呼び出しテストでは読み取り専用ですが、外部アクションのデータテーブル情報の編集可能なコピーを使用してローカルで使用できます。

アクションの操作

アクションを挿入するには、3つのオプションがあります。選択したアクションのタイプについて詳しく知るには、それぞれをクリックしてください。

シニア番号 アクションの種類と説明
1 新しいアクションへの呼び出しを挿入

既存のアクションから新しいアクションを挿入します

2 アクションのコピーへの呼び出しを挿入

既存のアクションのコピーを挿入します

3 既存のアクションへの呼び出しを挿入

既存の再利用可能なアクションへの呼び出しを挿入します

Microsoft Excelと同様のDataTableは、テスターがアクションを複数回実行するために使用できるデータ駆動型のテストケースを作成するのに役立ちます。Datatablesには2つのタイプがあります-

  • Local DataTable −各アクションには、ローカルデータテーブルとも呼ばれる独自のプライベートデータテーブルがあり、アクション間でアクセスすることもできます。

  • Global DataTable −各テストには、アクション間でアクセスできる1つのグローバルデータシートがあります。

データシートには、以下に示すように、QTPの[データ]タブからアクセスできます。

指定された反復回数のテストケースを実行するには、[テスト設定]ダイアログでグローバルデータテーブルの反復を設定できます。このダイアログには、次のように[ファイル]→[設定]→[実行(タブ)]を使用してアクセスできます。

たとえば、ユーザーがの「複利」をパラメータ化する場合 http://easycalculation.com/ を使用してアクセスできます http://easycalculation.com/compound-interest.php。パラメータは以下のように作成できます。Excelのほとんどの機能は、データテーブルでも使用できます。

DataTableの操作

DataTableにアクセスするオブジェクトには3つのタイプがあります。DataTableの操作は、以下をトラバースすることでよく理解できます。

シニア番号 オブジェクトタイプと説明
1 データテーブルメソッド

データテーブルメソッドに関する詳細情報を提供します。

2 DTParameterオブジェクトメソッド

DTParameterメソッドに関する詳細情報を提供します。

3 DTSheetオブジェクトメソッド

DTSheetメソッドに関する詳細情報を提供します。

チェックポイントは、その名前がす​​べてを物語っているように、指定されたプロパティの現在の値またはオブジェクトの現在の状態を、スクリプトの任意の時点で挿入できる期待値と比較する検証ポイントを指します。

チェックポイントの種類

シニア番号 タイプと説明
1

Standard Checkpoint

テスト対象のアプリケーションで、すべてのアドイン環境でサポートされているオブジェクトのプロパティ値を確認します。

2

Bitmap Checkpoint

アプリケーションの領域をビットマップとして検証します

3

File Content Checkpoint

.txt、.pdfなどの動的に生成またはアクセスされるファイルのテキストを確認します

4

Table Checkpoint

テーブル内の情報を検証します。すべての環境がサポートされているわけではありません。

5

Text Checkpoint

指定された基準に従って、Windowsベースのアプリケーションの定義された領域内に表示されるテキストを確認します。

6

Text Area Checkpoint

指定された基準に従って、Windowsベースのアプリケーションの定義された領域内にテキスト文字列が表示されるかどうかを確認します。

7

Accessibility Checkpoint

ページを確認し、World Wide Webコンソーシアム(W3C)のWebコンテンツアクセシビリティガイドラインに準拠していない可能性のあるWebサイトの領域を報告します。

8

Page Checkpoint

Webページの特性を検証します。また、壊れたリンクをチェックすることもできます。

9

Database Checkpoint

テスト対象のアプリケーションがアクセスするデータベースの内容を確認します。

10

XML Checkpoint

Webページおよびフレーム内の.xmlドキュメントまたは.xmlドキュメントのコンテンツを確認します。

CheckPointの挿入

ユーザーがチェックポイントを挿入する場合は、ほとんどのチェックポイントが記録セッション中にのみサポートされていることを確認する必要があります。ユーザーが記録を停止すると、チェックポイントは有効になりません。

以下に示すのは、ユーザーが記録モードにないときのチェックポイントメニューです。

以下に示すのは、ユーザーが記録モードの場合のチェックポイントメニューです。

テスト対象のアプリケーションにチェックポイントが追加されます-「http://easycalculation.com/」

' 1. Inserted Standard Checkpoint
Status = Browser("Math Calculator").Page("Math 
   Calculator").Link("Numbers").Check CheckPoint("Numbers")

If Status Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

' 2. Inserted BitMap Checkpoint
imgchkpoint = Browser("Math Calculator").Page("Math 
   Calculator").Image("French").Check CheckPoint("French")

If imgchkpoint Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

チェックポイントプロパティの表示

挿入後、テスターが値を変更したい場合は、スクリプトのキーワード「チェックポイント」を右クリックし、以下に示すように「チェックポイントのプロパティ」に移動します。

以下に示すように、オブジェクトリポジトリでも同じチェックポイントを見つけることができます。使用されているチェックポイントのタイプと期待値、およびタイムアウト値が正確に示されます。

同期ポイントは、テスト対象のツールとアプリケーション間の時間インターフェイスです。同期ポイントは、テストスクリプトの2つのステップ間の遅延時間を指定する機能です。

たとえば、リンクをクリックすると、ページが1秒、場合によっては5秒、場合によっては10秒で完全に読み込まれることがあります。これは、アプリケーションサーバーの応答時間、ネットワーク帯域幅、クライアントシステムの機能などのさまざまな要因によって異なります。

時間が変化している場合、テスターがこれらの時間差をインテリジェントに処理しない限り、スクリプトは失敗します。

同期点を挿入する方法

  • WaitProperty
  • Exist
  • Wait
  • 同期(Webベースのアプリのみ)
  • QTP組み込み同期ポイントの挿入。

たとえば、「www.easycalculation.com」の「numbers」リンクをクリックしてから「simpleInterest」計算機をクリックする間に同期点を挿入する必要があるとします。ここで、上記のシナリオで同期点を挿入する5つの方法すべてを見ていきます。

メソッド1-WaitProperty

WaitPropertyは、同期を実行するための入力としてプロパティ名、値、およびタイムアウト値を受け取るメソッドです。これは動的な待機であるため、このオプションをお勧めします。

' Method 1 - WaitProperty with 25 seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

obj.Link("Simple Interest").WaitProperty "text", "Simple Interest",25000
obj.Link("Simple Interest").Click

方法2-存在する

Existは、同期を実行するための入力としてTimeout値を受け取るメソッドです。繰り返しますが、これは動的な待機であるため、このオプションをお勧めします。

' Method 2 : Exist Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

If obj.Link("Simple Interest").Exist(30) Then
   obj.Link("Simple Interest").Click

Else
   Print "Link NOT Available"
End IF

方法3-待つ

待機はハードコードされた同期ポイントであり、イベントが発生したかどうかに関係なく待機します。したがって、Waitの使用は推奨されておらず、1秒や2秒などの短い待機時間に使用できます。

' Method 3 : Wait Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click
wait(30)
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

方法4-同期方法

同期方法は、ページの読み込みの間に常にラグがあるWebアプリケーションにのみ使用できます。

' Method 4 : 
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

Browser("Math Calculator").Sync
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

方法5-QTP組み込み同期ポイントの挿入

Step 1−録音モードに入ります。ユーザーが録音モードでない場合、このオプションは無効になります。

Step 2 −「設計」→「同期ポイント」に移動します。

Step 3−同期点にしたいオブジェクトを選択する必要があります。オブジェクトを選択すると、以下のようなオブジェクトウィンドウが開きます。

Step 4− [OK]をクリックします。「同期の追加ウィンドウ」が開きます。以下に示すように、プロパティ、値、およびタイムアウト値を選択し、[OK]をクリックします-

Step 5 −スクリプトは、以下に示すように生成されます。これは、すでに説明したWaitProperty(メソッド1)のスクリプトと同じです。

Browser("Math Calculator").Page("Math Calculator").Link("Numbers").Click

Browser("Math Calculator").Page("Math Calculator").Link("Simple 
   Interest").WaitProperty "text", "Simple Interest", 10000

デフォルトの同期

ユーザーが上記の同期方法のいずれも使用していない場合でも、QTPには、ユーザーが調整できるオブジェクト同期タイムアウトが組み込まれています。

以下に示すように、[ファイル] >> [設定] >> [実行]タブ>> [オブジェクトの同期タイムアウト]に移動します。

QTPは、認識されたオブジェクトの説明に一致するオブジェクトを見つけることができない場合や、説明に一致するオブジェクトを複数見つける場合があります。QTPは、認識された説明を無視し、スマート識別メカニズムを使用してオブジェクトを認識します。

QTPのスマート識別は2種類のプロパティを使用します-

  • Base Filter Properties −元のオブジェクトの本質を変更せずに値を変更できない特定のテストオブジェクトクラスの基本プロパティ。

  • Optional Filter Properties −他のプロパティも、プロパティが頻繁に変更される可能性は低いが、適用できなくなった場合は無視できる特定のクラスのオブジェクトを識別するのに役立ちます。

オブジェクトのスマート識別の有効化

Step 1− [ツール]→[オブジェクトの識別]に移動します。オブジェクト識別ダイアログが開きます。

Step 2 −以下に示すように、環境、オブジェクトクラスを選択し、「スマート識別を有効にする」をオンにします。

Step 3 − [構成]をクリックして、ベースおよびオプションのフィルタープロパティを選択します。

Step 4−デフォルトのプロパティとは別に、ベースプロパティにプロパティを追加し、オプションのフィルタプロパティを追加/削除します。同じプロパティを必須プロパティと支援プロパティの両方に含めることはできないことに注意して、[OK]をクリックしてください。

Step 5−オブジェクトリポジトリにそのタイプのオブジェクトを追加した後、スマートIDが有効になっているかどうかを確認します。スマート識別はTRUEに設定されます。スマート識別を有効にしたくない場合は、Falseにすることもできます。

Step 6 −以下に示すように、[ファイル]メニューの[設定]でテストスクリプトレベルで適用することにより、テストレベルを無効にすることもできます。

Step 7 −ステップ#6に従ってスマート識別が無効になっている場合、スクリプトの実行中にオブジェクトにスマート識別は適用されません。

Step 8 −オブジェクトがスマートIDをオフとして追加された場合、QTPは、後で有効にしたとしても、スマートIDを将来の認識に使用しません。

自動化テストのコンテキストでのデバッグは、自動化スクリプトのコーディングの問題を見つけて修正する体系的なプロセスであるため、スクリプトはより堅牢になり、アプリケーションの欠陥を見つけることができます。

QTPのブレークポイントを使用してデバッグを実行するには、さまざまな方法があります。ブレークポイントは、「F9」を押すか、メニューオプション「実行」→「ブレークポイントの挿入/削除」を使用するだけで挿入できます。

ブレークポイントを挿入すると、以下に示すように、「赤色」のドットと線が赤色で強調表示されます。

方法 ShortCut 説明
ステップイン F11 すべてのステップを実行するために使用されます。機能/アクションにステップインし、行ごとに実行します。実行後、各行で一時停止します。
ステップオーバー F10 関数をステップオーバーするために使用されます。ステップオーバーは、アクティブなドキュメントの現在のステップのみを実行します。
踏みでる Shift + F11 関数にステップインした後、ステップアウトコマンドを使用できます。ステップアウトは、関数の最後まで実行を続行し、次の行で実行セッションを一時停止します。

ブレークポイントのオプション

ブレークポイントのさまざまなオプションには、[実行]メニューから移動してアクセスできます。

シニア番号 ショートカットと説明
1

F9

ブレークポイントの挿入/削除

2

Ctrl+F9

BreakPointを有効/無効にする

3

Ctrl+Shift+F9

すべてのBreakPointをクリア

4

Use Only Menu

すべてのブレークポイントを有効/無効にする

デバッグペイン

以下は、デバッグウィンドウのペインです-

  • Output −このタブには、印刷ステートメントのすべての出力が表示されます。

  • Watch −このタブには、指定された式のブール出力が表示されます。

  • LocalVariables −このタブには、ローカル変数の出力が表示されます。

ウォッチペインには、次のような出力式が表示されます。

ローカル変数ペインには、以下に示すようにローカル変数が保持する値が表示されます。

QTPでエラーを処理するにはさまざまな方法があります。QTPの操作中に発生する可能性のあるエラーには、3つのタイプがあります。彼らは-

  • 構文エラー
  • 論理エラー
  • 実行時エラー

エラーの種類

構文エラー

構文エラーは、VBscripting言語の文法で確認されないタイプミスまたはコードの一部です。構文エラーはコードのコンパイル時に発生し、エラーが修正されるまで実行できません。

構文を確認するには、キーボードショートカットのCtrl + F7を使用すると、結果が次のように表示されます。ウィンドウが表示されない場合は、「表示」→「エラー」に移動できます。

論理エラー

スクリプトが構文的に正しいが、予期しない結果が生じる場合は、論理エラーと呼ばれます。論理エラーは通常、実行を中断しませんが、誤った結果を生成します。論理エラーは、さまざまな理由、つまり、要件の誤った仮定や誤解、場合によっては誤ったプログラムロジック(do-Untilの代わりにdo-whileを使用)または無限ループが原因で発生する可能性があります。

論理エラーを検出する方法の1つは、ピアレビューを実行し、QTP出力ファイル/結果ファイルを検証して、ツールが想定どおりに実行されたことを確認することです。

ランタイムエラー

名前が示すように、この種のエラーは実行時に発生します。このようなエラーの理由は、何かを実行しようとしているスクリプトが実行できず、実行を続行できないため、通常はスクリプトが停止するためです。実行時エラーの典型的な例は次のとおりです。

  • ファイルが見つかりませんが、スクリプトがファイルを読み取ろうとしています
  • オブジェクトが見つかりませんが、スクリプトはその特定のオブジェクトに作用しようとしています
  • 数値をゼロで割る
  • 配列要素へのアクセス中に配列インデックスが範囲外

実行時エラーの処理

コードのエラーを処理するには、さまざまな方法があります。

1. Using Test Settings−エラー処理は、以下に示すように、[ファイル] >> [設定] >> [実行]タブに移動してテスト設定を定義できます。指定した設定を選択して「OK」をクリックします。

2. Using On Error Statement −「OnError」ステートメントは、VBScriptエンジンにユーザーフレンドリーではないエラーメッセージを表示させるのではなく、テスターに​​よるランタイムエラーを処理する意図をVBScriptエンジンに通知するために使用されます。

  • On Error Resume Next − On Error Resume Nextは、エラーが発生したときに次のコード行の実行を処理するようにVBScriptエンジンに通知します。

  • On error Goto 0 −これは、テスターがエラー処理をオフにするのに役立ちます。

3. Using Err Object −エラーオブジェクトはVBScript内の組み込みオブジェクトであり、コードを簡単にデバッグできる実行時エラー番号とエラーの説明をキャプチャします。

  • Err.Number− Numberプロパティは、エラーを指定する数値を返すか、設定します。Err.Number値が0の場合、エラーは発生していません。

  • Err.Description − Descriptionプロパティは、エラーに関する簡単な説明を返すか、設定します。

  • Err.Clear − Clearメソッドは、Errオブジェクトをリセットし、それに関連付けられている以前の値をすべてクリアします。

'Call  the function to Add two Numbers Call Addition(num1,num2) 

Function Addition(a,b)  
   On error resume next  
      If NOT IsNumeric(a) or IsNumeric(b) Then 
         Print "Error number is  " &  err.number & " and description is : 
            " &  err.description 
         Err.Clear 
         Exit Function 
      End If 
   Addition = a+b 

   'disables error handling  
   On Error Goto 0 
End function

4. Using Exit Statement− ExitステートメントをErrオブジェクトと一緒に使用して、Err.Number値に基づいてテスト、アクション、または反復を終了できます。それらのExitステートメントのそれぞれを詳細に見てみましょう。

  • ExitTest −実行時の反復設定に関係なく、QTPテスト全体を終了します。

  • ExitAction −現在のアクションを終了します。

  • ExitActionIteration −アクションの現在の反復を終了します。

  • ExitTestIteration − QTPテストの現在の反復を終了し、次の反復に進みます。

5. Recovery Scenarios −エラーが発生すると、特定の条件に基づいて回復シナリオがトリガーされ、別の章で詳細に説明されます。

6. Reporter Object− Reporter Objectは、実行結果にイベントを報告するのに役立ちます。これは、関連するアクション/ステップが合格/不合格であるかどうかを識別するのに役立ちます。

'Syntax: Reporter.ReportEventEventStatus, ReportStepName, Details, 
[ImageFilePath] 

'Example 
Reporter.ReportEvent micFail, "Login", "User is unable to Login."

回復シナリオ

QTPスクリプトの実行中に、予期しないエラーが発生する場合があります。テストを回復し、これらの予期しないエラーからスクリプトの残りの部分を実行し続けるために、回復シナリオが使用されます。リカバリシナリオマネージャには、以下に示すように[リソース]→リカバリシナリオマネージャに移動してアクセスできます。

リカバリシナリオを作成する手順

Step 1− [新規]リカバリシナリオボタンをクリックします。リカバリシナリオウィザードが次のように開きます-

Step 2−トリガーイベントを選択します。これは、次の4つのイベントのいずれかで発生する可能性のあるイベントに対応します-

  • ポップアップウィンドウ
  • オブジェクトの状態
  • テスト実行エラー
  • アプリケーションのクラッシュ

Step 3−リカバリ操作ウィンドウが開きます。リカバリ操作は、以下のスクリーンショットに示すように、次の操作のいずれかを実行できます-

Step 4 −適切なリカバリ操作を指定した後、以下に示すように、リカバリ後の操作も指定する必要があります。

Step 5 −復旧後の操作を指定した後、復旧シナリオに名前を付けてテストに追加し、アクティブ化できるようにする必要があります。

Step 6 −リカバリシナリオの作成が完了し、[現在のテストにシナリオを追加する]オプションをオンにして、[完了]をクリックして現在のテストにマップする必要があります。

Step 7 −追加されたリカバリシナリオは次のようになり、[閉じる]ボタンをクリックして続行します。

Step 8− [閉じる]ボタンをクリックした後、QTPは、作成されたリカバリシナリオを保存するようにユーザーに促します。拡張子.qrsで保存され、ウィザードが閉じます。

検証

作成されたリカバリシナリオは今すぐテストの一部になり、[ファイル]→[設定]→[リカバリ]タブに移動して確認できます。

QTP環境変数は、すべてのアクション、関数ライブラリ、および回復シナリオからアクセスできる特殊なタイプの変数です。その特定のシステムで実行されているすべてのアプリケーションで使用できるWindowsの組み込み環境変数がありますが、QTP環境変数は、実行時にその特定のテストスクリプトでのみ使用できます。

環境変数の種類

Built-in Environment Variables−テスト名、アクション名、テストパス、ローカルホスト名、オペレーティングシステム名、タイプ、およびそのバージョンなどの情報を提供できる一連の環境パラメーターを提供します。環境変数名には、「ファイル」→「テスト設定」→「環境」タブに移動してアクセスできます。

User defined Internal−ユーザー定義変数は、[環境]タブウィンドウで[ユーザー定義]を選択して保存できます。以下に示すように、「+」ボタンをクリックしてパラメータ名と値を入力します-

User Defined External−ユーザー定義変数は、.xmlファイルとして外部ファイルに保存でき、次の図に示すようにテストにロードできます。以下の例の1つで説明するように、実行時に動的にロードすることもできます。

環境変数–サポートされているメソッド

1. ExternalFileName Property− [テスト設定]ダイアログボックスの[環境]タブで指定された、ロードされた外部環境変数ファイルの名前を返します。外部環境変数ファイルがロードされていない場合、このプロパティは空の文字列を返します。

x = Environment.ExternalFileName 
print x

2. LoadFromFile Method−実行時に指定された環境変数ファイル(.xml)を動的にロードします。この方法を使用する場合、環境変数を[環境]タブに手動で追加する必要はありません。

Environment.LoadFromFile "D:\config.xml"
b = Environment.Value("Browser")
print b

3. Value Property−環境変数の値を取得します。このプロパティを使用して、ユーザー定義の内部環境変数の値を設定することもできます。

' Get the Value of the InBuilt Environment Variables
a = Environment.Value("OS")
print a
b = Environment.Value("ActionName")
print b
  
'Loaded from External File
Environment.LoadFromFile "D:\config.xml"
c = Environment.Value("Browser")
print c

スクリプトをモジュール化するために、ライブラリファイルがQTPスクリプトに追加されます。変数宣言、関数、クラスなどが含まれています。これらは、テストスクリプト間で共有できる再利用性を可能にします。それらは拡張子.vbsまたは.qflで保存されます

「ファイル」>>「関数ライブラリ」に移動すると、新しいライブラリファイルを作成できます。

関数ライブラリの関連付け

Method 1− [ファイル]> [設定]> [リソース]> [関数ライブラリの関連付け]オプションを使用します。「+」ボタンをクリックして関数ライブラリファイルを追加し、以下に示すように実際のパスまたは相対パスを使用して追加します-

Method 2 −ExecuteFileメソッドを使用します。

'Syntax : ExecuteFile(Filepath)
ExecuteFile "C:\lib1.vbs" 
ExecuteFile "C:\lib2.vbs"

Method 3 −LoadFunctionLibraryメソッドを使用します。

'Syntax : LoadFunctionLibrary(Filepath)
LoadFunctionLibrary "C:\lib1.vbs" 
LoadFunctionLibrary "C:\lib2.vbs"

Method 4−オートメーションオブジェクトモデル(AOM)-これは、QTPの外部でさまざまなQTP操作を制御できるメカニズムです。AOMを使用して、QTPの起動、テストのオープン、関数ライブラリの関連付けなどを行うことができます。次のVbScriptを拡張子.vbsとともに保存する必要があります。これを実行すると、QTPが起動し、テストの実行が開始されます。AOMについては、後の章で詳しく説明します。

'Launch QTP
Set objQTP = CreateObject("QuickTest.Application")
objQTP.Launch
objQTP.Visible = True
  
'Open the test
objQTP.Open "D:\GUITest2", False, False
Set objLib = objQTP.Test.Settings.Resources.Libraries
  
'Associate Function Library if NOT associated already.
If objLib.Find("C:\lib1.vbs") = -1 Then 
  objLib.Add "C:\lib1.vbs", 1 
End

試験結果

[テスト結果]ウィンドウには、成功したステップ、失敗したステップなどを表示するのに十分な情報が表示されます。[結果]ウィンドウは、テストの実行後に自動的に開きます(デフォルト設定に従って)。以下の情報が表示されます-

  • 合格したステップ
  • 手順が失敗しました
  • 環境パラメータ
  • グラフィカルな統計

テスト結果で実行された操作

結果をHTMLに変換する

結果ビューアウィンドウで、[ファイル]→[ファイルにエクスポート]に移動します。以下に示すように、[実行結果のエクスポート]ダイアログボックスが開きます。

エクスポートするレポートの種類を選択できます。短い結果でも、詳細な結果でも、ノードを選択することもできます。ファイル名を選択してエクスポートすると、ファイルは.HTMLファイルとして保存されます。

結果のフィルタリング

結果は、ステータス、ノードタイプ、および反復に基づいてフィルタリングできます。「テスト結果ウィンドウ」の「フィルター」ボタンからアクセスできます。

欠陥を上げる

以下に示すように、ALMへの接続を開く[ツール]→[欠陥の追加]にアクセスすることにより、[テスト結果]ウィンドウペインから直接QCに欠陥をログインできます。

試験結果

自動テスト結果ウィンドウは、[ツール]→[オプション]→[セッションの実行]タブで構成できます。必要に応じてオフにすることも、「セッション終了時に結果を自動的にエクスポートする」をオンにすることもできます。

スクリーンショットや動画は、設定に基づいて録画できます。同じことが「ツール」→「オプション」→「スクリーンキャプチャ」タブで設定できます。次の3つの条件に基づいてスクリーンショットまたはムービーを保存できます-

  • エラーの場合
  • Always
  • エラーと警告の場合

スクリプトの実行中にQTPが対話するさまざまなGUIオブジェクトがあります。したがって、効果的に作業できるようにするための主要なGUIオブジェクトの基本的な方法を知ることが重要です。

テキストボックスの操作

実行時にテキストボックスにアクセスする方法は次のとおりです-

  • Set −テスターがテキストボックスに値を設定するのに役立ちます

  • Click −テキストボックスをクリックします

  • SetSecure −パスワードボックスのテキストを安全に設定するために使用されます

  • WaitProperty −プロパティ値がtrueになるまで待機します

  • Exist −テキストボックスの存在を確認します

  • GetROProperty("text") −テキストボックスの値を取得します

  • GetROProperty("Visible") −表示されている場合はブール値を返します

Browser("Math Calculator").Sync
Set Obj = Browser("Math Calculator").Page("SQR Calc").WebEdit("n")

'Clicks on the Text Box
Obj.Click

'Verify if the Object Exist - Returns Boolean value
a = obj.Exist
print a

'Set the value
obj.Set "10000" : wait(2)

'Get the Runtime Object Property - Value of the Text Box
val = obj.GetROProperty("value")
print val

'Get the Run Time Object Property - Visiblility - Returns Boolean Value
x = Obj.GetROProperty("visible")
print x

チェックボックスの操作

以下は、チェックボックスを使用できる主要な方法の一部です。

  • Set −テスターがチェックボックス値を「オン」または「オフ」に設定するのに役立ちます

  • Click−チェックボックスをクリックします。オンまたはオフをチェックしても、ユーザーはステータスについて確信が持てません

  • WaitProperty −プロパティ値がtrueになるまで待機します

  • Exist −チェックボックスの存在を確認します

  • GetROProperty("name") −チェックボックスの名前を取得します

  • GetROProperty("Visible") −表示されている場合はブール値を返します

'To Check the Check Box
Set Obj = Browser("Calculator").Page("Gmail").WebCheckBox("PersistentCookie")
Obj.Set "ON"

'To UnCheck the Check Box
Obj.Set "OFF"

'Verifies the Existance of the Check box and returns Boolean Value
val = Obj.Exist
print val

'Fetches the Name of the CheckBox
a = Obj.GetROProperty("name")
print a

'Verifies the visible property and returns the boolean value.
x = Obj.GetROProperty("visible")
print x

ラジオボタンの操作

以下は、ラジオボタンを操作できる主な方法の一部です。

  • Select(RadioButtonName) −テスターがラジオボックスを「オン」に設定するのに役立ちます

  • Click−ラジオボタンをクリックします。ラジオボタンをオンまたはオフにしても、テスターはステータスを取得できません

  • WaitProperty −プロパティ値がtrueになるまで待機します

  • Exist −ラジオボタンの存在を確認します

  • GetROProperty("name") −ラジオボタンの名前を取得します

  • GetROProperty("Visible") −表示されている場合はブール値を返します

'Select the Radio Button by name "YES"
Set Obj = Browser("Calculator").Page("Forms").WebRadioGroup("group1")
Obj.Select("Yes")

'Verifies the Existance of the Radio Button and returns Boolean Value
val = Obj.Exist
print val

'Returns the Outerhtml of the Radio Button
txt = Obj.GetROProperty("outerhtml")
print text

'Returns the boolean value if Radio button is Visible.
vis = Obj.GetROProperty("visible")
print vis

コンボボックスの操作

以下は、コンボボックスを使用できる主要な方法の一部です。

  • Select(Value) −テスターがComboBoxから値を選択するのに役立ちます

  • Click −オブジェクトをクリックします

  • WaitProperty −プロパティ値がtrueになるまで待機します

  • Exist −コンボボックスの存在を確認します

  • GetROProperty("Text") −コンボボックスの選択された値を取得します

  • GetROProperty("all items") −コンボボックス内のすべてのアイテムを返します

  • GetROProperty("items count") −コンボボックス内のアイテムの数を返します

'Get the List of all the Items from the ComboBox
Set ObjList = Browser("Math Calculator").Page("Statistics").WebList("class")
x = ObjList.GetROProperty("all items")
print x

'Get the Number of Items from the Combo Box
y = ObjList.GetROProperty("items count")
print y

'Get the text value of the Selected Item
z = ObjList.GetROProperty("text")
print z

ボタンの操作

以下は、ボタンを操作できる主要な方法の一部です。

  • Click −ボタンをクリックします

  • WaitProperty −プロパティ値がtrueになるまで待機します

  • Exist −ボタンの存在を確認します

  • GetROProperty("Name") −ボタンの名前を取得します

  • GetROProperty("Disabled") −有効/無効の場合、ブール値を返します

'To Perform a Click on the Button
Set obj_Button = Browser("Math Calculator").Page("SQR").WebButton("Calc")
obj_Button.Click

'To Perform a Middle Click on the Button
obj_Button.MiddleClick

'To check if the button is enabled or disabled.Returns Boolean Value
x = obj_Button.GetROProperty("disabled")
print x

'To fetch the Name of the Button
y = obj_Button.GetROProperty("name")
print y

webTablesの操作

今日のWebベースのアプリケーションでは、webTableが非常に一般的になり、テスターはWebTableがどのように機能し、webTableでアクションを実行する方法を理解する必要があります。このトピックは、webTablesを効果的に操作するのに役立ちます。

シニア番号 ステートメントと説明
1

if statement

アン if ステートメントは、ブール式とそれに続く1つ以上のステートメントで構成されます。

2

if...else statement

アン if elseステートメントは、ブール式とそれに続く1つ以上のステートメントで構成されます。条件がTrueの場合。下のステートメントifステートメントが実行されます。条件が偽の場合。Else スクリプトの一部が実行されます

3

if..elseif...else statement

ifステートメントの後に1つ以上が続く Elseif ブール式とそれに続くオプションのステートメントで構成されるステートメント else statement、すべての条件がfalseになったときに実行されます。

4

nested if statements

ifまたは elseif 別の内部のステートメント if または elseif ステートメント。

5

switch statement

A switch ステートメントを使用すると、変数をテストして、値のリストを同等に評価できます。

  • html id −テーブルにidタグがある場合は、このプロパティを利用するのが最適です。

  • innerText −表の見出し。

  • sourceIndex −テーブルのソースインデックスを取得します

  • ChildItemCount −指定された行に存在するChildItemの数を取得します

  • RowCount −テーブルの行数を取得します

  • ColumnCount −テーブルの列数を取得します

  • GetcellData −列と行のインデックスに基づいてセルの値を取得します

Browser("Tutorials Point").Sync
' WebTable 
Obj = Browser("Tutorials Point").Page("VBScript Decisions").WebTable("Statement")
' Fetch RowCount
x = Obj.RowCount
print x

' Fetch ColumnCount
y = Obj.ColumnCount(1)
print y

' Print the Cell Data of the Table
For i = 1 To x Step 1
   
   For j = 1 To y Step 1
      z = Obj.GetCellData(i,j)
      print "Row ID : " & i & " Column ID : " & j & " Value : " & z
   Next
Next

'Fetch the Child Item count of Type Link in a particular Cell
z = Obj.ChildItemCount(2,1,"Link")
print z

仮想オブジェクトとは何ですか?

テスト対象のアプリケーションに標準のウィンドウオブジェクトが含まれていても、QTPで認識されない場合があります。このような状況では、オブジェクトをボタンやリンクなどのタイプの仮想オブジェクト(VO)として定義できるため、実行中に仮想オブジェクトでユーザーアクションをシミュレートできます。

MicrosoftWordでシナリオを自動化しているとしましょう。MS Wordアプリケーションをアクティブにして、リボンのアイコンをクリックしました。たとえば、リボンで[挿入]タブをクリックしてから、ユーザーが[画像]ボタンをクリックします。ボタンはWinObjectとして認識されます。したがって、仮想オブジェクトの重要性が顕著になります。

Window("Microsoft Word").WinObject("Ribbon").Click 145,45
Window("Microsoft Word").WinObject("Ribbon").WinObject("Picture...").Click 
170,104

仮想オブジェクトの作成

Step 1 −このようなシナリオでは、「ツール」>>「仮想オブジェクト」>>「新しい仮想オブジェクト」から仮想オブジェクトマネージャまたは新しい仮想オブジェクトを使用して仮想オブジェクトを作成し、「次へ」ボタンをクリックします。

Step 2 −オブジェクトをクラスタイプに対してマップし、[次へ]をクリックします。

Step 3−「オブジェクトのマーク」ボタンをクリックします。十字カーソルが表示され、マップするオブジェクトにマークを付けて、[次へ]をクリックします。

Step 4 −仮想オブジェクトの親を選択し、[次へ]をクリックします。

Step 5 −仮想オブジェクトを保存するコレクションに名前を付け、[完了]をクリックします。

仮想オブジェクトマネージャー

仮想オブジェクトマネージャは、仮想オブジェクトのコレクションを管理します。テスターは、仮想オブジェクトマネージャーから仮想オブジェクトを追加または削除できます。

仮想オブジェクトマネージャへのナビゲーション:以下に示すように、「ツール」>>「仮想オブジェクトマネージャ」-

仮想オブジェクトの使用

仮想オブジェクトを作成した後、作成したオブジェクトは次のように使用できます-

Window("Microsoft Word").WinObject("Ribbon").VirtualButton("button").Click

仮想オブジェクトの制限

  • QTPは、アナログまたは低レベルの記録用の仮想オブジェクトをサポートしていません。

  • 仮想オブジェクトにチェックポイントを追加することはできません。

  • 仮想オブジェクトは、オブジェクトリポジトリによって制御されません。

  • オブジェクトを特定のクラス(ボタンまたはリスト)にマップしますが、ネイティブオブジェクトのすべてのメソッドが仮想オブジェクトでサポートされているわけではありません。

  • オブジェクトスパイは仮想オブジェクトでは使用できません。

  • 座標の変更に伴って画面の解像度が変わると、テストの実行は失敗します。

  • 仮想オブジェクトが正しくキャプチャされるように、アプリケーションウィンドウは同じ画面サイズである必要があります。

そのため、QTPはデータベースに接続するための組み込みサポートを提供しませんが、VBScriptテスターを使用すると、ADODBオブジェクトを使用してデータベースに接続して対話できます。

ADODBには、データベースを操作できる4つのプロパティまたはメソッドがあります。彼らは-

  • ADODB.Connection −データベースへの接続を確立するために使用されます

  • ADODB.Command − SQLコマンド(クエリまたはストアドプロシージャ)の実行に使用されます

  • ADODB.Fields −クエリ/ストアドプロシージャの実行後にレコードセットから特定の列をフェッチするために使用されます

  • ADODB.Recordset −データベースからデータをフェッチするために使用されます

データベースに接続する方法は?

データベースは、接続文字列を使用して接続できます。各データベースは、接続方法が異なります。ただし、接続文字列はwww.connectionstrings.comを使用して構築できます。

次のパラメータを使用してデータベースに接続する方法を見てみましょう-

  • Database Type −MSSQLサーバー

  • Server Name − SQLEXPRESS

  • Database Name −トライアル

  • User Id − sa

  • password − password123

クエリの出力は、SQL Server ManagementStudioに次のように表示されます-

Dim objConnection 
'Set Adodb Connection Object
Set objConnection = CreateObject("ADODB.Connection")     
Dim objRecordSet 
 
'Create RecordSet Object
Set objRecordSet = CreateObject("ADODB.Recordset")     
 
Dim DBQuery 'Query to be Executed
DBQuery = "Select NAME from dbo.EMPLOYEE where AGE = 29"
 
'Connecting using SQL OLEDB Driver
objConnection.Open "Provider = sqloledb.1;Server =.\SQLEXPRESS;
User Id = sa;Password=Password123;Database = Trial"
 
'Execute the Query
objRecordSet.Open DBQuery,objConnection
 
'Return the Result Set
Value = objRecordSet.fields.item(0)				
msgbox Value
 
' Release the Resources
objRecordSet.Close        
objConnection.Close		
 
Set objConnection = Nothing
Set objRecordSet = Nothing

結果

上記のスクリプトを実行すると、出力は次のようにメッセージボックスに表示されます-

XMLは、人間と機械の両方が読み取れる形式でデータを格納するように設計されたマークアップ言語です。XMLを使用すると、コンピューターとデータベースシステム間でデータを簡単に交換することもできます。

サンプルXMLとその主要な要素を以下に示します-

XMLへのアクセス

Const XMLDataFile = "C:\TestData.xml"
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = False
xmlDoc.Load(XMLDataFile)

' Getting the number of Nodes (books)
Set nodes = xmlDoc.SelectNodes("/bookstore/book")
Print "Total books: " & nodes.Length    ' Displays 2

' get all titles
Set nodes = xmlDoc.SelectNodes("/Booklib/book/value/text()")

' get their values
For i = 0 To (nodes.Length - 1)
   Title = nodes(i).NodeValue
   Print "Title is" & (i + 1) & ": " & Title
Next

XMLの比較

与えられた2つのXMLを比較できます-

Dim xmlDoc1
Dim xmlDoc2

' Load the XML Files
Set xmlDoc1 = XMLUtil.CreateXMLFromFile ("C:\File1.xml")
Set xmlDoc2 = XMLUtil.CreateXMLFromFile ("C:\File2.xml")

'Use the compare method of the XML to check if they are equivalent
Comp = xmlDoc1.Compare (xmlDoc1, xmlDoc2)

'Returns 1 if the two files are the same
If Comp = 1 Then
   Msgbox "XML Files are the Same"
Else
   Msgbox "XML Files are Different"
End if

QTPスクリプトは、オブジェクトがオブジェクトリポジトリに存在する場合にのみ実行できます。オブジェクトの説明は、記述プログラミングを使用して作成されます-

  • テスターがオブジェクトリポジトリに存在しないオブジェクトに対して操作を実行したい場合

  • アプリケーション内のオブジェクトが本質的に非常に動的である場合。

  • オブジェクトリポジトリが大きくなると、オブジェクトリポジトリのサイズが大きくなるため、パフォーマンスが低下します。

  • フレームワークが構築されたとき、オブジェクトリポジトリをまったく使用しないことが決定されました。

  • テスターが、オブジェクトの固有のプロパティを知らなくても、実行時にアプリケーションに対してアクションを実行したい場合。

構文

記述的プログラミング手法を使用してスクリプトを作成するには、2つの方法があります。彼らは-

  • 説明オブジェクト
  • 説明文字列

説明オブジェクト

スクリプトは、使用されるプロパティとそれに対応する値に依存する説明オブジェクトを使用して開発されます。次に、これらの説明を使用してスクリプトを作成します。

'Creating a description object
Set btncalc = Description.Create()

'Add descriptions and properties
btncalc("type").value = "Button"
btncalc("name").value = "calculate"
btncalc("html tag").value = "INPUT"

' Use the same to script it
Browser("Math Calc").Page("Num Calculator").WebButton(btncalc).Click

説明文字列

オブジェクトの説明は、以下に示すように、プロパティと値を文字列として使用して作成されます。

Browser("Math Calc").Page("Num Calculator").WebButton("html 
tag:=INPUT","type:=Button","name:=calculate").Click

子オブジェクト

QTPは、オブジェクトのコレクションを作成できるようにするChildObjectsメソッドを提供します。親オブジェクトはChildObjectsの前にあります。

Dim oDesc
Set oDesc = Description.Create
oDesc("micclass").value = "Link"

'Find all the Links
Set obj = Browser("Math Calc").Page("Math Calc").ChildObjects(oDesc)

Dim i
'obj.Count value has the number of links in the page

For i = 0 to obj.Count - 1	 
   'get the name of all the links in the page			
   x = obj(i).GetROProperty("innerhtml") 
   print x 
Next

序数識別子

記述プログラミングは、序数識別子に基づいてスクリプトを記述するために使用されます。これにより、2つ以上のオブジェクトが同じプロパティを持っている場合に、QTPがそれらのオブジェクトに作用できるようになります。

' Using Location
Dim Obj
Set Obj = Browser("title:=.*google.*").Page("micclass:=Page")
Obj.WebEdit("name:=Test","location:=0").Set "ABC"
Obj.WebEdit("name:=Test","location:=1").Set "123"
 
' Index
Obj.WebEdit("name:=Test","index:=0").Set "1123"
Obj.WebEdit("name:=Test","index:=1").Set "2222"
 
' Creation Time
Browser("creationtime:=0").Sync
Browser("creationtime:=1").Sync
Browser("creationtime:=2").Sync

QTP自体は、HP-QTPが提供するCOMインターフェイスを使用して自動化できます。自動化オブジェクトモデルは、テスターが構成設定を制御し、QTPインターフェイスを使用してスクリプトを実行するのに役立つオブジェクト、メソッド、およびプロパティのセットです。制御できる(ただしこれらに限定されない)主要な構成/アクションを以下に示します-

  • テストに必要なすべてのアドインをロードします
  • 実行中にQTPを表示します
  • 指定された場所を使用してテストを開きます
  • 関数ライブラリを関連付けます
  • 共通オブジェクトの同期タイムアウトを指定します
  • 反復の開始と終了
  • スマートIDの有効化/無効化
  • エラー設定について
  • データテーブルパス
  • リカバリシナリオの設定
  • ログ追跡設定

QTP 11.5xは、「スタート」>>「すべてのプログラム」>>「HPソフトウェア」>>「HP統合機能テスト」>>「ドキュメント」>>「統合」に移動して参照できる自動化オブジェクトモデルに関する独占的なドキュメントを提供します。機能テスト自動化リファレンス」。

AOMスクリプトを生成する

テスターは、「スクリプトの生成」オプションを使用して、QTP自体からAOMスクリプトを生成できます。以下に示すように、[実行] >> [設定] >> [プロパティ]タブ>> [スクリプトの生成]に移動します-

' A Sample Script to Demostrate AOM
Dim App 'As Application
Set App = CreateObject("QuickTest.Application")
App.Launch
App.Visible = True

App.Test.Settings.Launchers("Web").Active = False
App.Test.Settings.Launchers("Web").Browser = "IE"
App.Test.Settings.Launchers("Web").Address = "http://easycalculation.com/"
App.Test.Settings.Launchers("Web").CloseOnExit = True

App.Test.Settings.Launchers("Windows Applications").Active = False
App.Test.Settings.Launchers("Windows Applications").Applications.RemoveAll
App.Test.Settings.Launchers("Windows Applications").RecordOnQTDescendants = True
App.Test.Settings.Launchers("Windows Applications").RecordOnExplorerDescendants = False
App.Test.Settings.Launchers("Windows Applications").RecordOnSpecifiedApplications = True

App.Test.Settings.Run.IterationMode = "rngAll"
App.Test.Settings.Run.StartIteration = 1
App.Test.Settings.Run.EndIteration = 1
App.Test.Settings.Run.ObjectSyncTimeOut = 20000
App.Test.Settings.Run.DisableSmartIdentification = False
App.Test.Settings.Run.OnError = "Dialog"

App.Test.Settings.Resources.DataTablePath = "<Default>"
App.Test.Settings.Resources.Libraries.RemoveAll

App.Test.Settings.Web.BrowserNavigationTimeout = 60000
App.Test.Settings.Web.ActiveScreenAccess.UserName = ""
App.Test.Settings.Web.ActiveScreenAccess.Password = ""

App.Test.Settings.Recovery.Enabled = True
App.Test.Settings.Recovery.SetActivationMode "OnError"
App.Test.Settings.Recovery.Add "D:\GUITest2\recover_app_crash.qrs", 
   "Recover_Application_Crash", 1
App.Test.Settings.Recovery.Item(1).Enabled = True 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' System Local Monitoring settings
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
App.Test.Settings.LocalSystemMonitor.Enable = false
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Log Tracking settings
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
With App.Test.Settings.LogTracking
   .IncludeInResults = False
   .Port = 18081 
   .IP = "127.0.0.1"
   .MinTriggerLevel = "ERROR"
   .EnableAutoConfig = False
   .RecoverConfigAfterRun = False
   .ConfigFile = ""
   .MinConfigLevel = "WARN" 
End With

フレームワークは、一連の標準を適用する一連のガイドライン/ベストプラクティスを定義します。これにより、エンドユーザーが簡単に作業できるようになります。自動化フレームワークにはさまざまな種類があり、最も一般的なものを以下に示します-

  • キーワード駆動型フレームワーク
  • データ駆動型フレームワーク
  • ハイブリッドフレームワーク

キーワード駆動型フレームワーク

キーワード駆動型テストは、機能自動化テストフレームワークの一種であり、テーブル駆動型テストまたはアクションワードベースのテストとも呼ばれます。

キーワード駆動型テストでは、テーブル形式(通常はスプレッドシート)を使用して、実行する各関数のキーワードまたはアクションワードを定義します。

利点

  • 初心者または非技術的なテスターに​​最適です。

  • このアプローチを使用して、より抽象的な方法でテストを作成できるようにします。

  • キーワード駆動型テストでは、テスト用に安定したビルドが提供される前であっても、SDLCの早い段階で自動化を開始できます。

  • 高度な再利用性があります。

短所

  • キーワードとそれに関連する機能の開発への初期投資には、さらに時間がかかる場合があります。

  • これは、技術的に有能なテスターに​​対する制限として機能する可能性があります。

データ駆動型フレームワーク

データ駆動型テストは、テストを実行するたびに同じハードコードされた値を使用する代わりに、テストデータや出力値がデータファイルから読み取られるテストスクリプトの作成です。このようにして、テスターは、アプリケーションがさまざまな入力を効果的に処理する方法をテストできます。次のデータファイルのいずれかになります-

  • datapools
  • Excelファイル
  • ADOオブジェクト
  • CSVファイル
  • ODBCソース

フロー図

データドリブンテストは、次の図で最もよく理解できます。

利点

  • データ駆動型フレームワークにより、コードの量が少なくなります
  • スクリプトの問題を維持および修正するための柔軟性が向上します
  • テストデータを作成できます

短所

  • 異なるデータセットを理解するには、各スクリプトが異なる必要があります。

ハイブリッドフレームワーク

ハイブリッドフレームワークは、キーワード駆動型フレームワークとデータ駆動型フレームワークの組み合わせであり、次のフロー図を使用して最もよく説明できます。

影響要因

以下は、フレームワークを開発する際に考慮すべきパラメーターです。影響要因は以下のとおりです-

  • フレームワークファイルは、SVN、CVS、MSソース管理などのバージョン管理ソフトウェアをサポートする必要があります

  • フレームワークは、QA、SAT、DEVなどのさまざまな環境でのスクリプトの実行をサポートする必要があります

  • オブジェクトが変更されると、スクリプトは最小限の変更で実行される必要があります。

  • フレームワークはそれ自体を構成し、フォルダー/データベースの作成などの前提条件を処理する必要があります。

  • スクリプト/アプリケーションの問題を簡単に見つけられるように、フレームワークには堅牢なレポート構造が必要です。

  • フレームワークは、使いやすいように柔軟性を高める必要があります

  • フレームワークは、ファイル、機能、および変更履歴が正しく維持されるように、コーディング標準に従う必要があります。

次の章では、単純なフレームワークを設計する方法を学習します。

サンプルアプリケーションを使用して、単純なフレームワークを設計しましょう。テスト対象のアプリケーションのいくつかのシナリオを自動化し、再利用可能な関数を記述します。

テスト中のサンプルアプリケーションは "Calculator"、Windowsの一部として利用できるデフォルトのアプリケーション。フレームワークのさまざまなコンポーネントを作成しましょう。ここでは、ハイブリッドフレームワークを開発し、かなり単純なアプリケーションであるオブジェクトリポジトリを使用します。ただし、このフレームワークは、複雑なアプリケーションをサポートするように拡張することもできます。

フレームワークのフォルダ構造は以下のとおりです。

フォルダ構造の説明−

  • Master Driver Script−実行全体を駆動するスクリプト。実行に必要な前提条件と初期設定を実行します。

  • Library Files −関数ライブラリを形成する関連関数。

  • Data Table −実行に必要なテストデータ。

  • Object Repository −QTPがオブジェクトをシームレスに認識できるようにするオブジェクトとそのプロパティ。

  • Execution Logs −フォルダには、ユーザー機能と機能実行履歴を含む実行ログファイルが含まれています。

マスタードライバースクリプト

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
' MASTER DRIVER SCRIPT NAME    : Calculator 
' DESCRIPTION                  : Drivers Script to Execute Automated Test for 
   the Calculator  
' AUTHOR                       : Tutorials Point 
' DATE CREATED                 : 30-Dec-2013 
' OBJECT REPOSITORY ASSOCIATED : Calc.tsr 
' LIBRARY FILES ASSOCIATED     : calculator.qfl, Common.qfl 
' MODIFICATION LOG

' ---------------------------------------------------- 
' First Version       Tutorials point 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
Option Explicit  

Public ExecDrive  

' Get the Root folder of the Test  so that we can make use of relative paths. 
Dim x : x = Instr(Environment.Value("TestDir"),"Driver")-2 
ExecDrive = mid(Environment.Value("TestDir"),1,x)  

' Get the path of Libraries using relative to the current Drive 
Dim LibPath : LibPath = ExecDrive+"\Libraries\"  

' Dynamically Load the Function Libraries 
LoadFunctionLibrary LibPath + "Calculator.qfl", LibPath + "common_utils.qfl"   

' Capturing the Start Time 
' clscommon is the class object created in common.qfl library file 
clscommon.StartTime = Time()  

' Launching the Application 
SystemUtil.Run "C:\Windows\System32\Calc.exe" : wait (2)  

' Initialize the Data Table Path  
Dim FileName : FileName  = ExecDrive+"\TestData\Calculator.xls" 
Dim SheetSource : SheetSource  = "Calc_test" 
Dim SheetDest : SheetDest = "Global"  

' Import the DataTable into the QTP Script 
DataTable.ImportSheet  FileName , SheetSource , SheetDest   

' Object Repository Path 
Dim RepPath : RepPath = ExecDrive+"\Object_Repository\Calc.tsr" 
RepositoriesCollection.RemoveAll()  
RepositoriesCollection.Add(RepPath)   

' To Keep a Count on iteration 
Dim InttestIteration                   
Dim InttestRows : InttestRows = datatable.GetRowCount   

'  Fetching Date-TimeStamp which will be unique for Naming the Execution Log File 
clscommon.StrDateFormatted = day(date()) & "_" &  MonthName(Month(date()),true) &  
 "_" & YEAR(date())& "_"&hour(now)&"_"&minute(now)  

 ' Name the LogFile  
clscommon.StrLogFile = ExecDrive & "\Execution Logs\" &  
clscommon.StrDateFormatted & ".txt"   

' Create the Execution LogFile which captures the result 
clscommon.Fn_FileCreate(clscommon.StrLogFile)  

' Iniitialize the Parameters and all the relevant Test Details 
Call Fn_InitializeLogFile()  

' Kill all the previous calculator process  
Call fn_Kill_Process("calc.exe")  

For InttestIteration = 1 to InttestRows 
   datatable.SetCurrentRow InttestIteration  
   Dim StrExecute : StrExecute = Ucase(Trim(datatable.Value("Run","Global"))) 
   If StrExecute = "Y" Then  
      clscommon.Number1 = Trim(datatable.Value("Number_1","Global"))  
      clscommon.Number2 = Trim(datatable.Value("Number_2","Global"))  
      clscommon.Number3 = Trim(datatable.Value("Number_3","Global"))  
   
      clscommon.Number4 = Trim(datatable.Value("Number_4","Global"))  
      clscommon.Number5 = Trim(datatable.Value("Number_5","Global"))  
      clscommon.Number6 = Trim(datatable.Value("Number_6","Global"))  
   
      clscommon.Test_Case_ID  = 
         Trim(datatable.Value("Test_Case_ID","Global"))' 
            : clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
      clscommon.tcScenario = 
         Trim(datatable.Value("Scenario","Global"))' 
            : clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
      Dim  Expected_Val :  Expected_Val = 
         Trim(datatable.Value("Expected_Val","Global"))'                        
            :  clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
   
      Select case clscommon.tcScenario  
         Case "Add" 
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("+",Expected_Val) 
    
         Case "Subtract"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("-",Expected_Val) 
    
         Case "Multiply"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("*",Expected_Val) 
    
         Case "Divide"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("/",Expected_Val) 
    
         Case "Sqrt"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("sqt",Expected_Val) 
      End Select 
   End If  
Next  

' Calling the End Test to Add the result Footer in exec log file. 
Call fn_End_test()  

'  =====================  End of Master Driver Script =====================

ライブラリファイル

電卓関数は、拡張子.qflまたは.vbsで保存された別の関数ファイルに書き込まれます。これらの機能は、アクション間で再利用できます。

'  Calculator. Qfl File :: Associated Function Library for Calculator Master Driver  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : Fn_InitializeLogFile 
' DESCRIPTION       : Function to Write the Initial Values in the Log File 
' INPUT PARAMETERS  : varExecDrive,StrDB,StrUId,Strpwd,StrNewDB 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : Pass or Fail message 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
Public Function Fn_InitializeLogFile() 
   clscommon.LogWrite "********************************************" 
   clscommon.LogWrite "Calc Automation Started" 
End Function 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : fnCalculate 
' DESCRIPTION       : Function to perform Arithmetic Calculations 
' INPUT PARAMETERS  : operator,Expected_Val 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : Pass or Fail message 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =    
Function fnCalculate(operator,Expected_Val) 
   clscommon.LogWrite "Executing the Function 'fnCalculate' " 

   Window("Calculator").Activate 
    
   If Trim(clscommon.Number1) <> ""  Then
      Window("Calculator").WinButton(clscommon.Number1).Click 
   If Trim(clscommon.Number2) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number2).Click 
   If Trim(clscommon.Number3) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number3).Click 

   Window("Calculator").WinButton(operator).Click 
   If Trim(clscommon.Number4) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number4).Click 
   If Trim(clscommon.Number5) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number5).Click 
   If Trim(clscommon.Number6) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number6).Click 

   Window("Calculator").WinButton("=").Click 
   Dim ActualVal : ActualVal  = 
      Window("Calculator").WinEdit("Edit").GetROProperty("text") 
   clscommon.LogWrite "The Actual Value after the Math Operation is "& ActualVal 
  
   If Trim(ActualVal) = Trim(Expected_Val) Then 
      clscommon.WriteResult "Pass",  clscommon.Test_Case_ID , 
         clscommon.tcScenario , " Expected Value matches with Actual Value :: " 
            & ActualVal 
    
   Else 
      clscommon.WriteResult "Fail",  clscommon.Test_Case_ID , 
         clscommon.tcScenario , " Expected Value - " & Expected_Val & " Does NOT matches 
            with Actual Value :: " & ActualVal 
   End If 
    
   Window("Calculator").WinButton("C").Click 
    
   If Err.Number <> 0  Then 
      clscommon.LogWrite  "Execution Error : The Error Number is ::  " & 
         Err.Number & " The Error Description is " & Err.Description 
      Err.Clear 
   End If 
    
   clscommon.LogWrite "Exiting the Function 'fnCalculate' " 
End Function  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = 
' FUNCTION NAME     : fn_Kill_Process 
' DESCRIPTION       : Function to Kill the process by name 
' INPUT PARAMETERS  : Application name to be killed 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : NIL 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = =  
Function fn_Kill_Process(process) 
   Dim strComputer ,  strProcessToKill , objWMIService , colProcessstrComputer = "." 
   strProcessToKill = process 
    
   Set objWMIService = GetObject("winmgmts:" _& 
      "{impersonationLevel=impersonate}!\\" _& strComputer & "\root\cimv2") 
    
   Set colProcess = objWMIService.ExecQuery _("Select * from Win32_Process 
      Where Name = '" & strProcessToKill & "'") 
    
   count = 0 
   For Each objProcess in colProcess 
      objProcess.Terminate() 
      count = count + 1 
   Next 
End Function  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : fn_End_test 
' DESCRIPTION       : Function to finish the test Execution process 
' INPUT PARAMETERS  : Application name to be killed 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : NIL 
' DATE CREATED      : 20/Dec/2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
Function fn_End_test() 
   clscommon.LogWrite "Status Message - Executing the Function 'fn_End_test' " 
    
   Window("Calculator").Close 
   On Error Resume Next 
    
   clscommon.StopTime = Time() 
   clscommon.ElapsedTime = DateDiff("n",clscommon.StartTime,clscommon.StopTime) 
   Dim Totaltests  
   Totaltests = clscommon.gintPassCount+ clscommon.gintFailCount
   clscommon.LogWrite "## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
   clscommon.LogWrite "##  The Execution Start Time  ::  " & clscommon.StartTime 
   clscommon.LogWrite "##  The Execution End Time   ::  " & clscommon.StopTime 
   clscommon.LogWrite "##  The Time Elapsed ::   " & clscommon.ElapsedTime & " Minutes " 
   clscommon.LogWrite "##  The OS ::  " & Environment.Value("OS") 
   clscommon.LogWrite "##  The Total No of Test Cases Executed  ::  " & Totaltests 
   clscommon.LogWrite "##  The No. of Test Case Passed ::  " & clscommon.gintPassCount 
   clscommon.LogWrite "##  The No. of Test Case Failed ::  " & clscommon.gintFailCount 
   clscommon.LogWrite "## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
   SystemUtil.CloseDescendentProcesses 
End Function  
'  ===============   End of Calculator. Qfl   ============================= '

もう1つのライブラリファイルは、関数を含む「common_utils.qfl」であり、出力をテキストファイルに書き込むことができます。

Set clscommon = New OS_clsUtils  

'Creating a class file to handle global variables. 
Class OS_clsUtils 
   Dim StrLogFile 
   Dim StrDateFormatted 
   Dim Result 
    
   Dim  Number1, Number2 , Number3  
   Dim  Number4, Number5 , Number6  
   Dim Test_Case_ID , tcScenario 
   Dim StartTime, StopTime, ElapsedTime 
   
   Dim gintPassCount , gintFailCount , gintWarningCount ,  gintdoneCount,  
      gintinfoCount 
    
   Function Fn_FileCreate(strFileName) 
      Dim objFSO:  Set objFSO = CreateObject("Scripting.FileSystemObject") 
      On Error Resume Next 
      
      Dim objTextFile : Set objTextFile = objFSO.CreateTextFile(strFileName) 
      objTextFile.Close 
       
      Set objTextFile = Nothing 
      Set objFSO = Nothing 
   End Function 
    
   Function LogWrite(sMsg) 
      Const ForAppending = 8 
       
      Dim objFSO : Set objFSO = CreateObject("scripting.FileSystemObject") 
      
      Dim objTextFile : Set objTextFile = objFSO.OpenTextFile 
         (clscommon.StrLogFile, ForAppending, True) 
       
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & sMsg 
      objTextFile.Close 
       
      Set objTextFile = Nothing 
      Set objFSO = Nothing 
   End Function 
    
   Function WriteResult(strStatus,functionName,functionDescription,Result) 
      Const ForAppending = 8 
      Dim objFSO : Set objFSO = CreateObject("scripting.FileSystemObject") 
      Dim objTextFile : Set objTextFile = objFSO.OpenTextFile 
         (clscommon.StrLogFile, ForAppending, True) 
       
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & "  
            * * * * * * Test Case Exec Details  * * * * * " 
      
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test staus :: " & strStatus 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Tese ID ::  " & functionName 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test Description :: " 
            & functionDescription 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test Result Details :: " & Result 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & "  
            * * * * * * * * * * * * * * * * * * * * * * * *  * * * * * * * * * * * " 
      objTextFile.Close 
       
      Set objTextFile = Nothing  
      Set objFSO = Nothing 
       
      Select Case Lcase(strStatus) 
         Case "pass" 
            gintPassCount = gintPassCount + 1 
          
         Case "fail" 
            gintFailCount = gintFailCount+1 
      End Select 
   End Function 
End Class 
'   =====================   End of common_Utils.qfl =====================

オブジェクトリポジトリ

オブジェクトリポジトリには、ユーザーが操作するすべてのオブジェクトがあります。以下の画像は、calc.tsrという名前でリポジトリに追加されたすべてのオブジェクトのリストを示しています。

データ表

DataTableには、テストを実行し、QTPがオブジェクトに作用するデータをテストするキーワードが含まれています。

実行ログ

実行ログファイルまたは出力ファイルには、テスターがスクリプトの失敗時にデバッグできるようにするユーザーアクションと機能ログが含まれています。

8/Jan/2014 5:09:16 PM: ************************************************* 
8/Jan/2014 5:09:16 PM: Calc Automation Started 
8/Jan/2014 5:09:16 PM: === Inside the Test Set  ::   Add  === 
8/Jan/2014 5:09:16 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: The Actual Value after the Math Operation is 949.  
8/Jan/2014 5:09:17 PM:  * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:17 PM: Test staus :: Pass 
8/Jan/2014 5:09:17 PM: Tese ID ::  TC_001 
8/Jan/2014 5:09:17 PM: Test Description :: Add 
8/Jan/2014 5:09:17 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 949.  
8/Jan/2014 5:09:17 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * 
* * * * * * * * * 
  
8/Jan/2014 5:09:17 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: === Inside the Test Set  ::   Subtract  === 
8/Jan/2014 5:09:17 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: The Actual Value after the Math Operation is 415.  
8/Jan/2014 5:09:17 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:17 PM: Test staus :: Pass 
8/Jan/2014 5:09:17 PM: Tese ID ::  TC_002 
8/Jan/2014 5:09:17 PM: Test Description :: Subtract 
8/Jan/2014 5:09:17 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 415.  
8/Jan/2014 5:09:17 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * *

8/Jan/2014 5:09:17 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: === Inside the Test Set  ::   Multiply  === 
8/Jan/2014 5:09:17 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:18 PM: The Actual Value after the Math Operation is 278883.  
8/Jan/2014 5:09:18 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:18 PM: Test staus :: Pass 
8/Jan/2014 5:09:18 PM: Tese ID ::  TC_003 
8/Jan/2014 5:09:18 PM: Test Description :: Multiply 
8/Jan/2014 5:09:18 PM:  Test Result Details ::  Expected Value matches with 
   Actual Value :: 278883.  
8/Jan/2014 5:09:18 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * *   

8/Jan/2014 5:09:18 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:18 PM: === Inside the Test Set  ::   Divide  === 
8/Jan/2014 5:09:18 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:19 PM: The Actual Value after the Math Operation is 3.  
8/Jan/2014 5:09:19 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:19 PM: Test staus :: Pass 
8/Jan/2014 5:09:19 PM: Tese ID ::  TC_004 
8/Jan/2014 5:09:19 PM: Test Description :: Divide 
8/Jan/2014 5:09:19 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 3.  
8/Jan/2014 5:09:19 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * * 
  
8/Jan/2014 5:09:19 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:19 PM: === Inside the Test Set  ::   Sqrt  === 
8/Jan/2014 5:09:19 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:20 PM: The Actual Value after the Math Operation is 10.  
8/Jan/2014 5:09:20 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:20 PM: Test staus :: Pass 
8/Jan/2014 5:09:20 PM: Tese ID ::  TC_005 
8/Jan/2014 5:09:20 PM: Test Description :: Sqrt 
8/Jan/2014 5:09:20 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 10.  
8/Jan/2014 5:09:20 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * * 
* * * * * * * 

8/Jan/2014 5:09:20 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:20 PM: Status Message - Executing the Function 'fn_Finish_test'  
8/Jan/2014 5:09:20 PM: ## # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # #  
8/Jan/2014 5:09:20 PM: ##  The Execution Start Time  ::  5:09:14 PM 
8/Jan/2014 5:09:20 PM: ##  The Execution End Time   ::  5:09:20 PM 
8/Jan/2014 5:09:20 PM: ##  The Time Elapsed ::   0 Minutes  
8/Jan/2014 5:09:20 PM: ##  The OS ::  Microsoft Windows Vista Server 
8/Jan/2014 5:09:20 PM: ##  The Total No of Test Cases Executed  ::  25 
8/Jan/2014 5:09:20 PM: ##  The No. of Test Case Passed ::  25 
8/Jan/2014 5:09:20 PM: ##  The No. of Test Case Failed ::   
8/Jan/2014 5:09:20 PM: ## # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # #