データソースを使用して、SOAP要求を送信し、SOAP応答を返すテストステップを実行しています。
応答を検証するとき、フィールドの1つに値(文字列)があることを期待することもあれば、値に初期化されないこと(つまり、<message/>
の代わりに<message></message>
)を期待することもあります。VSとExcel(私のデータソース)の空のフィールドを比較するときと<message/>
何か違いがあるかどうかは、正直にわかりません。<message></message>
私が知っているのは、soapUIは空のExcelフィールドをと比較するのが好きではないということだけ<message/>
です。
両方のケースをアサートできるほどインテリジェントなアサーションを設定したいと思います。空の結果が予想される場合は、フィールドが空である必要があるとアサートされます。文字列が必要な場合は、文字列がそこにあるとアサートされます。
soapUI Proのデフォルト機能は、空の期待される結果(Excelスプレッドシートから読み込まれる)を空のフィールド(つまり、値がまったくないフィールド)と比較すると機能しないようです。
機能テストの例:
アカウントを作成するAPIをテストしています。そこで、データを入力してアカウントを作成します。
<username>username</username>
<password>password</password>
それから、私は次の応答を期待しています:
<code>0</code>
<resultMessage>Created successfully!</resultMessage>
私のデータソース(Excelスプレッドシート)には次の情報があります:(最初の2つのフィールドが入力され、次の2つは期待される結果です)
ユーザー名、パスワード、0、正常に作成されました!
したがって、soapUIは適切なフィールドを比較し、正常に機能します。
壊れたテストの例:
ここで、アカウントが作成されていないときに何が起こるかをテストしたいとします。
<username>bad username</username>
<password>bad password</password>
それから、私は次の応答を受け取ります:
<code>-1</code>
<resultMessage/>
私のデータソース(Excelスプレッドシート)には次の情報があります:(最初の2つのフィールドが入力され、次の2つは期待される結果であり、4番目のフィールドは空です)
悪いユーザー名、悪いパスワード、-1
したがって、今回は、と比較するための空の値があります<resultMessage/>
。唯一のことは、2つの空のフィールドを適切に比較しないことです。
次のエラーが表示されます。
[Match content of [resultMessage]] XPathContains assertion failed for path [declare namespace ns1='http://website.com/Account/'; //ns1:CreateAccountResponse[1]/resultMessage[1]/text()] : Exception:Missing content for xpath[declare namespace ns1='http://website.com/Account/'; //ns1:CreateAccountResponse[1]/resultMessage[1]/text)()] in Response
私はGroovyに不慣れで、soapUIに不慣れであり、ノードの概念に不慣れです(そして気づいていません)。
問題を解決するためのスクリプトを書くと思いました。スクリプトは、期待される結果が空でないことを確認してから、期待される結果と比較<resultMessage>
します。
期待される結果が空の場合の対処方法については、何も書いていません。
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
holder.namespaces["ns1"] = "http://website.com/Account/"
def node = holder.getDomNode( "//ns1:CreateAccountResponse[1]/resultMessage[1]" )
def expectedResultMessage = context.expand( '${CreateAccount DataSource#resultMessage}' )
if (expectedResultMessage != null)
assert node == expectedResultMessage
ノードとGroovyを初めて使用するnode
ため、の値をの値と適切に比較しているかどうかはわかりませんexpectedResultMessage
。または、VSをチェックして比較する適切な方法がある場合は、それ自体を閉じるフィールド(つまり<resultmessage/>
)。
このスクリプトを実行すると、次の結果が得られます。
[Assert node [resultMessage]] assert node == resultMessage | | | | | null | "" | false <?xml version ="1.0" encoding="UTF-8"?> <resultMessage xmlns:ns1="http://website.com/Account/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"/>
おそらくそれを設定するだけなので、応答はではなく単に返されます<resultMessage></resultMessage>
が<resultMessage/>
、回避策を作成するのではなく、後者に対処する方法があると思います。
うまくいけば、これはそれほど長くはありませんでした、そしてうまくいけば、それは幾分明確でした!どんな助けでもいただければ幸いです!:)