このセクションでは、より強固で再利用可能なテスト スイートの開発に役立つ、高度な作成方法について説明します。
このセクションの内容:
再利用可能な (モジュラーな) テスト スイートの作成
多くの場合、他のテスト スイートで再利用できるテスト スイートを作成するのが良いでしょう。よくある例は、Web サイトにログインするテスト スイートです。一度そのようなテスト スイートを作成したら、ログインが必要なさまざまな状況で、すでにあるテスト スイートを他のテスト スイートが利用することができます。
SOAtest には、再利用可能なテスト スイートの作成と使用に特に役立つ、以下の 2 つの機能が用意されています。
- テスト スイートの参照: 再利用可能なモジュールまたはテスト スイートを作成したら、それらを他のテスト スイートから参照することができます。
- 変数: 変数を使ってテストをパラメータライズすることができます。この変数は、特定の値を設定したり、(Data Bank ツールなどを使って ) テストから抽出したり、データ ソースから設定したりすることができます。
この演習では、これらの機能を使ってどのように再利用可能なテスト スイートを作成できるかについて説明します。簡単にするために、演習では書店サービスを使用します。ただし、以下で説明する原理と操作方法は、ユーザーが作成するあらゆるシナリオに適用できます。
再利用可能なテスト スイートを作成するには、以下の操作を行います。
ReusableModule.tst
という空のテスト スイート (.tst) ファイルを作成します:- テスト ケース エクスプローラーで Examples プロジェクトのノードを右クリックし、[新規追加] > [テスト (.tst) ファイル] を選択します。
- [ファイル名] に
ReusableModule
と入力します。 - [Next] をクリックします。
- [空] を選択して [終了] をクリックします。
- 以下の操作を行って、SOAP Client テストを作成します。
- テスト ケース エクスプローラーで ReusableModule.tst ノードを展開します。
- テスト スイート: テスト スイート ノードを右クリックし、[新規追加] > [テスト] を選択します。
- 表示されたダイアログで SOAP Client を選択し、[終了] をクリックします。
- 以下の操作を行って、SOAP Client テストを設定します。
- テスト コンフィギュレーション パネルの [WSDL] タブで、WSDL URL に
http://localhost:8080/parabank/services/store-01?wsdl
を入力します。 - [リクエスト] タブで、[操作] に getItemByTitle を設定します。
- SOAP Client ツールに変更を保存します。
- テスト コンフィギュレーション パネルの [WSDL] タブで、WSDL URL に
- 以下の操作を行って、変数を定義します。
- テスト スイート: テスト スイート ノードをダブルクリックし、テスト スイートの設定パネルを開きます。
- [変数] タブで [追加] ボタンをクリックします。
- ダイアログの [名前] フィールドに
title variable
と入力します。 - [型] を [String] に変更します。
- [親テスト スイートの値を使用 (定義済みの場合)] を選択したままにします。そうすれば、変数はこのテスト スイートを参照するテスト スイートで設定された値を使用することができます。[ローカル値を使用] に変更した場合、変数の値は常に [値] フィールドで指定された値になります。
- [値] に
PowerBuilder
を入力します。これは、SOAtest がtitle
という列を持つstore
というデータソースを見つけられない場合に使用されるデフォルト値です。 - [OK] をクリックします。
- テスト スイートの設定を保存します。
- 利用可能な場合、指定したデータ ソース値を使用するように SOAP Client テストを設定します。以下の操作を行います。
- SOAP Client テストの設定パネルの [リクエスト] タブで、[titleKeyword] のチェックボックスをオンにし、[固定] を [パラメータライズ] に変更します。
- ドロップダウン メニューから [title variable] を選択します。
- SOAP Client ツールに変更を保存します。
- ReusableModule.tst を選択し、ツールバーの [テスト] ボタンをクリックしてテスト スイートを実行します。
- SOAP Client テストの Traffic Viewer ノードをダブルクリックしてトラフィックを確認します。使用された titleKeyword が PowerBuilder であることが分かります。指定されたデータ ソースを発見できなかったため、SOAtest はデフォルト値を使用しました (このデータ ソースはまだ作成していません)。
- 次のように、
TestStoreTitles.tst
という空のテスト スイート (.tst) ファイルを作成します:- テスト ケース エクスプローラーで Examples プロジェクトのノードを右クリックし、[新規追加] > [テスト (.tst) ファイル] を選択します。
- [ファイル名] に
TestStoreTitles
と入力します。 - [次へ] をクリックします。
- [空] を選択して [終了] をクリックします。
- 以下の操作を行って、変数を定義します。
- TestStoreTitles.tst > テスト スイート: テスト スイート ノードをダブルクリックし、テスト スイートの設定パネルを開きます。
- [変数] タブで [追加] ボタンをクリックします。
- ダイアログの [名前] フィールドに
title variable
と入力します。 - [型] を [データ ソース] に変更します。
- [データ ソース名] に
store
と入力し、[カラム名] にtitle
と入力します。
このテスト変数は、reference.tst ファイルで定義されている文字列テスト変数をオーバーライドすることに注意してください。
- [OK] をクリックします。
- 以下の操作を行って、テスト スイートにデータ ソースを追加します。
- TestStoreTitles.tst > テスト スイート: テスト スイート ノードを右クリックし、[新規追加] > [データ ソース] を選択します。
- [テーブル] を選択して [終了] をクリックします。
- データソース設定パネルで、データソース名を
store
に変更します。 - [1 行目は列名を表す] チェックボックスをオンにします。
title
という列を追加します。- この列に 2 つの値を追加します:
Linux
およびC++
。 - データ ソースの変更を保存します。
- この演習で最初に作成したテスト スイートを参照するように、このテスト スイートを設定します。以下の操作を行います。
- TestStoreTitles.tst > テスト スイート: テスト スイート ノードを右クリックし、[新規追加] > [テスト スイート] を選択します。
- [テスト (.tst) ファイルの参照] を選択します。
- [次へ] をクリックします。
- SOAtest ワークスペースから ReusableModule.tst ファイルを選択します。
- [終了] をクリックします。
- TestStoreTitles.tst を選択し、ツールバーの [テスト] ボタンをクリックして現在のテスト スイートを実行します。
- Traffic Viewer ノードをダブルクリックしてトラフィックを確認します。
- titleKeyword として Linux および C++ が使用されたことを確認します。
テストの成功/失敗までループする - テスト フロー ロジックの使用
多くの場合、ある条件を満たすまで、同じ処理を SOAtest で繰り返すのが良いでしょう。それには、テスト スイート フロー ロジックを使用します。
SOAtest では、2 種類の主なテスト フロー タイプを選択することができます。
- while 条件 (変数): 変数の条件を満たすまで、あるアクションを繰り返し実行します。
- while 条件 (成功/失敗): テスト スイート中の 1 つのテスト (またはすべてのテスト) が (ループ停止条件で設定した内容に応じて) 成功または失敗するまで、あるアクションを繰り返し実行します。なお、このオプションを選択して (たとえば、テストの 1 つが成功するまでループするように設定して)、全般的なループ条件が満たされた場合 (たとえば 1 つのテストが成功した場合)、失敗のテストが成功としてマークされる点に注意してください。 全般的なループ条件が満たされない場合 (たとえばどのテストも成功しない場合)、失敗した個々のテストは失敗としてマークされます。 ループ条件が満たされるかどうかに関係なく、どのテストが成功してどのテストが失敗したかはコンソールに表示されます。
以下の演習では、while 条件 (成功/失敗) ロジックを使用して、指定した価格に達するまでテスト スイートがループするように設定します。
- 次のように、
TestFlowLogic.tst
という空のテスト スイート (.tst) ファイルを作成します:- テスト ケース エクスプローラーで Examples プロジェクトのノードを右クリックし、[新規追加] > [テスト (.tst) ファイル] を選択します。
- [ファイル名] で
TestFlowLogic
と入力します。 - [次へ] をクリックします。
- [空] を選択して [終了] をクリックします。
- テスト スイートの設定パネルを開き、TestFlowLogic テスト スイートを展開して テスト スイート: テスト スイート ノードをダブルクリックします。
- [実行オプション] > [テスト フロー ロジック] タブを選択します。
- [フロータイプ] を [while 条件 (成功/失敗)] に設定します。
- [ループの最大回数] を
20
に設定します。 - [ループ停止条件] を [1 つのテスト] および [成功] に変更します。
- テスト スイートの設定を保存します。
- 以下の操作を行って、SOAP Client テストを作成します。
- TestFlowLogic.tst > テスト スイート: テスト スイート ノードを右クリックし、[新規追加] > [テスト] を選択します。
- 表示されたダイアログで SOAP Client を選択し、[終了] をクリックします。
- 以下の操作を行って、SOAP Client テストを設定します。
- テスト コンフィギュレーション パネルの [WSDL] タブで、WSDL URL に
http://localhost:8080/parabank/services/store-01?wsdl
を入力します。 - [リクエスト] タブで、[操作] に getItemByTitle を設定します。
- titleKeyword のチェックボックスをオンにし、値として
PowerBuilder
と入力します。 - SOAP Client テストに変更を保存します。
- テスト コンフィギュレーション パネルの [WSDL] タブで、WSDL URL に
- このテストの回帰コントロールを作成します。以下の操作を行います。
- SOAP Client テスト ノードを右クリックし、[回帰コントロールの作成/更新] を選択します。
- [回帰コントロールの作成] を選択します。
- [終了] をクリックします。
- 回帰コントロールで、期待される価格を変更します。以下の操作を行います。
- 新規作成した Diff コントロール ノードをダブルクリックし、Diff ツールのエディターを開きます。
- price 要素の価格を変更します。getItemByTitle への呼び出しが何度かあった後、書店サービスは本の価格を $1.00 ずつ上げます。そのため、このチュートリアルでテストを実行した回数によって、現在の価格が下記の図と異なる場合があります。
- 新規作成した Diff コントロール ノードをダブルクリックし、Diff ツールのエディターを開きます。
テスト スイート ノードを選択してツールバーの [テスト] ボタンをクリックし、現在のテスト スイートを実行します。特定のテストが失敗しても、テスト スイートは成功します。なぜなら、20 回ループする前に価格が期待値に達するからです。コンソール タブでこれを確認できます。
予定よりも価格が高くなった場合
getItemByTitle を呼び出せば呼び出すほど、価格は上がります。価格を下げるには、Parabank サーバーを再起動し、getItemByTitle を呼び出す SOAP Client を再び実行します。- 前に作成した Diff コントロール ノードをダブルクリックし、Diff ツールのエディターを再び開きます。
- 価格が期待値に達する前にテストが 20 回ループするように価格を変更します。
- 再びテスト スイートを実行します。たとえ 20 回ループしても価格が期待値に達することはないため、テスト スイートは失敗します。
スクリプトによる SOAtest の拡張
テスト要件でカスタム機能やロジックをテスト ケースに追加する必要がある場合、SOAtest ではテスト環境に簡単にカスタム スクリプトを統合することができます。
SOAtest の XML Assertor を使用して、カスタム スクリプトを SOAtest に統合できます。つまり、SOAtest の現行ツール セットが直接サポートしていない状況であっても、ほとんどのテスト状況を簡単に処理することができます。
この演習では、これまでの演習で使用した書店サービスを使ってシナリオ テストを作成します。このシナリオは、題名で本を検索し、本の価格が偶数の整数であることを検証します。
この演習を終了すると、SOAtestTutorial.tst
ファイルの Custom Scripting テスト スイートに似たテスト スイートが作成されます。
- 単体テストのためのテスト スイートの作成 で作成した テスト スイート: 機能テスト ノードを選択し、ツールバーの [テスト スイートの追加] ボタンをクリックします。
- [テスト スイートの追加] ウィザードで、[空] を選択して [終了] をクリックします。
- 新しい テスト スイート: テスト スイート ノードをダブルクリックし、テスト コンフィギュレーション パネルの [名前] フィールドに
Custom Scripting
と入力して [保存] をクリックします。 - テスト スイート: Custom Scripting ノードを選択し、[テストまたは出力の追加] ボタンをクリックします。
- [テストの追加] ウィザードで、右側から [SOAP Client] を選択し、[終了] をクリックします。テスト スイートに SOAP Client ツールが追加されます。
- テストスイート: Custom Scripting ノードの下の テスト1:SOAPクライアント ノードをダブルクリックし、右側の GUI パネルで [名前] フィールドに
Validate Price Value
と入力します。 - テスト コンフィギュレーション パネルの [WSDL] タブで、WSDL URL フィールドに
http://localhost:8080/parabank/services/store-01?wsdl
と入力します。 - [リクエスト] タブを開き、[操作] ドロップダウン メニューから getItemByTitle を選択します。
- [SOAP body] タブで getItemByTitle をクリックし、[titleKeyword] オプションを有効化します。
- ドロップダウン メニューから [固定] を選択し、値として
Linux
と入力します。 - ツールバーの [保存] ボタンをクリックします。
- テスト 1: Validate Price Value ノードを右クリックし、[出力の追加] を選択します。
- [出力の追加] ウィザードで、左側で レスポンス > SOAP エンベロープ を選択し、右側で XML Assertor を選択して [終了] をクリックします。SOAP Client の XML Response 出力に XML Assertor が連結されます。
- XML Assertor テストの設定パネルで [設定] タブを開き、[追加] ボタンをクリックします。
- [アサーションの選択] ウィザードで、[値アサーション] を展開して [カスタム アサーション] を選択し、[次へ] をクリックします。
カスタム アサーションの画面に、XML メッセージのツリー ビューが表示されます。その中から強制する単一の値を選択できます。 - XML ツリー ビューから price 要素を選択し、[終了] ボタンをクリックします。
テストの設定パネルにカスタム アサーションが表示されます。 - [言語] ドロップダウン メニューから [Jython] を選択します。
テストの設定画面の [テキスト] フィールドに以下のスクリプトを入力します。このスクリプトは、price の値が偶数であることを保証します。
def checkPrice(input, context): price = float(input) if price % 2 == 0: return 1 else: return 0
- [メソッド] ドロップダウン メニューから checkPrice() を選択します。
- ツールバーの [保存] ボタンをクリックします。
- テスト 1 ノードを選択し、[テスト] ボタンをクリックします。テストは失敗します。テストの Traffic Viewer ノードをダブルクリックすると、Linux の本の価格が奇数であり、そのためにテストが失敗したことが分かります。
SOAtest の拡張
SOAtest のビルトインの Extensibility Framework をスクリプトで使用すると、SOAtest 内のカスタム トランスポート プロトコルとメッセージ実装を定義および使用することができます。詳細については [Parasoft] > [ヘルプ] > [Parasoft SOAtest Extensibility API] を参照してください。