このセクションでは、より強固で再利用可能なテスト スイートの開発に役立つ、高度な作成方法について説明します。

このセクションの内容:

再利用可能な (モジュラーな) テスト スイートの作成

多くの場合、他のテスト スイートで再利用できるテスト スイートを作成するのが良いでしょう。よくある例は、Web サイトにログインするテスト スイートです。一度そのようなテスト スイートを作成したら、ログインが必要なさまざまな状況で、すでにあるテスト スイートを他のテスト スイートが利用することができます。

SOAtest には、再利用可能なテスト スイートの作成と使用に特に役立つ、以下の 2 つの機能が用意されています。

  • テスト スイートの参照: 再利用可能なモジュールまたはテスト スイートを作成したら、それらを他のテスト スイートから参照することができます。
  • 変数: 変数を使ってテストをパラメータライズすることができます。この変数は、特定の値を設定したり、(Data Bank ツールなどを使って ) テストから抽出したり、データ ソースから設定したりすることができます。

この演習では、これらの機能を使ってどのように再利用可能なテスト スイートを作成できるかについて説明します。簡単にするために、演習では書店サービスを使用します。ただし、以下で説明する原理と操作方法は、ユーザーが作成するあらゆるシナリオに適用できます。

再利用可能なテスト スイートを作成するには、以下の操作を行います。

  1. ReusableModule.tst という空のテスト スイート (.tst) ファイルを作成します:
    1. テスト ケース エクスプローラーで Examples プロジェクトのノードを右クリックし、[新規追加] > [テスト (.tst) ファイル] を選択します。
    2. [ファイル名]ReusableModule と入力します。
    3. [Next] をクリックします。
    4. [空] を選択して [終了] をクリックします。
  2. 以下の操作を行って、SOAP Client テストを作成します。
    1. テスト ケース エクスプローラーで ReusableModule.tst ノードを展開します。
    2. テスト スイート: テスト スイート ノードを右クリックし、[新規追加] > [テスト] を選択します。
    3. 表示されたダイアログで SOAP Client を選択し、[終了] をクリックします。



  3. 以下の操作を行って、SOAP Client テストを設定します。
    1. テスト コンフィギュレーション パネルの [WSDL] タブで、WSDL URL に http://localhost:8080/parabank/services/store-01?wsdl を入力します。



    2. [リクエスト] タブで、[操作] に getItemByTitle を設定します。



    3. SOAP Client ツールに変更を保存します。
  4. 以下の操作を行って、変数を定義します。
    1. テスト スイート: テスト スイート ノードをダブルクリックし、テスト スイートの設定パネルを開きます。
    2. [変数] タブで [追加] ボタンをクリックします。
    3. ダイアログの [名前] フィールドに title variable と入力します。
    4. [型][String] に変更します。
    5. [親テスト スイートの値を使用 (定義済みの場合)] を選択したままにします。そうすれば、変数はこのテスト スイートを参照するテスト スイートで設定された値を使用することができます。[ローカル値を使用] に変更した場合、変数の値は常に [値] フィールドで指定された値になります。
    6. [値]PowerBuilder を入力します。これは、SOAtest が title という列を持つ store というデータソースを見つけられない場合に使用されるデフォルト値です。



    7. [OK] をクリックします。
    8. テスト スイートの設定を保存します。
  5. 利用可能な場合、指定したデータ ソース値を使用するように SOAP Client テストを設定します。以下の操作を行います。
    1. SOAP Client テストの設定パネルの [リクエスト] タブで、[titleKeyword] のチェックボックスをオンにし、[固定][パラメータライズ] に変更します。
    2. ドロップダウン メニューから [title variable] を選択します。



    3. SOAP Client ツールに変更を保存します。
  6. ReusableModule.tst を選択し、ツールバーの [テスト] ボタンをクリックしてテスト スイートを実行します。
  7. SOAP Client テストの Traffic Viewer ノードをダブルクリックしてトラフィックを確認します。使用された titleKeyword が PowerBuilder であることが分かります。指定されたデータ ソースを発見できなかったため、SOAtest はデフォルト値を使用しました (このデータ ソースはまだ作成していません)。



  8. 次のように、TestStoreTitles.tst という空のテスト スイート (.tst) ファイルを作成します:
    1. テスト ケース エクスプローラーで Examples プロジェクトのノードを右クリックし、[新規追加] > [テスト (.tst) ファイル] を選択します。
    2. [ファイル名]TestStoreTitles と入力します。
    3. [次へ] をクリックします。
    4. [空] を選択して [終了] をクリックします。
  9. 以下の操作を行って、変数を定義します。
    1. TestStoreTitles.tst > テスト スイート: テスト スイート ノードをダブルクリックし、テスト スイートの設定パネルを開きます。
    2. [変数] タブで [追加] ボタンをクリックします。
    3. ダイアログの [名前] フィールドに title variable と入力します。
    4. [型][データ ソース] に変更します。
    5. [データ ソース名]store と入力し、[カラム名]title と入力します。



      このテスト変数は、reference.tst ファイルで定義されている文字列テスト変数をオーバーライドすることに注意してください。
  10. [OK] をクリックします。
  11. 以下の操作を行って、テスト スイートにデータ ソースを追加します。
    1. TestStoreTitles.tst > テスト スイート: テスト スイート ノードを右クリックし、[新規追加] > [データ ソース] を選択します。
    2. [テーブル] を選択して [終了] をクリックします。
    3. データソース設定パネルで、データソース名を store に変更します。
    4. [1 行目は列名を表す] チェックボックスをオンにします。
    5. title という列を追加します。
    6. この列に 2 つの値を追加します: Linux および C++



    7. データ ソースの変更を保存します。
  12. この演習で最初に作成したテスト スイートを参照するように、このテスト スイートを設定します。以下の操作を行います。
    1. TestStoreTitles.tst > テスト スイート: テスト スイート ノードを右クリックし、[新規追加] > [テスト スイート] を選択します。
    2. [テスト (.tst) ファイルの参照] を選択します。
    3. [次へ] をクリックします。
    4. SOAtest ワークスペースから ReusableModule.tst ファイルを選択します。
    5. [終了] をクリックします。
  13. TestStoreTitles.tst を選択し、ツールバーの [テスト] ボタンをクリックして現在のテスト スイートを実行します。
  14. Traffic Viewer ノードをダブルクリックしてトラフィックを確認します。



  15. titleKeyword として Linux および C++ が使用されたことを確認します。

テストの成功/失敗までループする - テスト フロー ロジックの使用

多くの場合、ある条件を満たすまで、同じ処理を SOAtest で繰り返すのが良いでしょう。それには、テスト スイート フロー ロジックを使用します。

SOAtest では、2 種類の主なテスト フロー タイプを選択することができます。

  • while 条件 (変数): 変数の条件を満たすまで、あるアクションを繰り返し実行します。
  • while 条件 (成功/失敗): テスト スイート中の 1 つのテスト (またはすべてのテスト) が (ループ停止条件で設定した内容に応じて) 成功または失敗するまで、あるアクションを繰り返し実行します。なお、このオプションを選択して (たとえば、テストの 1 つが成功するまでループするように設定して)、全般的なループ条件が満たされた場合 (たとえば 1 つのテストが成功した場合)、失敗のテストが成功としてマークされる点に注意してください。  全般的なループ条件が満たされない場合 (たとえばどのテストも成功しない場合)、失敗した個々のテストは失敗としてマークされます。  ループ条件が満たされるかどうかに関係なく、どのテストが成功してどのテストが失敗したかはコンソールに表示されます。

以下の演習では、while 条件 (成功/失敗) ロジックを使用して、指定した価格に達するまでテスト スイートがループするように設定します。

  1. 次のように、TestFlowLogic.tst という空のテスト スイート (.tst) ファイルを作成します:
    1. テスト ケース エクスプローラーで Examples プロジェクトのノードを右クリックし、[新規追加] > [テスト (.tst) ファイル] を選択します。
    2. [ファイル名]TestFlowLogic と入力します。
    3. [次へ] をクリックします。
    4. [空] を選択して [終了] をクリックします。
  2. テスト スイートの設定パネルを開き、TestFlowLogic テスト スイートを展開して テスト スイート: テスト スイート ノードをダブルクリックします。
  3. [実行オプション] > [テスト フロー ロジック] タブを選択します。
  4. [フロータイプ][while 条件 (成功/失敗)] に設定します。
  5. [ループの最大回数]20 に設定します。
  6. [ループ停止条件] を [1 つのテスト] および [成功] に変更します。



  7. テスト スイートの設定を保存します。
  8. 以下の操作を行って、SOAP Client テストを作成します。
    1. TestFlowLogic.tst > テスト スイート: テスト スイート ノードを右クリックし、[新規追加] > [テスト] を選択します。
    2. 表示されたダイアログで SOAP Client を選択し、[終了] をクリックします。
  9. 以下の操作を行って、SOAP Client テストを設定します。
    1. テスト コンフィギュレーション パネルの [WSDL] タブで、WSDL URL に http://localhost:8080/parabank/services/store-01?wsdl を入力します。



    2. [リクエスト] タブで、[操作] に getItemByTitle を設定します。



    3. titleKeyword のチェックボックスをオンにし、値として PowerBuilder と入力します。



    4. SOAP Client テストに変更を保存します。
  10. このテストの回帰コントロールを作成します。以下の操作を行います。
    1. SOAP Client テスト ノードを右クリックし、[回帰コントロールの作成/更新] を選択します。
    2. [回帰コントロールの作成] を選択します。
    3. [終了] をクリックします。
  11. 回帰コントロールで、期待される価格を変更します。以下の操作を行います。
    1. 新規作成した Diff コントロール ノードをダブルクリックし、Diff ツールのエディターを開きます。



    2. price 要素の価格を変更します。getItemByTitle への呼び出しが何度かあった後、書店サービスは本の価格を $1.00 ずつ上げます。そのため、このチュートリアルでテストを実行した回数によって、現在の価格が下記の図と異なる場合があります。



  12. テスト スイート ノードを選択してツールバーの [テスト] ボタンをクリックし、現在のテスト スイートを実行します。特定のテストが失敗しても、テスト スイートは成功します。なぜなら、20 回ループする前に価格が期待値に達するからです。コンソール タブでこれを確認できます。


    予定よりも価格が高くなった場合

    getItemByTitle を呼び出せば呼び出すほど、価格は上がります。価格を下げるには、Parabank サーバーを再起動し、getItemByTitle を呼び出す SOAP Client を再び実行します。
  13. 前に作成した Diff コントロール ノードをダブルクリックし、Diff ツールのエディターを再び開きます。
  14. 価格が期待値に達する前にテストが 20 回ループするように価格を変更します。
  15. 再びテスト スイートを実行します。たとえ 20 回ループしても価格が期待値に達することはないため、テスト スイートは失敗します。

スクリプトによる SOAtest の拡張

テスト要件でカスタム機能やロジックをテスト ケースに追加する必要がある場合、SOAtest ではテスト環境に簡単にカスタム スクリプトを統合することができます。

SOAtest の XML Assertor を使用して、カスタム スクリプトを SOAtest に統合できます。つまり、SOAtest の現行ツール セットが直接サポートしていない状況であっても、ほとんどのテスト状況を簡単に処理することができます。

この演習では、これまでの演習で使用した書店サービスを使ってシナリオ テストを作成します。このシナリオは、題名で本を検索し、本の価格が偶数の整数であることを検証します。

この演習を終了すると、SOAtestTutorial.tst ファイルの Custom Scripting テスト スイートに似たテスト スイートが作成されます。

  1. 単体テストのためのテスト スイートの作成 で作成した テスト スイート: 機能テスト ノードを選択し、ツールバーの [テスト スイートの追加] ボタンをクリックします。



  2. [テスト スイートの追加] ウィザードで、[空] を選択して [終了] をクリックします。
  3. 新しい テスト スイート: テスト スイート ノードをダブルクリックし、テスト コンフィギュレーション パネルの [名前] フィールドに Custom Scripting と入力して [保存] をクリックします。
  4. テスト スイート: Custom Scripting ノードを選択し、[テストまたは出力の追加] ボタンをクリックします。



  5. [テストの追加] ウィザードで、右側から [SOAP Client] を選択し、[終了] をクリックします。テスト スイートに SOAP Client ツールが追加されます。
  6. テストスイート: Custom Scripting ノードの下の テスト1:SOAPクライアント ノードをダブルクリックし、右側の GUI パネルで [名前] フィールドに Validate Price Value と入力します。
  7. テスト コンフィギュレーション パネルの [WSDL] タブで、WSDL URL フィールドに http://localhost:8080/parabank/services/store-01?wsdl と入力します。
  8. [リクエスト] タブを開き、[操作] ドロップダウン メニューから getItemByTitle を選択します。
  9. [SOAP body] タブで getItemByTitle をクリックし、[titleKeyword] オプションを有効化します。
  10. ドロップダウン メニューから [固定] を選択し、値として Linux と入力します。
  11. ツールバーの [保存] ボタンをクリックします。



  12. テスト 1: Validate Price Value ノードを右クリックし、[出力の追加] を選択します。
  13. [出力の追加] ウィザードで、左側で レスポンス > SOAP エンベロープ を選択し、右側で XML Assertor を選択して [終了] をクリックします。SOAP Client の XML Response 出力に XML Assertor が連結されます。



  14. XML Assertor テストの設定パネルで [設定] タブを開き、[追加] ボタンをクリックします。
  15. [アサーションの選択] ウィザードで、[値アサーション] を展開して [カスタム アサーション] を選択し、[次へ] をクリックします。



    カスタム アサーションの画面に、XML メッセージのツリー ビューが表示されます。その中から強制する単一の値を選択できます。
  16. XML ツリー ビューから price 要素を選択し、[終了] ボタンをクリックします。



    テストの設定パネルにカスタム アサーションが表示されます。
  17. [言語] ドロップダウン メニューから [Jython] を選択します。
  18. テストの設定画面の [テキスト] フィールドに以下のスクリプトを入力します。このスクリプトは、price の値が偶数であることを保証します。

    def checkPrice(input, context): 	price = float(input) 	if price % 2 == 0: 		return 1 	else: 		return 0
  19. [メソッド] ドロップダウン メニューから checkPrice() を選択します。



  20. ツールバーの [保存] ボタンをクリックします。
  21. テスト 1 ノードを選択し、[テスト] ボタンをクリックします。テストは失敗します。テストの Traffic Viewer ノードをダブルクリックすると、Linux の本の価格が奇数であり、そのためにテストが失敗したことが分かります。

SOAtest の拡張

SOAtest のビルトインの Extensibility Framework をスクリプトで使用すると、SOAtest 内のカスタム トランスポート プロトコルとメッセージ実装を定義および使用することができます。詳細については [Parasoft] > [ヘルプ] > [Parasoft SOAtest Extensibility API] を参照してください。

  • No labels