SoapUI のアサーション: スクリプト、XQuery、XPath タイプのチュートリアル
アサーションとは何ですか?
アサーションとは、何かを肯定したり主張したりする行為を意味します。 チェック ポイントまたは検証ポイントとして解釈することもできます。
リクエストが Web サーバーに送信されると、レスポンスが受信されます。 応答に予期したデータが含まれているかどうかを検証する必要があります。 応答を検証するには、アサーションを使用する必要があります。
アサーションの種類
応答を表明するにはさまざまな方法があります。 ただし、応答を検証する際に一般的に使用される SoapUI アサーション タイプに焦点を当てます。 以下は、SoapUI のオープンソース バージョンで利用できるものです。
- プロパティコンテンツ
- 適合状況基準
- スクリプト
- SLA
- JMS
- セキュリティ
上記のものとは別に、PRO バージョンには組み込みの JDBC アサーションもあり、これを使用して Web サービスがデータベースを正しく更新したかどうかをアサートできます。
アサーションを含む
指定された文字列の存在を検索します。 正規表現もサポートしています。
WSDL リクエストを使用して、前のチュートリアルと同じ例を続けます。 http://www.dneonline.com/calculator.asmx.
ステップ1: デフォルトではアサーションはありません。
- アサーションの数は「アサーション」タブに表示されます。
- 新しいアサーションを追加するには、[新しいアサーションの追加] ボタンをクリックします。
ステップ2: 今、
- アサーション カテゴリを選択します。
- アサーション タイプを選択します。
- 「追加」をクリックします
ステップ3: 文字列「46」が応答に存在するかどうかを検証してみましょう。 「OK」をクリックします
注: 大文字と小文字を無視して正規表現を追加することもできます。
ステップ4: 追加すると、すぐにアサーションが実行され、VALID か INVALID が表示されます。
ステップ5: ここで、「SoapUI のアサーションを含む」の内容を「47」に変更して、何が起こるかを見てみましょう。
ステップ6: アサーションが実行され、結果がユーザーにスローされます。 応答内に文字列「47」がないため、アサーションは失敗しました。
アサーションは含まれていません
指定した文字列が存在しないかを検索します。 正規表現もサポートしています。
ステップ1: 「新しいアサーションを追加」ボタンをクリックした後、
- アサーション カテゴリを選択します。
- アサーション タイプを選択します。この場合は「含まれていない」です。
- 「追加」をクリックします
ステップ2: 文字列「intA」が応答に存在するかどうかを検証してみましょう。 「FromCurrency」という文字列を入力し、「OK」をクリックします。
ステップ3: アサーションが追加されるとすぐに実行され、結果が表示されます。これまでに 2 つのアサーションを追加したので、両方のアサーションが実行され、結果が表示されます。
ステップ4: 次に、「Not Contains アサーション」の内容を変更して、何が起こるかを見てみましょう。 文字列「AddResult」が存在しないことを確認します。
ステップ5: 文字列「AddResult」は実際には応答に存在するため、以下に示すように「NOT Contains」アサーションは失敗します。
XPATH 一致アサーション
あなたが使用します XPath 式を使用してターゲット ノードとその値を選択します。 XPath は、XML ドキュメントからノードを選択するための XML クエリ言語です。
ステップ1: [新しいアサーションの追加] ボタンをクリックした後、
- アサーション カテゴリを選択します。
- アサーション タイプを選択します。この場合は「XPath Match」です。
- 「追加」をクリックします
ステップ2: XPath の追加ウィンドウが開きます。
SoapUI XPath を追加する前に、NameSpace を宣言する必要があります。 XML 名前空間は、Uniform Resource Identifier (URI) 参照によって識別される名前のコレクションであり、XML ドキュメント内で要素名および属性名として使用されます。 同じものが SOAP UI XPath アサーションでも使用されます。
XML 名前空間を宣言するには、[宣言] ボタンをクリックするだけで自動的に作業が行われます。また、手動で名前空間を自分で宣言することもできます。
名前空間を宣言した後、作成した名前空間を使用して XPath を参照する必要があります。
「宣言」ボタンをクリックすると、URI が XNUMX つあるため、XNUMX つの名前空間がポップアップ表示されます。 それらの XNUMX つはスキーマ URL で、もう XNUMX つは実際の Web サービス URL に対応します。 XPath を参照する際には、スキーマ名前空間ではなく、Web サービスが配置されている実際の名前空間を使用する必要があります。
名前空間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 に追加されたアサーションは以下のように表示されます。
アサーションのスクリプト作成
このアサーション手法は、何百ものアサーションを管理および維持することが非常に難しいため、最も広く使用されています。
SOAP UIは次のいずれかを使用します。 Groovy スクリプトまたは Javaスクリプト スクリプトアサーション用。スクリプト手法は、SOAP をテストするためのフレームワークの開発に採用されています。スクリプトアサーションは、次のような状況で使用されます。
スクリプトを使用すると、ユーザーは、それぞれセットアップ メソッドとティア ダウン メソッドを使用して、テストケースの実行前と実行後にいくつかの操作を実行できます。セットアップは、特定のメソッド (例: オブジェクトの作成と初期化) を実行する前に実行される手順であり、ティア ダウンは、メソッドの実行後に実行される手順です (例: オブジェクトの破棄とクリーンアップ)。この機能は他のアサーション タイプでは使用できず、コーディングを通じてのみ実行できます。
これにより、ユーザーはプロジェクトの開閉を実行して、プロジェクト関連の設定を初期化またはクリーンアップしたり、スクリプト作成時に非常に役立つ環境変数を操作したりすることができます。
これは、動的な応答コンテンツをアサートするのに役立ちます。
スクリプト アサーションは、SOAP UI によって事前定義されていないユーザー定義のアサーションを作成するために使用されます。
SoapUI でのスクリプト アサーションのデモでは、計算機 WSDL、以前に作成したテスト ケース「Add」を利用します。
ステップ1: Groovy スクリプトを追加する手順は、アサーションが事前定義されたものではないことを除いて、他のアサーションの手順と同じです。 代わりに、これはユーザー定義のアサーションであり、組み込みのものよりも優れた柔軟性を提供します。
アサーションを追加する必要があるテスト ステップを選択します。
以下に示すように、「アサーションを追加」ボタンをクリックします。
ステップ2: 次に、「アサーション」カテゴリを選択します。
- この場合はスクリプトです。
- SoapUI Script Assertion を選択すると、それに関連付けられたサブタイプはありません。
- 「追加」をクリックします。
ステップ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: Now
- ナビゲーターツリーからテストスイートを選択します
- 「実行」ボタンをクリックします
- テスト スイート全体の結果が表示されます。
Xquery一致アサーション
Xquery 式を使用して、ターゲット プロパティからコンテンツを選択します。 SoapUI の XQuery アサーションをよりよく理解するには、さらに大きな応答 XML が必要です。 以下に示すように、もう XNUMX つの WSDL をインポートしてみましょう。 http://www.webservicex.net/medicareSupplier.asmx?WSDL
ステップ1: 既存のプロジェクトを右クリックし、「WSDL の追加」を選択します。
ステップ2: 既存のプロジェクトを右クリックし、「WSDL の追加」を選択します。 他のオプションはデフォルトのままにし、「OK」ボタンをクリックします。
ステップ3: すべての操作は以下のようにリストされます。
ステップ4: ここで、を追加しましょう テストケース 作成したのと同じテストスイート内で テスト 通貨換算機。
ステップ5: テストケースの名前を入力し、「OK」ボタンをクリックします。
ステップ6: テストケースは以下のように作成します。
ステップ7: Add
以下に示すように、「Soap Test Request」と入力して新しいテスト ステップを作成します。
ステップ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>
以下の URL の WSDL – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity
ステップ13: テストを実行すると、以下の応答を受け取ります
ステップ14: すべてのサプライヤー番号を検証する必要があるとします。 何百もの XPath アサーションが必要なため、XPath アサーションは使用できません。 したがって、この場合には XQuery の使用が避けられません。
XQuery アサーションは、本質的に反復的な XML 応答のグループを検証するのに役立ちます。
ステップ15: 次に、「アサーションを追加」をクリックします。
- 「アサーション カテゴリ」 (この場合はプロパティ コンテンツ) を選択します。
- アサーション タイプとして「XQuery アサーション」を選択します。
- 「追加」をクリックします。
ステップ16: XPath アサーションと同様に、名前空間を宣言する必要があります。
-
「宣言」ボタンをクリックすると、SOAP UI が自動的に名前空間を宣言できるようになります。宣言ボタンをクリックすると、「代わりにスキーマから名前空間を宣言してください」というメッセージを含む「ポップアップ」がユーザーに表示されます。以下に示すように、「はい」をクリックして続行します。
ご注意: 「宣言」ボタンを押すと、名前空間の宣言として別の URL が使用される可能性がありますが、実際の Web サービスの場所の名前空間がコーディングの対象となります。
- すべてのサプライヤー番号を取得するには、XPath クエリを作成する必要があります。それを <SupplierNumber> 内に配置し、 タグ。
- 「現在から選択」をクリックすると、現在の応答から実行されます。
- 「現在から選択」をクリックすると、すべてのサプライヤー番号がリストされます。
- [保存]をクリックします。
// 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 回限りの使用には十分に適しています。
アサーションのオプション
作成されたアサーションは、以下で強調表示されているコントロール パネルを使用して最適に制御できます。
作成されたアサーションにより、テスターはアサーション ツールボックスから次の項目を構成できるようになります。
オプション | Description |
---|---|
選択したアサーションの順序が上に移動します。 | |
選択したアサーションの順序が下に移動します。 | |
選択したアサーションを削除します | |
選択したアサーションを再構成/編集します。 |
- 以下は、SOAP UI の PRO バージョンでのみ利用できる機能です。 PRO バージョンでは、アサーションをグループ化することもできるため、作成したアサーションにもう XNUMX つの検証レイヤーを追加できます。
- プロバージョンでも可能 アサーションの複製: このオプションを使用すると、テスターはアサーションを同じプロジェクトまたは別のプロジェクト内の別のテスト ステップにコピーできるようになります。
- アサーションの無効化/有効化: このオプションを使用すると、グループ化されたアサーションまたはグループ化されていないアサーションを無効または有効にできます。アサーションが無効になっている場合はグレー表示され、テスト ケースが実行されても、無効なアサーションは実行されません。
- アサーションのグループ解除: テスターが決定した場合は、グループ化されたアサーションをグループ解除できます。
AND: すべてのアサーションは VALID アサーションとして評価され、グループ条件が PASSED になります。OR: グループ PASSED 条件をアサートするには、グループ内のアサーションの少なくとも XNUMX つが VALID である必要があります。
さまざまなアサーション タイプで使用できるメソッドの完全なリスト
アサートメカニズム |
Description |
プロパティのコンテンツ | |
含まれています | 指定された文字列の存在を検索します。 正規表現もサポートしています。 |
含まない | 指定した文字列が存在しないかを検索します。 正規表現もサポートしています。 |
XPath の一致 | XPath 式を使用して、ターゲット ノードとその値を選択します。 |
XQueryの一致 | Xquery 式を使用して、ターゲット プロパティからコンテンツを選択します。 |
コンプライアンス、ステータス、規格 | |
HTTP すべてのリソースをダウンロード | ダウンロード後に HTML ドキュメントを検証し、HTML を含むすべてのプロパティを保持します。 |
無効なHTTPステータスコード | HTML 応答に、定義されたコードのリストにないステータス コードが含まれているかどうかを確認します。 |
SOAP フォールトではない | 最後に受信したメッセージが SOAP フォールトではないかどうかを検証します。 これが SOAP テスト ステップにのみ適用されることは明らかです。 |
スキーマのコンプライアンス | 最後に受信したメッセージが WSDL または WADL 標準スキーマ定義に準拠しているかどうかを検証します。 SOAP および REST テスト ステップに適しています。 |
SOAP フォルト | 最後に受信したメッセージが SOAP フォールトかどうかを確認します。 これは、「NOT SOAP」障害アサーションの逆です。 |
SOAP応答 | 最後に受信した応答が有効な SOAP 応答であるかどうかを検証し、SOAP テスト リクエスト ステップにのみ有効です。 |
有効なHTTPステータスコード | HTML 応答に、定義されたコードのリストにあるステータス コードが含まれているかどうかを確認します。 これは、「無効な HTTP ステータス コード」アサーションの逆です。 |
WS アドレッシング要求 | 最後に受信したリクエストに適切な WS-Addressing ヘッダーが含まれているかどうかを確認します。 |
WS アドレス指定応答 | 最後に受信した応答に適切な WS-Addressing ヘッダーが含まれているかどうかを確認します。 |
WS-セキュリティステータス | 最後に受信したメッセージに有効な WS-Security ヘッダーが含まれており、SOAP リクエストに対してのみ有効であるかどうかを検証します。 |
スクリプト | |
スクリプトアサーション | ユーザーがカスタム スクリプトを実行してユーザー定義の検証を実行できるようにします。 |
SLA | |
応答SLA | 最後に受信した応答の応答時間が定義された制限内であるかどうかを検証します。 |
JMS | |
JMSステータス | テスト ステップの JMS リクエストが正常に実行され、JMS エンドポイントを使用したテスト ステップに対して良好な状態を維持しているかどうかを検証します。 |
JMSタイムアウト | テスト ステップの JMS 応答に指定された期間を超えていないかどうかを検証します。 |
セキュリティ | |
機密情報の漏洩 | 応答メッセージがターゲット システムに関する機密情報を公開していないかどうかを確認します。 このアサーションは、REST、SOAP、および HTTP のテスト ステップに使用できます。 |
上記のアサーションを含む SOAPUI プロジェクトをダウンロードします
一般的なエラーとトラブルシューティング
正しい名前空間を使用してください。 名前空間は、Web サービスが存在する URL である必要があります。
スクリプト アサーションの開発中にエラーがスローされた場合は、「log.info」を使用して変数の内容を出力します。
目的の出力が得られなかった場合は、リクエストに有効な入力が渡されているかどうかを確認してください。
たとえば、通貨コンバータで、「intA」を整数ではない「x」として入力すると、出力では障害コード「SOAP-Client」がスローされます。これは、通貨コンバータから渡されるパラメータに問題があることを意味します。クライアント側。
XPATH および XQuery アサーションを使用するときは、正しい構文を使用していることを確認してください。 上記のアサーションを使用するときは、コロン(:) の代わりにドット(.) を使用しないでください。 構文は //namespace:Tagname であり、//namespace.tagname ではありません。 そうすると、タグ名が正しいにもかかわらず、「現在の応答には一致しません」というメッセージが表示される可能性があります。