そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

SOAP UIのTestSuite機能を使ったWebサービスのテスト自動化

SOAP UIはWebサービスを呼び出すことができるテストツールです。

前回はモックサービスの機能を使って、Webサービスがまだできてないタイミングでの、Webサービスの利用側のアプリのテストを効率的に行う方法を書きましたSOAP UIはフリー版が用意されています。有償版はレポーティング機能などが充実しているようです。

 

 今回はSOAP UIのTestSuiteという機能を使って、JUnitのような感じでWebサービスのテストを自動的に行う方法です。

 

単体テストレベルだれば、xUnitを使ってプログラムレベルで確認するので良いと思います。ただ、機能テスト、結合テストまで行くと、SOAP UIの様なテストツールを使って、実際にテスト環境にデプロイされたWebサービスを自動で、何度も、テストできるのはすごいメリットだと思います。

 

早速準備。まず、新しいプロジェクトを作成します。

f:id:begirama:20120731155556j:plain

 

テストをしたいWebサービスのWSDLを選択して、"Create TestSuite"にチェックをします。これでTestSuiteが用意されますが後からでも追加できます。

f:id:begirama:20120731155610j:plain

 

画面左にTestSuiteの設定が管理されているツリーができています。

f:id:begirama:20120731155615j:plain

管理の大きさとしてはTestSuite>Test Case>Test Stepです。一連のテストのシナリオがTestCaseで、そのシナリオの中で実装されるアクションがStepくらいの感じで良いと思います。TestStepを右クリックして"Add Step"を選ぶとStepをどんどん追加していけます。

 
ここまでで準備はOK。後は一つ一つのテストのアクションを設定していく番です。
追加したStepで、テスト用のリクエストを設定します。このメッセージがWebサービスに投入されます。次に、Webサービスからの応答をチェックするAssertionを追加します。

f:id:begirama:20120731155621j:plain

 

Assertionの種類はいろいろ事前に用意されています。

f:id:begirama:20120731155625j:plain

 

以下は、レスポンスメッセージ中に含まれる文字列をチェックしている例です。

f:id:begirama:20120731155628j:plain

 

文字列比較以外にもXPathXQueryを使って確認したり、HTTPのレスポンスコードや、SOAP Faultかどうか、さらにはSLAとしてレスポンスタイムが何秒以内かを確認することまでできます。

f:id:begirama:20120731155633j:plain

 

さて、実際にテストを事項してみましょう。

f:id:begirama:20120731155638j:plain

この例では、テストを実行したけれど、Assertionで想定外の結果が発見されています。

 

さらに、エラーになったテストをクリックすると、更に詳細な結果を確認することができます。

f:id:begirama:20120731155641j:plain

 

もちろんJUnitのように一連のシナリオを連続で実行することもできるので、商品の登録、参照、削除といったシナリオを用意しておいて、自動でテストを流すこともできます。

f:id:begirama:20120731155648j:plain

 

今やっているプロジェクトでも、全部のケースを網羅するテストはSOAP UIでやる予定は無いのですが、よく使われる機能、クリティカルな機能は、SOAP UIのTestSuiteを使って、サーバにデプロイされる度に自動で実行するように計画しようとしています。