Qtp-quick-guide

提供:Dev Guides
移動先:案内検索

QTP-はじめに

QTPは* Q uick T est P * rofessionalの略で、* H ewlett P ackard (HP)*の製品です。 このツールは、スクリプト開発が完了すると、テスターが監視なしでシームレスに自動機能テストを実行できるようにします。

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

テストツール

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

ツールの分類

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

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

ツールの種類

Sr.No. Tool Type Used for Used by
1 Test Management Tool Test Managing, scheduling, defect logging, tracking and analysis. Testers
2 Configuration management tool For Implementation, execution, tracking changes All Team members
3 Static Analysis Tools Static Testing Developers
4 Test data Preperation Tools Analysis and Design, Test data generation Testers
5 Test Execution Tools Implementation, Execution Testers
6 Test Comparators Comparing expected and actual results All Team members
7 Coverage measurement tools Provides structural coverage Developers
8 Performance Testing tools Monitoring the performance, response time Testers
9 Project planning and Tracking Tools For Planning Project Managers
10 Incident Management Tools For managing the tests Testers

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

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

QTP –歴史と進化

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

バージョン履歴

次に、QTPのバージョン履歴を見てみましょう。

Versions Timelines
Astra Quick Test v1.0 to v5.5 - Mercury Interactive May 1998 to Aug 2001
QuickTest Professional v6.5 to v9.0 - Mercury Interactive Sep 2003 to Apr 2006
Hp-QuickTest Professional v9.1 to v11.0 - Acquired and Released by HP Feb 2007 to Sep 2010
Hp-Unified Functional Testing v11.5 to v11.53 2012 to Nov 2013

利点

  • VBScriptを使用した自動テストの開発には、高度なスキルを持つコーダーは必要なく、他のオブジェクト指向プログラミング言語と比較すると比較的簡単です。
  • 使いやすさ、ナビゲーションのしやすさ、結果の検証、レポートの生成。
  • 簡単なスケジューリングと監視を可能にするテスト管理ツール(HP Quality Center)と簡単に統合できます。
  • モバイルアプリケーションのテストにも使用できます。
  • HP製品であるため、HPおよび技術的な問題に対処するためのフォーラムにより、完全なサポートが提供されます。

デメリット

  • Seleniumとは異なり、QTPはWindowsオペレーティングシステムでのみ動作します。
  • ブラウザのすべてのバージョンがサポートされているわけではなく、テスターはメジャーバージョンごとにパッチがリリースされるのを待つ必要があります。
  • とはいえ、商用ツールであるため、ライセンス費用は非常に高くなります。
  • スクリプティング時間は短くなりますが、CPUとRAMに負荷がかかるため、実行時間は比較的長くなります。

QTP-自動テストプロセス

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

自動テストプロセス

  • テスト自動化可能性分析-最初のステップは、アプリケーションを自動化できるかどうかを確認することです。 すべてのアプリケーションが制限のために自動化できるわけではありません。
  • 適切なツールの選択-次の最も重要なステップはツールの選択です。 それは、アプリケーションが構築されるテクノロジー、その機能、および使用法に依存します。
  • 適切なフレームワークを評価-ツールを選択したら、次のアクティビティは適切なフレームワークを選択することです。 フレームワークにはさまざまな種類があり、各フレームワークには独自の意味があります。 このチュートリアルの後半で、フレームワークについて詳しく説明します。
  • 概念実証の構築-概念実証(POC)は、ツールがアプリケーションの自動化をサポートできるかどうかを評価するためのエンドツーエンドのシナリオで開発されています。 エンドツーエンドのシナリオで実行されます。これにより、主要な機能を自動化できます。
  • 自動化フレームワークの開発-POCの構築後、フレームワーク開発が実行されます。これは、テスト自動化プロジェクトを成功させるための重要なステップです。 フレームワークは、アプリケーションで使用されるテクノロジーとその主要な機能を入念に分析した後に構築する必要があります。
  • テストスクリプトの開発、実行、分析-スクリプトの開発が完了すると、スクリプトが実行され、結果が分析され、欠陥があればログに記録されます。 通常、テストスクリプトはバージョン管理されています。

QTP-環境のセットアップ

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

ダウンロードURL-https://community.softwaregrp.com/t5/Quality-Center-ALM-User/QTP-10-0-download-link/td-p/996061[QTP]

インストール手順

  • ステップ1 *-[トライアルとデモ]リンクをクリックし、以下に示すように[HP Unified Functional Testing 11.50 CC英語SW Eメディア評価]を選択します-

ステップ1のダウンロードとインストール

  • ステップ2 *-「HP Unified Functional Testing 11.50」を選択すると、ダウンロードウィザードが開きます。 個人情報を入力して、[次へ]をクリックします。

ダウンロードおよびインストール手順2

  • ステップ3 *-「利用規約」を読み、「次へ」をクリックします。

ダウンロードおよびインストール手順3

  • ステップ4 *-ダウンロードウィンドウが開きます。 次に、「ダウンロード」ボタンをクリックします。

ダウンロードおよびインストール手順4

  • ステップ5 *-ダウンロードしたファイルの形式は.RARです。 ここで、アーカイブを解凍する必要があります。フォルダーの内容は次のようになり、Setup.exeを実行します。

ステップ5のダウンロードとインストール

  • ステップ6 *-セットアップファイルの実行時に、インストールするために、以下に示すようにリストから「Unified Functional Testing Setup」を選択します-

ダウンロードおよびインストール手順6

  • ステップ7 *-[次へ]をクリックして続行します。

ダウンロードおよびインストール手順7

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

ステップ8をダウンロードしてインストール

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

ステップ10のダウンロードとインストール

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

ステップ11のダウンロードとインストール

  • ステップ11 *-追加のインストール要件が完了すると、目盛りが表示され、コンポーネントが正常にインストールされたことが示されます。 次に、閉じるをクリックします。

ダウンロードおよびインストール手順12

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

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

ダウンロードおよびインストール手順13

  • ステップ2 *-ライセンスページが表示されます。 トライアルライセンスがインストールされているため、[続行]をクリックできます。

ダウンロードおよびインストールステップ14

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

-すべてのアドインではなく、必要なアドインのみをロードして、[OK]をクリックします。

ステップ15のダウンロードとインストール

  • ステップ4 *-必要なアドインをロードした後、ユーザーにUFT 11.5ツールが開き、以下に示すようにUFTの最初の外観が表示されます-

ダウンロードおよびインストール手順16

QTP-記録と再生

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

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

  • ステップ1 *-以下に示すように、スタートページから[新規]テストをクリックします-

ホームページからの新しいテスト選択

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

テストの種類の選択

  • ステップ3 *-新しいテストが作成されると、以下に示すように新しいテスト画面が開きます。 ここで、「Action1」タブをクリックします。このタブはデフォルトで1アクションで作成されます。

新しいテストページ

  • ステップ4 *-「記録」メニューをクリックし、以下に示すように「記録と実行設定」を選択します-

記録と実行の設定

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

記録と実行の設定

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

生成されたスクリプト

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

スクリプトの再生

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

結果ウィンドウ分析

記録と再生の意義

  • UFTがテクノロジー/アプリケーションをサポートできるかどうかを検証するための予備調査方法として使用されます。
  • 長期メンテナンスを必要としないアプリケーションまたは機能の基本機能のテストを作成するために使用されます。
  • マウスの動きとキーボード入力の両方を記録するために使用できます。

記録のモード

  • 通常の記録-これは、テスト対象のアプリケーションで実行されたオブジェクトと操作を記録するデフォルトの記録モードです。
  • アナログ記録-キーボードの動作だけでなく、画面またはアプリケーションウィンドウに対するマウスの動きも記録します。
  • 低レベル記録-これは、UFTがオブジェクトを認識するかどうかに関係なく、オブジェクトの正確な座標を記録します。 座標を記録するだけなので、マウスの動きは記録しません。
  • Insight Recording -UFTは、ネイティブプロパティではなく、外観に基づいて操作を記録します。

記録モードの選択方法

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

録画モードの選択

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

デフォルト、アナログ、低レベル記録モードで記録されたスクリプトは以下のとおりです-

' 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

洞察記録モードを使用した記録は以下のようになります-

Insight Recording Modes

QTP-オブジェクトリポジトリ

オブジェクトリポジトリ

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

以下の各トピックをクリックして、オブジェクトリポジトリとその関連機能の詳細をご覧ください。

Sr.No. Topic & Description
1

Object Spy and its Features

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

2

Working with Object Repository

オブジェクトリポジトリおよび関連する機能からオブジェクトを追加、編集、削除します。

3

Types of Object Repository

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

4

User-defined Objects

ユーザー定義オブジェクトを使用する状況を扱います。

5

Object Repository in XML

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

6

Comparing and Merging OR

Compare OR '、Merge OR’sなどの操作により、オブジェクトリポジトリを効果的に使用できます。

7

Ordinal Identifiers

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

8

Child Objects

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

QTP-アクション

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

Actions Functions
Action is an in-built feature of QTP. VBScript Functions are supported by both VBScript and QTP.
Actions parameters are passed by value only. Function parameters are passed either by by value or by ref.
Actions have extension .mts Functions are saved as .vbs or .qfl
Actions may or may not be reusable. Functions are always reusable.

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

アクションのプロパティ

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

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

アクションの種類

アクションの3種類があります-

  • 再利用不可能なアクション-それが設​​計されている特定のテストでのみ呼び出すことができ、一度だけ呼び出すことができるアクション。
  • 再利用可能なアクション-複数回呼び出せるアクション、それが存在するテスト、および他のテストでも使用できるアクション。
  • 外部の再利用可能なアクション-別のテストに保存されている再利用可能なアクションです。 外部アクションは呼び出しテストでは読み取り専用ですが、外部アクションのデータテーブル情報の編集可能なコピーと共にローカルで使用できます。

アクションの使用

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

Sr.No. Action Type & Description
1

Insert Call to New Action

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

2

Insert Call to Copy of Action

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

3

Insert Call to Existing Action

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

Qtp-datatables

QTP-チェックポイント

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

チェックポイントの種類

Sr.No. Type & Description
1

Standard Checkpoint

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

2

Bitmap Checkpoint

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

3 File Content Checkpoint
4

Table Checkpoint

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

5

Text Checkpoint

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

6

Text Area Checkpoint

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

7

Accessibility Checkpoint

ページを検証し、World Wide Web Consortium(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

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

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

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

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

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

QTP-同期

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

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

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

同期点を挿入する方法

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

「数値」リンクをクリックしてから「http://easycalculation.com/[www.easycalculation.com]」の「単純利息」計算機をクリックする間に同期点を挿入する必要があるとしましょう。 次に、上記のシナリオで同期点を挿入する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は、タイムアウト値を入力として使用して同期を実行するメソッドです。 繰り返しますが、これは動的な待機であるため、このオプションが推奨されます。

' 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-待つ

待機はハードコードされた同期ポイントであり、発生したイベントに関係なく待機します。 したがって、待機の使用は推奨されておらず、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組み込みの同期ポイントの挿入

  • ステップ1 *-記録モードに入ります。 ユーザーが記録モードでない場合、このオプションは無効になります。
  • ステップ2 *-[設計]→[同期ポイント]に移動します。
  • ステップ3 *-同期点にしたいオブジェクトを選択する必要があります。 オブジェクトを選択した後、以下に示すようにオブジェクトウィンドウが開きます-

QTP Sync Point

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

QTP Sync Point

  • ステップ5 *-スクリプトは次のように生成されます。これは、すでに説明したWaitProperty(Method 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は認識された説明を無視し、スマート識別メカニズムを使用してオブジェクトを認識します。

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

  • 基本フィルタのプロパティ-元のオブジェクトの本質を変更せずに値を変更できない特定のテストオブジェクトクラスの基本プロパティ。
  • オプションのフィルタプロパティ-他のプロパティも、プロパティが頻繁に変更される可能性は低いが、適用されなくなった場合は無視できる特定のクラスのオブジェクトを識別するのに役立ちます。

オブジェクトのスマート識別を有効にする

  • ステップ1 *-[ツール]→[オブジェクトの識別]に移動します。 オブジェクト識別ダイアログが開きます。
  • ステップ2 *-以下に示すように、環境、オブジェクトクラスを選択し、「スマート識別を有効にする」をオンにします-

スマート識別設定

  • ステップ3 *-[構成]をクリックし、基本およびオプションのフィルタープロパティを選択します。

スマート識別設定

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

スマート識別設定

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

スマート識別設定

  • ステップ6 *-以下に示すように、「ファイル」メニューの「設定」の下のテストスクリプトレベルで適用することにより、テストレベルを無効にすることもできます-

スマート識別設定

  • ステップ7 *-ステップ#6に従ってスマート識別が無効になっている場合、スクリプト実行中にオブジェクトにスマート識別は適用されません。
  • ステップ8 *-スマート識別がオフとしてオブジェクトが追加された場合、QTPは、後で有効にしたとしても、将来の認識にスマート識別を使用しません。

QTP-デバッグ

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

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

ブレークポイントを挿入した後、「赤」のドットとラインは以下に示すように赤で強調表示されます-

ブレークポイントを使用したデバッグ

Method ShortCut Description
Step Into F11 Used to execute each and every Step. Steps into the Function/Action and executes line by line. It pauses on each line after execution.
Step Over F10 Used to Step over the Function. Step Over runs only the current step in the active document.
Step Out Shift+F11 After Step Into the function, you can use the Step Out command. Step Out continues the run to the end of the function and then pauses the run session at the next line.

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

ブレークポイントのさまざまなオプションにアクセスするには、「実行」メニューをナビゲートします。

Sr.No. ShortCut & Description
1

F9

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

2

Ctrl+F9

BreakPointの有効化/無効化

3

Ctrl+Shift+F9

すべてのブレークポイントをクリア

4

Use Only Menu

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

デバッグペイン

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

ブレークポイントを使用したデバッグ

  • 出力-このタブには、印刷ステートメントのすべての出力が表示されます。
  • ウォッチ-このタブには、指定された式のブール出力が表示されます。
  • LocalVariables -このタブには、ローカル変数の出力が表示されます。

ウォッチペインには、以下に示すように出力式が表示されます-

ブレークポイントを使用したデバッグ

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

ブレークポイントを使用したデバッグ

QTP-エラー処理

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

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

エラーの種類

構文エラー

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

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

エラー処理

論理エラー

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

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

実行時エラー

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

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

実行時エラーの処理

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

1. テスト設定の使用-エラー処理は、以下に示すように「ファイル」>>「設定」>>「実行」タブに移動して、テスト設定を定義できます。 指定した設定のいずれかを選択して、「OK」をクリックします。

エラー処理

2. On Errorステートメントの使用-「On Error」ステートメントは、VBScriptエンジンがユーザーフレンドリーでないエラーメッセージを表示できるようにするのではなく、テスターが実行時エラーを処理する意図をVBScriptエンジンに通知するために使用されます。

  • On Error Resume Next -On Error Resume Nextは、エラーが発生したときにVBScriptエンジンに次のコード行を実行するよう通知します。
  • On Error Goto 0 -これは、テスターがエラー処理をオフにするのに役立ちます。

3. Errオブジェクトの使用-エラーオブジェクトは、コードを簡単にデバッグできる実行時エラー番号とエラーの説明をキャプチャする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. Exitステートメントの使用-Errオブジェクトと一緒にExitステートメントを使用して、Err.Number値に基づいてテスト、アクション、または反復を終了できます。 これらのExitステートメントのそれぞれを詳細に見てみましょう。

  • ExitTest -実行時の反復設定に関係なく、QTPテスト全体を終了します。
  • ExitAction -現在のアクションを終了します。
  • ExitActionIteration -アクションの現在の反復を終了します。
  • ExitTestIteration -QTPテストの現在の反復を終了し、次の反復に進みます。

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

  • 6. Reporter Object *-Reporter Objectは、実行結果にイベントを報告するのに役立ちます。 関係するアクション/ステップが合格/不合格かどうかを識別するのに役立ちます。
'Syntax: Reporter.ReportEventEventStatus, ReportStepName, Details,
[ImageFilePath]

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

QTP-回復シナリオ

復旧シナリオ

QTPスクリプトの実行中に、予期しないエラーが発生する場合があります。 これらの予期しないエラーからテストを回復し、残りのスクリプトの実行を継続するために、回復シナリオが使用されます。 以下に示すように、「リソース」→「Recovery Scenario Manager」に移動して、Recovery Scenario Managerにアクセスできます-

回復シナリオマネージャーアクセス

回復シナリオを作成する手順

  • ステップ1 *-[新規]回復シナリオボタンをクリックします。以下に示すように、回復シナリオウィザードが開きます-

回復シナリオマネージャー-アクセス

  • ステップ2 *-トリガーイベントを選択します。 それは、次の4つのイベントのいずれかで発生する可能性のあるイベントに対応しています-
  • ポップアップウィンドウ
  • オブジェクトの状態
  • テスト実行エラー
  • アプリケーションのクラッシュ
  • ステップ3 *-リカバリ操作ウィンドウが開きます。 回復操作は、次のスクリーンショットに示すように、次の操作のいずれかを実行できます-

回復シナリオマネージャーアクセス

  • ステップ4 *-適切な回復操作を指定した後、以下に示すように、回復後操作も指定する必要があります-

回復シナリオマネージャーアクセス

  • ステップ5 *-回復後の操作を指定した後、回復シナリオに名前を付けて、テストに追加して、アクティブ化できるようにします。

回復シナリオマネージャーアクセス

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

回復シナリオマネージャーアクセス

  • ステップ7 *-追加された回復シナリオは以下のようになり、[閉じる]ボタンをクリックして続行します。

回復シナリオマネージャーアクセス

  • ステップ8 *-[閉じる]ボタンをクリックした後、QTPは作成された回復シナリオを保存するようユーザーに求めます。 拡張子.qrsで保存され、ウィザードが閉じます。

回復シナリオマネージャーアクセス

検証

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

回復シナリオマネージャーアクセス

QTP-環境変数

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

環境変数の種類

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

ビルド環境変数

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

ユーザー定義の内部環境変数

ユーザー定義外部-ユーザー定義変数は、外部ファイルに.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-ライブラリファイル

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

[ファイル] >> [関数ライブラリ]に移動して、新しいライブラリファイルを作成できます。

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

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

ライブラリファイルの関連付け

  • 方法2 *-ExecuteFileメソッドを使用します。
'Syntax : ExecuteFile(Filepath)
ExecuteFile "C:\lib1.vbs"
ExecuteFile "C:\lib2.vbs"
  • 方法3 *-LoadFunctionLibraryメソッドの使用。
'Syntax : LoadFunctionLibrary(Filepath)
LoadFunctionLibrary "C:\lib1.vbs"
LoadFunctionLibrary "C:\lib2.vbs"
  • 方法4 *-オートメーションオブジェクトモデル(AOM)-これはメカニズムであり、これを使用して、QTP外のさまざまなQTP操作を制御できます。 AOMを使用して、QTPを起動し、テストを開き、関数ライブラリを関連付けることができます。 次のVbScriptはExtension .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

QTP-自動テスト結果

試験結果

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

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

テスト結果

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

結果をHTMLに変換する

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

テスト結果

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

結果のフィルタリング

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

テスト結果

欠陥の発生

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

テスト結果

試験結果

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

テスト結果

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

  • エラーの場合
  • 常に
  • エラーと警告の場合

テスト結果

QTP-GUIオブジェクトの操作

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

テキストボックスでの作業

以下は、実行時にテキストボックスにアクセスする方法です-

  • 設定-テスターがテキストボックスに値を設定するのに役立ちます
  • クリック-テキストボックスをクリック
  • SetSecure -パスワードボックスのテキストを安全に設定するために使用
  • WaitProperty -プロパティ値がtrueになるまで待機
  • 存在-テキストボックスの存在を確認します
  • * 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

チェックボックスの使用

以下は、チェックボックスで作業できる主要な方法の一部です-

  • 設定-テスターがチェックボックスの値を「オン」または「オフ」に設定するのに役立ちます
  • クリック-チェックボックスをクリックします。 ONまたはOFFをチェックしますが、ユーザーはステータスを確認できません
  • WaitProperty -プロパティ値がtrueになるまで待機
  • 存在-チェックボックスの存在を確認します
  • * 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)*-テスターがラジオボックスを「オン」に設定できるようにします
  • クリック-ラジオボタンをクリックします。 ラジオボタンのオンまたはオフでもテスターはステータスを取得できません
  • WaitProperty -プロパティ値がtrueになるまで待機
  • 存在-ラジオボタンの存在を確認します
  • * 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から値を選択するのに役立ちます
  • クリック-オブジェクトをクリックします
  • WaitProperty -プロパティ値がtrueになるまで待機
  • 存在-コンボボックスの存在を確認します
  • * 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

ボタンの使用

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

  • クリック-ボタンをクリック
  • WaitProperty -プロパティ値がtrueになるまで待機
  • 存在-ボタンの存在を確認します
  • * 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ベースのアプリケーションでは、webTablesが非常に一般的になっているため、テスターはWebTablesがどのように動作し、webTablesでアクションを実行するかを理解する必要があります。 このトピックは、webTablesを効果的に使用するのに役立ちます。

Sr.No. Statement & Description
1

if statement

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

if…​else statement

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

if..elseif…​else statement

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

4

nested if statements

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

5

switch statement

  • switch* ステートメントを使用すると、変数の値のリストを均等にテストできます。
  • html id -テーブルにidタグがある場合、このプロパティを使用することをお勧めします。
  • innerText -テーブルの見出し。
  • sourceIndex -テーブルのソースインデックスを取得します
  • ChildItemCount -指定された行に存在するChildItemsの数を取得します
  • 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-仮想オブジェクト

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

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

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

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

仮想オブジェクトの作成

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

仮想オブジェクトステップ1

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

仮想オブジェクトステップ2

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

仮想オブジェクトステップ3

  • ステップ4 *-仮想オブジェクトの親を選択し、[次へ]をクリックします。

仮想オブジェクトステップ4

  • ステップ5 *-仮想オブジェクトを保存するコレクションに名前を付けて、[完了]をクリックします。

仮想オブジェクトステップ5

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

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

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

仮想オブジェクトステップ6

仮想オブジェクトの使用

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

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

仮想オブジェクトの制限

  • QTPは、アナログまたは低レベルの記録用の仮想オブジェクトをサポートしていません。
  • チェックポイントは仮想オブジェクトに追加できません。
  • 仮想オブジェクトはオブジェクトリポジトリによって制御されません。
  • オブジェクトを特定のクラス(ボタンまたはリスト)にマッピングしますが、ネイティブオブジェクトのすべてのメソッドは仮想オブジェクトでサポートされていません。
  • Object Spyは仮想オブジェクトでは使用できません。
  • 座標が変更されると画面解像度が変更されると、テストの実行は失敗します。
  • 仮想オブジェクトが正しくキャプチャされるように、アプリケーションウィンドウは同じ画面サイズにする必要があります。

QTP-データベースへのアクセス

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

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

  • ADODB.Connection -データベースへの接続を確立するために使用
  • ADODB.Command -SQLコマンド(クエリまたはストアドプロシージャ)の実行に使用
  • ADODB.Fields -クエリ/ストアドプロシージャの実行後にレコードセットから特定の列をフェッチするために使用
  • ADODB.Recordset -データベースからデータを取得するために使用

データベースへの接続方法

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

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

  • データベースタイプ-MSSQLサーバー
  • サーバー名-SQLEXPRESS
  • データベース名-トライアル
  • *ユーザーID *-sa
  • password -Password123

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

データベースへのアクセス

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

結果

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

データベース2へのアクセス

QTPとXMLの連携

XMLは、人間と機械の両方が読み取り可能な形式でデータを格納するように設計されたマークアップ言語です。 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-記述的プログラミング

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-オートメーションオブジェクトモデル

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

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

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

AOMスクリプトを生成

テスターは、「Generate Script」オプションを使用して、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

QTP-フレームワーク

フレームワークは、一連の標準を実施する一連のガイドライン/ベストプラクティスを定義します。これにより、エンドユーザーが簡単に使用できるようになります。 オートメーションフレームワークにはさまざまな種類があり、最も一般的なものは以下のとおりです-

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

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

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

キーワード駆動テストでは、通常はスプレッドシートである表形式を使用して、実行する各機能のキーワードまたはアクションワードを定義します。

自動化テストでのキーワード駆動テスト

利点

  • 初心者または非技術テスターに​​最適です。
  • このアプローチを使用して、より抽象的な方法でテストを記述できるようにします。
  • キーワード駆動テストにより、安定したビルドがテスト用に提供される前であっても、SDLCの早期に自動化を開始できます。
  • 高度な再利用性があります。

デメリット

  • キーワードとその関連機能の開発への初期投資には、さらに時間がかかる場合があります。
  • 技術的に有能なテスターに​​対する制限として機能するかもしれません。

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

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

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

流れ図

データ駆動型テストは、次の図で最もよく理解できます-

自動化テストでのキーワード駆動テスト

利点

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

デメリット

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

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

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

自動化テストのハイブリッドフレームワーク

影響要因

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

  • フレームワークファイルは、SVN、CVS、MSソース管理などのバージョン管理ソフトウェアをサポートする必要があります
  • フレームワークは、異なる環境でのスクリプトの実行をサポートする必要があります。つまり、QA、SAT、DEV
  • オブジェクトが変更されると、スクリプトは最小限の変更で実行する必要があります。
  • フレームワークはそれ自体を構成し、フォルダー/データベースの作成などの前提条件を処理する必要があります。
  • スクリプト/アプリケーションの問題を簡単に発見できるように、フレームワークには堅牢なレポート構造が必要です
  • フレームワークには柔軟性が必要で、使いやすいはずです
  • ファイル、機能、および変更の履歴が正しく維持されるように、フレームワークはコーディング標準に従う必要があります。

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

QTP-設計フレームワーク

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

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

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

QTPフレームワークのフォルダー構造

フォルダ構造の説明-

  • Master Driver Script -実行全体を駆動するスクリプト。 実行に必要な前提条件と初期設定を実行します。
  • Library Files -関数ライブラリを形成する関連関数。
  • データテーブル-実行に必要なテストデータ。
  • オブジェクトリポジトリ-QTPがオブジェクトをシームレスに認識することを可能にするオブジェクトとそのプロパティ。
  • 実行ログ-フォルダには、ユーザー関数と関数実行履歴を含む実行ログファイルが含まれます。

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

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
' 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という名前でリポジトリに追加されたすべてのオブジェクトのリストを示しています

AUTのOR

データ表

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: ## # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # #

Qtp-questions-answers