Parasoft SOAtest には、テストしているサービスが変更されたときにテストを一括更新できる 2 つの機能が用意されています。
- 変更アドバイザー を使用すると、テストに影響するサービスの変更を特定し、テストを一括更新することができます。ユーザーが手動で 1 つずつ変更を反映する必要はありません。
- 検索と置換 を使用して、サービスで変更されたことが分かっている値をテストの中から検索し、新しい値で一括更新することができます。
この 2 つの機能は、迅速で正確な更新を確実に行うために、通常同時に使用します。この演習では、これらの機能を使ってテストを更新する方法について説明します。
"古い" バージョンのサービスに対するテストの作成
まず、古いバージョンの書店サービスに対してテストを作成しましょう。後の演習で "変更アドバイザー" と ”検索と置換” の機能を使ってこのテストを更新します。
古いバージョンの書店サービスに対してテストを作成するには、以下の操作を行います。
- 新しい空のプロジェクトを作成して、名前を
Change Advisor Lesson
にします。- [ファイル] > [新規] > [プロジェクト] を選択します。
- [一般] > [プロジェクト] を選択します。
- [次へ] をクリックします。
- [プロジェクト名] に
Change Advisor Lesson
と入力します。 - [終了] をクリックします。
- このプロジェクトに新しい .tst ファイルを追加します。
- プロジェクトの Change Advisor Lesson ノードを右クリックし、[新規追加] > [テスト (.tst) ファイル] を選択します。
- [ファイル名] に
Change Advisor Lesson
と入力し、 [次へ] をクリックします。 - [SOA] > [WSDL] を選択し、[次へ] をクリックします。
- WSDL URL として
http://localhost:8080/parabank/services/store-01?wsdl
と入力します。 - [WSDL から機能テストを作成] チェックボックスがオンであることを確認します。
- [終了] ボタンをクリックします。
- テスト スイート: テスト スイート > テスト 2: addNewItemToInventory をダブルクリックしてエディターを開きます。
- book 要素のチェックボックスをオンにし、[編集] ボタンをクリックします。
- 以下のようにフィールドを設定します。
- Id: 10 と入力します。
- Price: price のチェックボックスをオンにし、 9.99 と入力します。
- stockQuantity: 5 と入力します。
- ツールバーの [保存] ボタンをクリックします。注意: 新しいバージョンの書店サービスをテストするためにテストを更新する際、これらの値が適切に引き継がれることを後で確認します。
- テスト ケース エクスプローラーで テスト 2: addNewItemToInventory を選択し、実行します。
- ツールバーの [テストまたは出力の追加] ボタンをクリックします。
- レスポンス > SOAP エンベロープ > XML Assertor を選択し、 [終了] をクリックします。
- XML Assertor のエディターで [構成] タブを開き、[追加] をクリックします。構造アサーション > オカレンス アサーション を選択して [次へ] をクリックします。
- 表示された XML ツリーで price を選択し、 [終了] をクリックします。
- オカレンス アサーションの構成で、ドロップダウン メニューから必ず == と 固定 を選択し、入力フィールドに
1
と入力します。
この XML Assertor は、 price
要素が SOAP レスポンス メッセージで 1 回だけ発生することを宣言しています。新しいバージョンの書店サービスでこの price 要素が変更された場合、更新されたテストの XML Assertor を再設定する必要があります。
変更影響度分析の実行
これらのテスト アセットに変更影響度分析を実行するには、以下の操作を行います。
- [ウィンドウ] > [パースペクティブ] > [パースペクティブを開く] > [Parasoft 変更アドバイザー] を選択して [変更アドバイザー] パースペクティブを開きます。
- テスト ケース エクスプローラーで Change Advisor Lesson > Change Advisor Lesson .tst > テスト スイート: テスト スイート を選択します。
- ツールバーの [変更影響度分析の実行] ボタンをクリックします。
- 表示されたダイアログで [現在のサービス記述に対して選択されたアセットをスキャン] を選択し、 [終了] をクリックします。
[品質タスク] ビューで、レイアウトを SOAtest 変更影響度レイアウトに変更します。これは、変更影響度分析の実行結果をレビューするためのレイアウトです。 [品質タスク] ビューのツールバーの [SOAtest 変更影響度レイアウト] ボタンをクリックして、レイアウトを切り替えることができます。
または、ドロップダウン メニューから [SOAtest 変更影響度レイアウト] を選択します。[SOAtest 変更影響度レイアウト] が表示されない場合
緑の [SOAtest 変更影響度レイアウト] ツールバー ボタンが存在しない場合、[内容の構成] をクリックして [SOAtest 変更影響度レイアウト] チェックボックスをオンにしてください。
この変更影響度分析は、テストに保存されたサービス情報と、現在テストが参照している WSDL に格納されたサービス情報とを比較するように構成されています。テスト ケースに影響を与えるような WSDL の変更があれば、変更影響度分析はその変更をレポートするでしょう。演習ではこの WSDL を使ってすべてのテストを作成したので (そしてそれ以降 WSDL は変わっていないので)、変更影響度分析は何も変更をレポートしません。では、別の WSDL に対して変更影響度分析を実行した場合、何が起こるかを見てみましょう。
- テスト ケース エクスプローラーで、Change Advisor Lesson > Change Advisor Lesson.tst > テスト スイート: テスト スイート を選択します。
- ツールバーの [変更影響度分析の実行] ボタンをクリックします。
- [指定されたサービス記述に対して選択されたアセットをスキャン] を選択し、成果物のタイプに WSDL が選択されていることを確認して以下のように設定します。
- 次の WSDL を使用するアセットをスキャン:
http://localhost:8080/parabank/services/store-01?wsdl
- 次の WSDL とアセットを比較:
http://localhost:8080/parabank/services/store-01V2?wsdl
1 番目のオプションは、どのテストに対して分析を実行するかを指定します。2 番目のオプションは、どの WSDL に対してテストを比較するかを指定します。これらの WSDL でサービスに差異があることから、分析は変更をレポートします。
- 次の WSDL を使用するアセットをスキャン:
- [終了] をクリックします。
- [品質タスク] ビューで、レポートされた変更を確認します。 テストの多くで名前空間と targetURI が変わりました。
- テスト 2: addNewItemtoInventory の結果を確認します。
- 他の多くの変更もレポートされたことが分かります。
- 新しい要素 productInfo が追加
- price 要素の名前が変更
- メッセージ中の要素の順序が変更
- 新しい要素 productInfo が追加
- テスト 2: addNewItemtoInventory の結果を確認します。
なお、変更影響度分析は、サービス定義に存在するすべての変更をレポートするわけではない点に注意してください。変更影響度分析がレポートするのは、実際にテストに影響を与える変更だけです。たとえば、現在テストしていない操作に変更が存在した場合、その変更は影響度分析でレポートされません。
変更テンプレートの作成
変更影響度分析を実行すると、[サービス カタログ] ビューに、サービスについての情報と、分析対象のテストがテストしているサービスのバージョンが自動的に表示されます。
書店サービスとバージョンがどのように表示されているかを確認してください。デフォルトでは、SOAtest はサービスの正式な名前とテストしているバージョンを知らないため、サービス名としてサービス定義を使用します。 また、現在テストしているサービスのバージョンを "Old Version" という名前で表し、新しいサービス定義のバージョンを "Current Version" という名前で表します。[サービス カタログ] ビューでは、それぞれのバージョンで検出された操作を参照することができます。
- サービスとバージョンの名前を分かりやすく変更します。
- Service Catalog で、最上位のサービス ノードを右クリックし、[サービス名の変更] を選択します。
- サービス名として
Bookstore
と入力します。 - Bookstore サービスの Old Version ノードを右クリックし、[バージョン名の変更] を選択します。
Old Version
を1.0
で置換します。 - Current Version ノードを右クリックし、[バージョン名の変更] を選択します。
Current Version
を2.0
で置換します。
次に、変更テンプレートを定義します。変更テンプレートでは、新しいバージョンのサービスをテストするために、どのようにテストを更新するかを定義します。
- 以下のように変更テンプレートを作成します。
- サービス カタログで、ノード 1.0 と 2.0 を選択します。
- 右クリックし、変更テンプレートの追加 1.0 -> 2.0 を選択します。
- ファイル名として
LessonTemplate
と入力します。場所は/Change Advisor Lesson
のままにします。 - [終了] をクリックします。変更テンプレートのエディターが開きます。
- 作成された変更テンプレートの [Map Operations] タブを確認します。以下の点に注意してください。
- [Map Operations] タブには、両方の WSDL で定義された操作が表示されるほか、WSDL の異なるバージョン間でのデフォルト マッピングが表示されます。最初に変更テンプレートを作成するとき、SOAtest は異なるバージョン間のデフォルト マッピングを作成して、同じであると判断したノードをマッチさせようとします。
- 緑色は、正しいマッピングであると SOAtest が判断したノード マッチングであり、レビューは必要ありません。
- 黄色は、マッピングが正しくない可能性があると SOAtest が判断したノード マッチングであり、レビューを実施してマッピングを確定または更新することを推奨します。
- ここでは、
getItemById
とgetItemByIdentifier
のマッピングを除いて、すべての操作マッピングが緑色で表示されています。操作の名前が変わったようですが、操作の内容は同じです。これは正しいマッチングのようです。
- getItemById と getItemByIdentifier のマッピングをレビューしたことを示します。 それには、getItemById を右クリックし、「一致 getItemById -> getItemByIdentifier をレビュー済みとしてマーク] を選択します。ノード マッチングの色が緑に変わります。
- 変更テンプレートの [Map Schemas] タブを確認します。以下の点に注意してください。
- [Map Schemas] タブには、それぞれの操作のために定義されたスキーマが表示されます。エディター タブをダブルクリックして、エディターを拡大することができます。
-
addNewItemToInventory
操作には赤い ‘X’ のアイコンが表示されています。これは、スキーマに差異があり、レビューが必要なことを意味します。 - 他の操作のレビューは必要ありません。なぜなら、レビューが必要な変更が検出されなかったからです。赤い ‘X’ のアイコンがない操作を選択すると、すべてのマッチングが緑であることが分かります。
- addNewItemToInventory 操作を選択して確認します。以下の点に注意してください。
-
price
要素とgenre
要素のノード マッチングが黄色であり、レビューが必要です。 -
amount
という新しい要素がありますが、この要素は古いバージョンにはありません。
-
-
price
要素とgenre
要素のマッピングが誤っていることを示すために、price 要素を選択して [切断] をクリックします。
price
要素の名前がamount
に変更され、genre
は WSDL の新しい要素のようです。 -
price
要素の名前がamount
に変更されたことを示すために、price と amount を選択して [接続] をクリックします。
genre
要素は、この操作で出現する新しい要素です。 テストを正しく更新するには、genre 要素のデフォルト値を設定して、更新された各テストがこの値を使用するようにする必要があります。デフォルト値を設定しなければ、更新後のテストはこの新しい要素に対して空の値を送ります。 - 以下の操作を行って、
genre
要素のデフォルト値を設定します。- genre を右クリックし、[追加された "genre" 要素のデフォルト値を設定] を選択します。
- 表示されたダイアログで、入力フィールドに
Literature
と入力し、[OK] をクリックします。 -
genre
に緑色の ‘?’ が表示されていること、すべての一致と不一致のノードが緑色になったことが分かります。これは、この操作のレビューと設定が完了したことを表します
- genre を右クリックし、[追加された "genre" 要素のデフォルト値を設定] を選択します。
- 一番上の productInfo 要素を右クリックし、["productInfo" および子をレビュー済みとしてマーク"] を選択して、amount の 3 個の親ノードがレビューされたことを示します。
- ツールバーの [保存] ボタンをクリックして変更テンプレートを保存します。この時点で、変更テンプレートが定義され、テストに適用する準備ができました。変更テンプレートのエディター タブをダブルクリックして、エディターを標準サイズに戻します。
変更テンプレートの適用によるテストの一括更新
このサービスの変更によって影響を受けるテストを更新するには、以下の操作を行います。
- テスト ケース エクスプローラーで、Change Advisor Lesson.tst を選択し、ツールバーの [変更テンプレートを使用してリファクタリング] ボタンをクリックします。
- ウィザードで以下の操作を行います。
- 1 番目のページを以下のように設定し、[次へ] をクリックします。
バージョン: 1.0
Parasoft アセットを更新してサービス バージョンを使用: 2.0
変更テンプレートの適用によって: LessonTemplate 2 番目のページで、[新しいロケーション] を選択したままにし、[ワークスペース] ボタンをクリックして Change Advisor Lesson プロジェクトを選択します。更新されたテストが Change Advisor Lesson プロジェクト中の新規フォルダーに保存されます。なお、以前のテストを上書きしたい場合があるかもしれませんが、ソース管理システムなどを使ってすでにテストをバックアップしているのでない限り、テストの上書きは推奨しません。上書きすると、元のテストが失われます。
[終了] をクリックします。Change Advisor Lesson という新しいフォルダーが作成されます。このフォルダーには、更新されたアセットがあります。
- 1 番目のページを以下のように設定し、[次へ] をクリックします。
- Change Advisor Lesson.tst を開き、テスト スイート: テスト スイート > テスト スイート: CartServicePort > テスト 2: addNewItemToInventory のエディターを開きます。以下の点に注意してください。
- productInfo 要素を選択すると、
price
要素に設定した値が、変更テンプレートで定義したように、amount 要素に渡されていることが分かります。 - 前に入力した他の値は、新しいテストに引き継がれました。genre 要素を選択すると、変更テンプレートで定義したように、値
Literature
が表示されることが分かります。 - 新しいフォルダーの Environments ノードに、新しい更新された環境が追加され、アクティブな環境として設定されています。
- productInfo 要素を選択すると、
- 新しいフォルダー Change Advisor Lesson > テスト スイート: テスト スイート を選択し、ツールバーの [変更影響度分析の実行] ボタンをクリックします。[現在のサービス記述に対して選択されたアセットをスキャン] を選択し、[終了] をクリックします。変更が何もレポートされない点に注意してください。なぜなら、現在のバージョンのサービスをテストするように新しいテストが更新されたからです。
‘検索と置換’ を使ったテストの更新
変更アドバイザーは、以下のテストに適用することができます。
- サポートされる成果物タイプに対して設定されたテスト
- フォーム入力モードで設定されたテスト
ただし、適用できないケースもあります。たとえば、変更アドバイザーはフォーム XML のメッセージング クライアントをサポートしません。また、XML Assertor の XPath も更新しません。そのようなケースをサポートするために、SOAtest には "検索と置換" の機能が用意されています。この機能を使って、このような種類のフィールドを一括更新することができます。"検索と置換" がなければ、同じ値の変更が何度も出現する場合、フィールドを 1 つずつ更新しなければならないため、大変な労力が必要とされることでしょう。
"検索と置換" を使って値を更新するには、以下の操作を行います。
- 新しいバージョンの Change Advisor Lesson.tst を右クリックし、[テストの実行 "Example Configuration"] を選択します。
- [品質タスク] ビューでツールバーの [SOAtest デフォルト レイアウト] ボタンをクリックして、機能テストの結果を表示します。
- テスト 2: addNewItemToInventory についてレポートされたエラーを確認します。
price
要素がレスポンス XML に出現しなくなったため、失敗が発生していることが分かります (price 要素の名前がamount
に変更され、現在はproductInfo
要素の下にあることを思い出してください)。 - 新しい Change Advisor Lesson フォルダーにある新しい Change Advisor Lesson.tst を選択し、ツールバーの [検索] > [Parasoft 検索] ボタンをクリックします。
- [次のテキストを含む] フィールドに book/price と入力し、[フィールド タイプ] から XPath を選択し、[選択されたリソース] を選択して [検索] をクリックします。
[検索] ビューに検索結果が表示されます。 - XML Assertor の下の XPath を右クリックし、[選択の置換] を選択します。
- 表示されたダイアログで、[With] フィールドに
book/productInfo/amount
と入力し、[OK] をクリックします。
- 新しい WSDL のために作成されたフォルダーで テスト 2: addNewItemToInventory を選択し、id フィールドの値を増やします。ツールバーの [テストの実行] ボタンをクリックします。今回は、XML アサーション中の XPath が最新なので、テストは成功するはずです。