SOAP UIのTestSuite機能を使ったWebサービスのテスト自動化
SOAP UIはWebサービスを呼び出すことができるテストツールです。
前回はモックサービスの機能を使って、Webサービスがまだできてないタイミングでの、Webサービスの利用側のアプリのテストを効率的に行う方法を書きました。SOAP UIはフリー版が用意されています。有償版はレポーティング機能などが充実しているようです。
今回はSOAP UIのTestSuiteという機能を使って、JUnitのような感じでWebサービスのテストを自動的に行う方法です。
単体テストレベルだれば、xUnitを使ってプログラムレベルで確認するので良いと思います。ただ、機能テスト、結合テストまで行くと、SOAP UIの様なテストツールを使って、実際にテスト環境にデプロイされたWebサービスを自動で、何度も、テストできるのはすごいメリットだと思います。
早速準備。まず、新しいプロジェクトを作成します。
テストをしたいWebサービスのWSDLを選択して、"Create TestSuite"にチェックをします。これでTestSuiteが用意されますが後からでも追加できます。
画面左にTestSuiteの設定が管理されているツリーができています。
管理の大きさとしてはTestSuite>Test Case>Test Stepです。一連のテストのシナリオがTestCaseで、そのシナリオの中で実装されるアクションがStepくらいの感じで良いと思います。TestStepを右クリックして"Add Step"を選ぶとStepをどんどん追加していけます。
Assertionの種類はいろいろ事前に用意されています。
以下は、レスポンスメッセージ中に含まれる文字列をチェックしている例です。
文字列比較以外にもXPathやXQueryを使って確認したり、HTTPのレスポンスコードや、SOAP Faultかどうか、さらにはSLAとしてレスポンスタイムが何秒以内かを確認することまでできます。
さて、実際にテストを事項してみましょう。
この例では、テストを実行したけれど、Assertionで想定外の結果が発見されています。
さらに、エラーになったテストをクリックすると、更に詳細な結果を確認することができます。
もちろんJUnitのように一連のシナリオを連続で実行することもできるので、商品の登録、参照、削除といったシナリオを用意しておいて、自動でテストを流すこともできます。
今やっているプロジェクトでも、全部のケースを網羅するテストはSOAP UIでやる予定は無いのですが、よく使われる機能、クリティカルな機能は、SOAP UIのTestSuiteを使って、サーバにデプロイされる度に自動で実行するように計画しようとしています。