主張 SoapUI: スクリプト、XQuery、XPath 型
⚡ スマートサマリー
主張 SoapUI これらは、Webサービスの応答が正しいかどうかを判断するチェックポイントであり、単に実行されるリクエストを、実際の検証可能なコンテンツに対して実際に合格または不合格となるテストに変えます。
アサーションとは何ですか?
アサーションとは、何かを肯定したり主張したりする行為を意味します。 チェック ポイントまたは検証ポイントとして解釈することもできます。
リクエストがWebサーバーに送信されると、レスポンスが受信されます。レスポンスに期待するデータが含まれているかどうかを検証する必要があります。レスポンスを検証するには、アサーションを使用する必要があります。アサーションがない場合、テストステップはサービスが応答したことを証明するだけで、正しく応答したことを証明しません。そのため、すべてのテストステップでアサーションが必要になります。 APIテスト 少なくとも1つは携帯すべきだ。
アサーションの種類
返答を表明する方法は様々ありますが、ここでは一般的に使用されている方法に焦点を当てます。 SoapUI レスポンスを検証する際のアサーションタイプ。以下はオープンソース版で利用可能なカテゴリです。 SoapUI.
- プロパティコンテンツ
- 適合状況基準
- スクリプト
- SLA
- JMS
- セキュリティ
下のスクリーンショットに示すように、ダイアログではすべての主張がこれらのカテゴリに分類されます。

上記以外にも、Pro版にはJDBCアサーション機能が組み込まれており、これを使用してWebサービスがデータベースを正しく更新したかどうかを検証できます。
バージョンノート: 現在 SoapUI ドキュメントには、 JDBC 上記のカテゴリに加えてカテゴリ(JDBCステータスとJDBCタイムアウト)と、 メッセージ内容 プロパティコンテンツ内のアサーションで、よりリッチな XML 比較を実現します。ここで「Pro」と呼ばれる商用版は現在販売されています。 ReadyAPI SmartBearによって開発されているため、新しいビルドではメニューのラベルの表示が異なる場合がありますが、アサーションの動作は同じままです。
アサーションを含む
指定された文字列の存在を検索します。 正規表現もサポートしています。
WSDL リクエストを使用して、前のチュートリアルと同じ例を続けます。 http://www.dneonline.com/calculator.asmxまだそのプロジェクトを構築していない場合は、 プロジェクト、テストスイート、テストケースの作成 最初。
ステップ1:デフォルトでは、アサーションは存在しません。
- アサーションの数は「アサーション」タブに表示されます。
- 新しいアサーションを追加するには、[新しいアサーションの追加] ボタンをクリックします。
ステップ2:今、
- アサーション カテゴリを選択します。
- アサーション タイプを選択します。
- 「追加」をクリックします
ステップ3:レスポンスに文字列「46」が存在するかどうかを確認します。「OK」をクリックしてください。
注: 大文字と小文字を無視して正規表現を追加することもできます。
ステップ4:追加するとすぐにアサーションが実行され、有効か無効かが表示されます。
ステップ 5: 次に、「Contains Assertion in」の内容を変更するとします。 SoapUI「47」に変更して、何が起こるか見てみましょう。
ステップ6:アサーションが実行され、結果がユーザーに返されます。レスポンスに文字列「47」が含まれていないため、アサーションは失敗しました。
アサーションを含まない
その対となる機能は逆の動作をします。指定された文字列が存在しないかどうかを検索します。正規表現にも対応しています。
ステップ 1: 「新しいアサーションを追加」ボタンをクリックした後、
- アサーション カテゴリを選択します。
- アサーション タイプを選択します。この場合は「含まれていない」です。
- 「追加」をクリックします
ステップ2:レスポンスに文字列「intA」が存在するかどうかを確認します。文字列「FromCurrency」を入力し、「OK」をクリックします。
ステップ3:アサーションが追加されるとすぐに実行され、結果が表示されます。これまでに2つのアサーションを追加したため、両方のアサーションが実行され、結果が表示されます。
ステップ4:次に、「含まれないアサーション」の内容を変更して、何が起こるか見てみましょう。「AddResult」という文字列が存在しないことを確認します。
ステップ 5: 文字列「AddResult」は実際にレスポンスに含まれているため、以下に示すように「NOT Contains」アサーションは失敗します。
XPath 一致アサーション
文字列マッチングは単純なので、次のアサーションでは代わりに単一のノードを対象とします。XPath式を使用して、対象ノードとその値を選択します。 XPathは、XMLドキュメントからノードを選択するためのXMLクエリ言語です。
ステップ 1: 「新しいアサーションを追加」ボタンをクリックした後、
- アサーション カテゴリを選択します。
- アサーション タイプを選択します。この場合は「XPath Match」です。
- 「追加」をクリックします
ステップ2:XPathを追加するウィンドウが開きます。
追加する前に SoapUI XPath では、名前空間を宣言する必要があります。XML 名前空間は、Uniform Resource Identifier (URI) 参照によって識別される名前の集合であり、XML ドキュメントでは要素名および属性名として使用されます。 SoapUI XPathアサーション。
XML名前空間を宣言するには、「宣言」ボタンをクリックするだけで自動的に宣言されます。もちろん、手動で名前空間を宣言することも可能です。
名前空間を宣言した後、作成した名前空間を使用して XPath を参照する必要があります。
「宣言」ボタンをクリックすると、URIが2つあるため、2つの名前空間が表示されます。そのうちの1つはスキーマです。 URL そしてもう一方とは、実際のウェブサービスに対応するものです。 URLXPathを参照する際には、スキーマの名前空間ではなく、Webサービスが配置されている実際の名前空間を使用する必要があります。宣言された行は、以下に示すようにXPathボックスの上部に表示されます。
名前空間soap='http://schemas.xmlsoap.org/soap/envelope/'を宣言します。
名前空間 ns1='http://tempuri.org/' を宣言します。
ステップ3:次に、検証する必要のあるXMLノードのXPathを入力する必要があります。
//ns1:AddResult で囲まれたノードの値を返します。 & ns1 は、「http://tempuri.org/」を指す宣言された名前空間に対応します。
XML を入力した後、現在の応答からの値が今後の比較のために選択されるように、[現在から選択] をクリックする必要があります。
ステップ4:これまでのところ、
- 名前空間を宣言した後、検証する必要がある XML ノードの XPath を入力しました。
- 現在の値を期待値にするには、「現在から選択」をクリックする必要があります。
- 現在の値がユーザーに表示され、必要に応じて変更できます。
- [保存]をクリックします。
ステップ 5: 追加されたアサーション SoapUI 以下のように表示されます。
アサーションのスクリプト作成
このアサーション手法は、何百ものアサーションを管理および維持することが非常に難しいため、最も広く使用されています。
SoapUI どちらかを使用します Groovy スクリプトまたは Javaスクリプト スクリプトのアサーション用。スクリプト技術は開発に採用されています。ping SOAPをテストするためのフレームワーク。スクリプトによるアサーションは、以下の状況で使用されます。
- スクリプトを使用すると、セットアップメソッドとティアダウンメソッドを使用して、テストケースの実行前と実行後にいくつかの操作を実行できます。セットアップは、特定のメソッドを実行する前に実行される手順(例:オブジェクトの作成と初期化)であり、ティアダウンは、メソッドの実行後に実行される手順(例:オブジェクトの破棄とクリーンアップ)です。この機能は他のアサーションタイプでは利用できず、コーディングによってのみ実現できます。
- この機能を使うと、プロジェクトの開閉操作を実行したり、プロジェクト関連の設定を初期化またはクリーンアップしたり、環境変数を操作したりすることができ、スクリプト作成時に非常に役立ちます。
- これは、動的な応答コンテンツをアサートするのに役立ちます。
- スクリプトアサーションは、事前に定義されていないユーザー定義アサーションを作成するために使用されます。 SoapUI.
スクリプトのアサーションを実証するために SoapUIそこで、以前に作成したテストケース「Add」と計算機WSDLを使用します。
ステップ1:Groovyスクリプトを追加する手順は、他のアサーションと同様ですが、このアサーションは定義済みのものではなく、ユーザー定義のアサーションであるため、組み込みのものよりも柔軟性が高い点が異なります。
アサーションを追加する必要があるテスト ステップを選択します。
以下に示すように、「アサーションを追加」ボタンをクリックします。
ステップ2:次に、「アサーション」カテゴリを選択します。
- この場合はスクリプトです。
- 選択 SoapUI スクリプトアサーションであり、それに関連付けられたサブタイプはありません。
- 「追加」をクリックします。
ステップ3:スクリプトダイアログが開きます。ここでユーザーは、応答XMLを検証するためのユーザー定義スクリプトを記述できます。
ステップ4:次に、コンバージョン率を検証するためのGroovyスクリプトを作成しましょう。スクリプトはコメント付きで以下に添付されています。 Java スクリプトまたは Groovy 独自のスクリプトを作成する前にスクリプトを作成してください。
//Define Groovy Utils and holder for validating the XML reponse content def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context) def holder = groovyUtils.getXmlHolder(messageExchange.responseContent) //Define the NameSpace holder.namespaces["ns1"] = "http://tempuri.org/" //Get the Value of the Node 'AddResult' and assign to a variable def addResult = holder.getNodeValue("//ns1:AddResult") //print the value of the result in the Output panel log.info "The result value for integers is " + addResult //Comparing the value to print 'Pass' or 'Fail' if(addResult=="46") { log.info "Pass" } else { log.info "fail"}
- 「実行」ボタンをクリックして実行をトリガーします。
- スクリプトの出力は、[出力] ペインに表示されます。 コンバージョン値と最終結果 (合格または不合格) の両方が出力されます。
- 「スクリプトアサーションに合格しました」という情報が表示されます。[OK] をクリックします。
注: スクリプトの構文が正しい限り、最後の情報ポップアップには常に「スクリプト アサーションが合格しました」というメッセージが表示されます。 スクリプト内のあなたの主張とは何の相関関係もありません。
[OK]をクリックします。
ステップ 5: これで、アサーション タブに、このテスト スイートに追加したすべてのアサーションと、それぞれのステータスが表示されます。
ステップ6:今すぐ
- ナビゲーターツリーからテストスイートを選択します
- 「実行」ボタンをクリックします
- テスト スイート全体の結果が表示されます。
XQueryマッチアサーション
これは、XQuery 式を使用してターゲット プロパティからコンテンツを選択します。XQuery アサーションをよりよく理解するためには、はるかに大きなレスポンス XML が必要です。 SoapUI以下に、別のWSDLをインポートしてみましょう。http://www.webservicex.net/medicareSupplier.asmx?WSDL
注意: このチュートリアルで使用したパブリックなwebservicex.netデモエンドポイントは、現在では確実にアクセスできないため、以下のリクエストとレスポンスのスクリーンショットは参考例として残されています。繰り返しノードセットを返すWSDLであれば、XQueryアサーションは全く同じ方法で実行されます。
ステップ 1: 既存のプロジェクトを右クリックし、「WSDL の追加」を選択します。
ステップ2:WSDLの追加ダイアログが開きます。その他のオプションはデフォルトのままにして、「OK」ボタンをクリックします。
ステップ3:すべての操作は以下のように一覧表示されます。
ステップ4:次に テストケース 作成したのと同じテストスイート内で テスト 通貨換算機。
ステップ5:テストケースの名前を入力し、「OK」ボタンをクリックします。
ステップ6:テストケースは以下のように作成されます。
ステップ7:以下に示すように、「SOAPテストリクエスト」タイプの新しいテストステップを追加します。
ステップ8:テストステップの名前を入力します。ここでは、より分かりやすい「Supplier_by_City」としましょう。「OK」をクリックします。
ステップ9: Opera検証したい項目を選択します。この場合は、「MedicareSupplierSoap -> GetSupplierByCity」です。「OK」をクリックします。
ステップ10:テストケースの名前を入力し、「OK」をクリックします。
ステップ11:リクエストXMLアウトラインは以下のように表示されます。
ステップ12:次に、「ニューヨーク」市のすべてのサプライヤー情報を検索します。
これを行うには、コードに次の行を追加します。
<GetSupplierByCity xmlns="http://www.webservicex.net/"> <City>New York</City> </GetSupplierByCity>
以下のWSDL URL – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
ステップ13:テストを実行すると、以下の応答が得られます。
ステップ14:ここでは、すべての仕入先番号を検証する必要があるとします。数百ものXPathアサーションが必要となるため、XPathアサーションを使用することはできません。したがって、この場合はXQueryの使用が不可欠です。
XQuery アサーションは、本質的に反復的な XML 応答のグループを検証するのに役立ちます。
ステップ15:次に「アサーションを追加」をクリックします。
- 「アサーション カテゴリ」 (この場合はプロパティ コンテンツ) を選択します。
- アサーション タイプとして「XQuery アサーション」を選択します。
- 「追加」をクリックします。
ステップ 16: XPath アサーションと同様に、名前空間を宣言する必要があります。
- 「宣言」ボタンをクリックすると自動的に許可されます SoapUI 名前空間を宣言するには、[宣言]ボタンをクリックします。[宣言]ボタンをクリックすると、「代わりにスキーマから名前空間を宣言してください」というメッセージが表示されたポップアップが表示されます。[はい]をクリックして、以下に示すように続行してください。
- すべてのサプライヤー番号を取得するには、XPath クエリを作成する必要があります。それを <SupplierNumber> 内に配置し、 タグ。
- 「現在から選択」をクリックすると、現在の応答から実行されます。
- 「現在から選択」をクリックすると、すべての仕入先番号が表示されます。
- [保存]をクリックします。
注: 「宣言ボタン」をクリックすると、異なる結果になる場合があります URL's は名前空間宣言として使用されますが、コーディングにおいては実際の Web サービスの場所の名前空間が考慮されます。
名前空間宣言を含む完成したXQuery式は次のようになります。
// Namespace declaration declare namespace soap='http://schemas.xmlsoap.org/soap/envelope/'; declare namespace ns1='http://www.webservicex.net/'; declare namespace x = ''; // Placing the result in Myresult Tags{ // Iterating through all the supplier number for $x in //ns1:GetSupplierByCityResponse/ns1:SupplierDataLists/ns1:SupplierDatas/ns1:SupplierData //Return all the Supplier number within ‘SupplierNumber’ Tags. return {data($x/ns1:SupplierNumber)} }
ステップ17:XQueryアサーションが実行され、最終結果が以下に示すように「アサーション」パネルに表示されます。これで、すべてのサプライヤー番号情報を検証するXQueryアサーションが正常に追加されました。このアサーションは、リクエストがWebサーバーに送信されるたびに、実際の値と比較されます。
注: 実際の値は表示されません。すべての実際の値が期待値と同じ場合は VALID と表示され、そうでない場合は 'Failed' と表示されます。
組み込みアサーションをいつ使用するか?
ポイントアンドクリック方式とスクリプト方式の両方が説明されているので、実際にはどちらを選ぶべきかという問題が残ります。
- 応答が短い場合、組み込みアサーションのいずれかを使用して検証できる場合。
- Web サーバーから送信される応答が常に静的である場合は、組み込みアサーションを使用することもできます。 動的である場合、組み込みアサーションを使用してそれをアサートすることはできません。
- タイムアウト アサーションやセキュリティ アサーションなどの組み込みアサーションの使用が避けられない場合。
- 組み込みアサーションは、テストを繰り返す必要がない XNUMX 回限りの使用には十分に適しています。
アサーションのオプション
作成されたアサーションは、以下で強調表示されているコントロール パネルを使用して最適に制御できます。
作成されたアサーションにより、テスターはアサーション ツールボックスから次の項目を構成できるようになります。
| オプション | 詳細説明 |
| 選択したアサーションの順序が上に移動します。 | |
| 選択したアサーションの順序が下に移動します。 | |
| 選択したアサーションを削除します | |
| 選択したアサーションを再構成/編集します。 |
以下は、Pro バージョンでのみ利用可能な機能です。 SoapUI現在は出荷されています ReadyAPIPro版では、アサーションをグループ化する機能も備えているため、作成したアサーションにさらに検証レイヤーを追加できます。
- AND: すべての主張は有効な主張として評価され、結果としてグループ条件は合格となります。
- OR: グループがPASSED条件を満たすためには、グループ内の少なくとも1つのアサーションがVALIDである必要があります。
- プロバージョンでも可能 アサーションの複製このオプションを使用すると、テスターはアサーションを同じプロジェクトまたは別のプロジェクト内の別のテストステップにコピーすることを許可できます。
- アサーションの無効化/有効化:このオプションを使用すると、グループ化されたアサーションまたはグループ化されていないアサーションを無効化または有効化できます。アサーションが無効化されると、グレー表示され、テストケースの実行時に無効化されたアサーションは実行されません。
- アサーションのグループ解除:テスターが希望すれば、グループ化されたアサーションのグループを解除できます。
さまざまなアサーション タイプで使用できるメソッドの完全なリスト
以下の表は、上記で説明したすべてのアサーションを、「アサーションの追加」ダイアログに表示されるカテゴリごとにグループ化してまとめたものです。
| アサートメカニズム | 詳細説明 |
| プロパティのコンテンツ | |
| 含まれています | 指定された文字列の存在を検索します。 正規表現もサポートしています。 |
| 含まない | 指定した文字列が存在しないかを検索します。 正規表現もサポートしています。 |
| XPath の一致 | XPath 式を使用して、ターゲット ノードとその値を選択します。 |
| XQueryの一致 | XQuery式を使用して、対象プロパティからコンテンツを選択します。 |
| コンプライアンス、ステータス、基準 | |
| HTTP すべてのリソースをダウンロード | ダウンロード後に HTML ドキュメントを検証し、HTML を含むすべてのプロパティを保持します。 |
| 無効なHTTPステータス Codes | HTML 応答に、定義されたコードのリストにないステータス コードが含まれているかどうかを確認します。 |
| SOAP フォールトではない | 最後に受信したメッセージが SOAP フォールトではないかどうかを検証します。 これが SOAP テスト ステップにのみ適用されることは明らかです。 |
| スキーマのコンプライアンス | 最後に受信したメッセージが WSDL または WADL 標準スキーマ定義に準拠しているかどうかを検証します。 SOAP および REST テスト ステップに適しています。 |
| SOAP フォルト | 最後に受信したメッセージが SOAP フォールトかどうかを確認します。 これは、「NOT SOAP」障害アサーションの逆です。 |
| SOAP応答 | 最後に受信した応答が有効な SOAP 応答であるかどうかを検証し、SOAP テスト リクエスト ステップにのみ有効です。 |
| 有効なHTTPステータス Codes | HTMLレスポンスに、定義済みのコードリストに含まれるステータスコードが含まれているかどうかを確認します。これは「無効なHTTPステータス」の逆です。 Codes'の主張。 |
| WS アドレッシング要求 | 最後に受信したリクエストに適切な WS-Addressing ヘッダーが含まれているかどうかを確認します。 |
| WS アドレス指定応答 | 最後に受信した応答に適切な WS-Addressing ヘッダーが含まれているかどうかを確認します。 |
| WS-セキュリティステータス | 最後に受信したメッセージに有効な WS-Security ヘッダーが含まれており、SOAP リクエストに対してのみ有効であるかどうかを検証します。 |
| スクリプト | |
| スクリプトアサーション | ユーザーがカスタム スクリプトを実行してユーザー定義の検証を実行できるようにします。 |
| SLA | |
| 応答SLA | 最後に受信した応答の応答時間が定義された制限内であるかどうかを検証します。 |
| JMS | |
| JMSステータス | テスト ステップの JMS リクエストが正常に実行され、JMS エンドポイントを使用したテスト ステップに対して良好な状態を維持しているかどうかを検証します。 |
| JMSタイムアウト | テスト ステップの JMS 応答に指定された期間を超えていないかどうかを検証します。 |
| セキュリティ | |
| 機密情報の漏洩 | 応答メッセージがターゲット システムに関する機密情報を公開していないかどうかを確認します。 このアサーションは、REST、SOAP、および HTTP のテスト ステップに使用できます。 |
上記のアサーションを含む SOAPUI プロジェクトをダウンロードします
一般的なエラーとトラブルシューティング
ほとんどのアサーション失敗 trac小さな間違いの集合に戻るので、式を書き直す前にこれらを確認してください。
- 正しい名前空間を使用してください。名前空間は URL ウェブサービスが設置されている場所。
- 開発中にエラーが発生した場合ping スクリプトのアサーションでは、変数の内容を出力するために「log.info」を使用します。
- 目的の出力が得られなかった場合は、リクエストに有効な入力が渡されているかどうかを確認してください。
例えば、通貨換算ツールで、整数ではない「x」を「intA」に入力すると、出力に「SOAP-Client」というエラーコードが表示されます。これは、クライアント側から渡されるパラメータに問題があることを意味します。無効な値を含むリクエストが最初に表示されます。
応答では、結果ではなくエラーコードが返されます。以下に示すように。
XPathおよびXQueryアサーションを使用する際は、正しい構文を使用していることを確認してください。上記のアサーションを使用する際に、コロン(:)の代わりにドット(.)を使用しないでください。構文は //namespace:Tagname であり、//namespace.tagname ではありません。ドット(.)を使用すると、タグ名が正しければ「現在のレスポンスに一致するものはありません」というメッセージが表示される可能性があります。














































