SoapUI Mockテクニック(パラメータや乱数など)

soap_logo01
SmartBear社のSoapUIを使ってSoapサービステスト用のMockを使ったテストのサンプルです。

SoapUIについては、日本語の情報が少ないので備忘録もかねて残しておきます。
 

まずはテスト環境~準備

1)下記リンクよりSoapUIをインストールします。
https://www.soapui.org/

2)テスト用のサンプルWSDLが必要なのでこちらの方の記事を参考に作成してください。
http://blogs.yahoo.co.jp/dk521123/34495744.html

3)作成したWSDLをSoapUIに読み込ませます。
SoapUIの上部メニューから
File > New Soap Project を開き、Initial WSDLに作成したサンプルWSDLを読み込ませます。

4)リクエストに対するレスポンスモックを作成します。

Add to Mock Service

5)作成したレスポンスモックを右クリックし、Show MockService Editorを開きます。
※デフォルトのままなら「MockService1」が出来ています。

緑色矢印の再生ボタンを押すとサービスが起動します。
起動ができれば「running on port 8080」と表示されます。

WSDLを確認してみます。
ブラウザから次のアドレスを表示してみてください。
http://localhost:8080/?WSDL

上の画面が表示されていればOKです。
ちなみに8080ポートが他のサービスに使用されている等は、MockService Editorの歯車ボタンをクリックするとポート変更できます。

モックサービスからのレスポンスを確認

Request1をダブルクリックして開き、再生ボタンを押します。

ResponseのXMLが表示されます。これはMockService1のResponse1の内容がそのまま返ってきています。

これで、固定文字列のテスト用モックはできました。
次に、ランダム文字列を返してみましょう。

モックのレスポンスXMLをいじります。
messageのところに変数をいれ、13桁のランダム数値を返すGroovyスクリプトを記述します。

<xsd:message>${test1}</xsd:message>

スクリプト(Groovy)

def msg1 = String.format("%013d", (int)Math.floor(Math.random() * 999))
requestContext.test1 = msg1

この状態で、Request1のウィンドウに戻り、再生ボタンを押すと押すたびに値が変わります。
すなわち、モックにアクセスする度に値が変わるようになりました。

次に、リクエストに含まれる値をレスポンスに含めるようにします。
たとえば以下のようにリクエストのmessageを設定します。

次にレスポンスモックのGroovyスクリプトを以下のように記述します。

スクリプト(Groovy)

def holder = new com.eviware.soapui.support.XmlHolder( mockRequest.requestContent )
def msg1 = holder.getNodeValue("//*:message")
requestContext.test1 = msg1

※getNodeValueの引数の文字列はXPathです。*はnamespaceのワイルドカードです。

これで、Request1の再生ボタンを押すとリクエストXMLに指定したのと同じ文字列がレスポンスとして返ってくると思います。

また、1つのSoapUI上から別のポートを使って2つ以上のSoapサービスモックを起動させることができます。


このように、1つのRequestに対して別のMockService2を作り、ポートを変えて起動するとリクエストするURLによって異なるレスポンスが返るようなテストのさせ方が可能です。

2つ以上の環境からアクセスされる時などは便利だと思いますのでご活用ください。

■SoapUIの動的レスポンスの参考URL
https://www.soapui.org/soap-mocking/creating-dynamic-mockservices.html

投稿者: rizworks

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です