単体テストを作成したら、そのままシナリオ ベースのテストとして単体テストを活用することができます。シナリオ テストを使用すると、通常の Web サービスの使用中に発生する可能性があるトランザクションとビジネス ロジックをエミュレートできます。このため、ある順序でイベントが発生した場合にだけ出現するようなバグも発見できます。
Parasoft SOAtest では、複数ステップのシナリオを作成して、各ステップで同じサービスを実行したり、あるいはまったく異なるアプリケーション インターフェイスを実行したりすることができます。そのため、ビジネス ユース ケース シナリオのモデル化を自動化できます(「エンド ツー エンド ビジネス プロセス テスト」 で説明) 。また、ある順序でイベントが発生した場合にだけ出現する予想外の動作も発見できます。
テスト スイート “Scenario Test - Search, Place Order, and Remove” 中のサンプル シナリオ テストは、ユーザーが書店 Web サービスを利用するときに一般的に行う操作シーケンスを表現したものです。この演習では、ユーザーが書籍を検索して注文を発注し、以前に発注した注文を削除する状況を表現します。
このシナリオは、XML Data Bank というツールを利用します。このツールを使用すると、XML 要素の値を抽出してメモリ上に値を格納し、後でテストで利用することができます。この演習では、書籍の検索後にサービスから返却される書籍 ID を格納し、その後のテストでこの書籍 IDを使って書籍を購入します。同様に、書籍の注文を発注した後に返される注文番号も格納して、その後のテストでこの注文番号を使ってシステムから注文を削除します。
この演習が終了すると、 SOAtestTutorial.tst ファイル中の "Scenario Test - Search, Add to Cart, and Remove from Cart" テスト スイートに似たテスト スイートが完成します。
なお、この演習はこれまでの演習が完了していることを前提とします。この演習を開始する前に、これまでの演習が完了していることを確認してください。
シナリオ テスト スイートの作成
このシナリオを作成するには、次の操作を行います。
- 前の演習で作成した テスト スイート: Functional Tests ノードをクリックして [テスト スイートの追加] ボタンをクリックします。
- [テスト スイートの追加] ウィザードで [空] を選択し、[終了] ボタンをクリックします。
- テスト スイート ツリーに追加された、新しい テスト スイート: テスト スイート ノードをダブルクリックします。
- テスト スイートの設定パネルで、[名前] フィールドに Scenario Test - Search, Add to Cart, and Remove from Cart と入力し、ツールバーの [保存] ボタンをクリックします。
- 前の演習で作成した CartServicePort テスト スイートから、SOAP Client のポジティブ テスト ノードの getItemByTitle、addItemToCart、および updateItemInCart をコピーし、Scenario Test - Search, Add to Cart, and Remove from Cart テスト スイートに貼り付けます。必要に応じて、ドラッグアンド ドロップで順番を変更できます。
これらの 3 つのテストは、顧客が呼び出す可能性がある典型的なビジネス トランザクションを表しています。これが私達のシナリオ テストのベースになります。
今後のテストで使用する結果の保管
以下のように XML Data Bank を設定して、結果を保管することができます。
- Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart テスト スイートの テスト 1: getItemByTitle ノードをダブルクリックします。
- テストの設定パネルで、[データ ソース] ドロップダウン メニューから Books を選択します。
- [titleKeyword] のチェックボックスをオンにし、itemId 要素のドロップダウン メニューから [パラメータライズ] と [キーワード] を選択します。
- Scenario Test - Search, Add to Cart, and Remove from Cart テスト スイートの テスト 2: addItemToCart ノードをダブルクリックします。
- itemID 要素について、ドロップダウン メニューから [パラメータライズ] と [データ ソース ウィザードの使用] を選択します。
- [既存のテスト レスポンスの値でパラメータライズする] ダイアログで以下の操作を行って、このテストを実行したときに、テスト 1 から保管された値が itemId 要素の値として自動的に挿入されるようにします。
- ダイアログ上部の [既存のメッセージ] ドロップダウン リストから テスト 1: getItemByTitle を選択します。
- [期待されるメッセージ] から id 要素を選択し、[追加] ボタンをクリックします。
- [OK] をクリックします。
GUI 右側のパネルに、itemId のパラメータライズされた値として テスト 1:id が表示されています。また、Scenario Test - Search, Add to Cart, and Remove from Cart テスト スイートの テスト 1: getItemByTitle ノードの下に レスポンス SOAP エンベロープ > XML Data Bank ノードが追加されています。
- テストの設定パネルで、quantity 要素の固定値として 3 と入力し、ツールバーの [保存] ボタンをクリックします。
- テスト 3: updateItemInCart ノードをダブルクリックします。
- cartId 要素について、ドロップダウン メニューから [パラメータライズ] と [データ ソース ウィザードの使用] を選択します。
- [既存のテスト レスポンスの値でパラメータライズする] ダイアログで以下の操作を行って、このテストを実行したときに、テスト 2 から保管された値が cartId 要素の値として自動的に挿入されるようにします。
- ダイアログ上部の [既存のメッセージ] ドロップダウン リストから テスト 2: addItemtoCart を選択します。
- [期待されるメッセージ] から cartID 要素を選択し、[追加] ボタンをクリックします。 cartID 要素が、テストに対応する [データ ソース列名] と共に [選択された要素] リストに表示されます。
- [OK] をクリックします。
orderNumber のパラメータライズされた値として テスト 2:cartID が表示されています。 また、Scenario Test - Search, Add to Cart, and Remove from Cart テスト スイートの テスト 2: addItemtoCart ノードの下に レスポンス SOAP エンベロープ > XML Data Bank ノードが追加されています。
- テスト 1 からの id を使用するように、itemID を設定します。
- ツールバーの [保存] ボタンをクリックします。
- Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart ノードを選択し、ツールバーの [テスト] ボタンをクリックします。このテストを実行すると、テスト 1 に保管された id 要素が、テスト 2 と テスト 3 の itemID 要素の値として自動的に挿入されます。さらに、テスト 2 の cartId が テスト 3 で使用されます。
- Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart を展開してトラフィックを確認し、各テストの トラフィック オブジェクト > Traffic Viewer ノードをダブルクリックします。
- テスト 1 から返却された書籍の id が テスト 2 の入力として使用されていることがわかります。また、テスト 2 で発注された注文の cartId が テスト 3 の入力として使用されていることがわかります。
- Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart ノードを右クリックし、[回帰コントロールの作成/更新] を選択します。
- [レスポンス検証] ウィザードで、[回帰コントロールの作成] を選択して [次へ] をクリックし、[複数のコントロールを作成] を選択して [終了] ボタンをクリックします。テストが実行され、各 SOAP Client テストに回帰コントロールが追加されます。
- Scenario: Scenario Test - Search, Add to Cart, and Remove from Cart ノードを選択し、ツールバーの [テスト] ボタンをクリックします。テストの失敗がレポートされます。
- [品質タスク] ビューでエラー メッセージを検証します。回帰テストの失敗の原因は、レスポンス メッセージ中に現れる動的コンテンツです。以降のステップでは、この種の動的データを持つ要素を無視するように設定します。
- [品質タスク] ビューで、各テスト スイート ノードの最初のエラーを右クリックし、ショートカット メニューの [XPath の無視] をクリックします。表示される [無視する XPath の設定] ダイアログで、[OK] ボタンをクリックします。このステップでは 2 つの XPath を無視する必要があります。
- テスト スイート: Scenario Test - Search, Add to Cart, and Remove from Cart ノードを選択し、ツールバーの [テスト] ボタンをクリックします。今度はすべてのテストが成功するはずです。
ここまでの操作で、書店 Web サービスを利用するときによく起こりそうなビジネス トランザクションをテストする、完全に機能するシナリオ テストが作成できました。これ以外にも、起こりうるビジネス トランザクションのシナリオを作成してみてください。また、テスト カバレッジを拡張するために、ネガティブ テスト ケースを作成することもできます。