SoapUI のアサーション: スクリプト、XQuery、XPath タイプのチュートリアル

アサーションとは何ですか?

アサーションとは、何かを肯定したり主張したりする行為を意味します。 チェック ポイントまたは検証ポイントとして解釈することもできます。

リクエストが Web サーバーに送信されると、レスポンスが受信されます。 応答に予期したデータが含まれているかどうかを検証する必要があります。 応答を検証するには、アサーションを使用する必要があります。

アサーションの種類

応答を表明するにはさまざまな方法があります。 ただし、応答を検証する際に一般的に使用される SoapUI アサーション タイプに焦点を当てます。 以下は、SoapUI のオープンソース バージョンで利用できるものです。

  1. プロパティコンテンツ
  2. 適合状況基準
  3. スクリプト
  4. SLA
  5. JMS
  6. セキュリティ
SoapUI のアサーションの種類
SoapUI のアサーションの種類

上記のものとは別に、PRO バージョンには組み込みの JDBC アサーションもあり、これを使用して Web サービスがデータベースを正しく更新したかどうかをアサートできます。

アサーションを含む

指定された文字列の存在を検索します。 正規表現もサポートしています。

WSDL リクエストを使用して、前のチュートリアルと同じ例を続けます。 http://www.dneonline.com/calculator.asmx.

ステップ1: デフォルトではアサーションはありません。

  • アサーションの数は「アサーション」タブに表示されます。
  • 新しいアサーションを追加するには、[新しいアサーションの追加] ボタンをクリックします。

アサーションを含む

ステップ2: 今、

  1. アサーション カテゴリを選択します。
  2. アサーション タイプを選択します。
  3. 「追加」をクリックします

アサーションを含む

ステップ3: 文字列「46」が応答に存在するかどうかを検証してみましょう。 「OK」をクリックします

注: 大文字と小文字を無視して正規表現を追加することもできます。

アサーションを含む

ステップ4: 追加すると、すぐにアサーションが実行され、VALID か INVALID が表示されます。

アサーションを含む

ステップ5: ここで、「SoapUI のアサーションを含む」の内容を「47」に変更して、何が起こるかを見てみましょう。

アサーションを含む

ステップ6: アサーションが実行され、結果がユーザーにスローされます。 応答内に文字列「47」がないため、アサーションは失敗しました。

アサーションを含む

アサーションは含まれていません

指定した文字列が存在しないかを検索します。 正規表現もサポートしています。

ステップ1: 「新しいアサーションを追加」ボタンをクリックした後、

  1. アサーション カテゴリを選択します。
  2. アサーション タイプを選択します。この場合は「含まれていない」です。
  3. 「追加」をクリックします

アサーションを含まない

ステップ2: 文字列「intA」が応答に存在するかどうかを検証してみましょう。 「FromCurrency」という文字列を入力し、「OK」をクリックします。

アサーションを含まない

ステップ3: アサーションが追加されるとすぐに実行され、結果が表示されます。これまでに 2 つのアサーションを追加したので、両方のアサーションが実行され、結果が表示されます。

アサーションを含まない

ステップ4: 次に、「Not Contains アサーション」の内容を変更して、何が起こるかを見てみましょう。 文字列「AddResult」が存在しないことを確認します。

アサーションを含まない

ステップ5: 文字列「AddResult」は実際には応答に存在するため、以下に示すように「NOT Contains」アサーションは失敗します。

アサーションを含まない

XPATH 一致アサーション

あなたが使用します XPath 式を使用してターゲット ノードとその値を選択します。 XPath は、XML ドキュメントからノードを選択するための XML クエリ言語です。

ステップ1: [新しいアサーションの追加] ボタンをクリックした後、

  1. アサーション カテゴリを選択します。
  2. アサーション タイプを選択します。この場合は「XPath Match」です。
  3. 「追加」をクリックします

XPath 一致アサーション

ステップ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 サービスが配置されている実際の名前空間を使用する必要があります。

XPath 一致アサーション

名前空間soap='http://schemas.xmlsoap.org/soap/envelope/'を宣言します。

名前空間 ns1='http://tempuri.org/' を宣言します。

XPath 一致アサーション

ステップ3: ここで、検証する必要がある XML ノードの XPath を入力する必要があります。

//ns1:AddResult で囲まれたノードの値を返します。 & ns1 は、「http://tempuri.org/」を指す宣言された名前空間に対応します。

XML を入力した後、現在の応答からの値が今後の比較のために選択されるように、[現在から選択] をクリックする必要があります。

XPath 一致アサーション

ステップ4: これまでのところ、

  1. 名前空間を宣言した後、検証する必要がある XML ノードの XPath を入力しました。
  2. 現在の値を期待値にするには、「現在から選択」をクリックする必要があります。
  3. 現在の値がユーザーに表示され、必要に応じて変更できます。
  4. [保存]をクリックします。

XPath 一致アサーション

ステップ5: SoapUI に追加されたアサーションは以下のように表示されます。

XPath 一致アサーション

アサーションのスクリプト作成

このアサーション手法は、何百ものアサーションを管理および維持することが非常に難しいため、最も広く使用されています。

SOAP UIは次のいずれかを使用します。 Groovy スクリプトまたは Javaスクリプト スクリプトアサーション用。スクリプト手法は、SOAP をテストするためのフレームワークの開発に採用されています。スクリプトアサーションは、次のような状況で使用されます。

スクリプトを使用すると、ユーザーは、それぞれセットアップ メソッドとティア ダウン メソッドを使用して、テストケースの実行前と実行後にいくつかの操作を実行できます。セットアップは、特定のメソッド (例: オブジェクトの作成と初期化) を実行する前に実行される手順であり、ティア ダウンは、メソッドの実行後に実行される手順です (例: オブジェクトの破棄とクリーンアップ)。この機能は他のアサーション タイプでは使用できず、コーディングを通じてのみ実行できます。

これにより、ユーザーはプロジェクトの開閉を実行して、プロジェクト関連の設定を初期化またはクリーンアップしたり、スクリプト作成時に非常に役立つ環境変数を操作したりすることができます。

これは、動的な応答コンテンツをアサートするのに役立ちます。

スクリプト アサーションは、SOAP UI によって事前定義されていないユーザー定義のアサーションを作成するために使用されます。

SoapUI でのスクリプト アサーションのデモでは、計算機 WSDL、以前に作成したテスト ケース「Add」を利用します。

ステップ1: Groovy スクリプトを追加する手順は、アサーションが事前定義されたものではないことを除いて、他のアサーションの手順と同じです。 代わりに、これはユーザー定義のアサーションであり、組み込みのものよりも優れた柔軟性を提供します。

アサーションを追加する必要があるテスト ステップを選択します。

アサーションのスクリプト作成

以下に示すように、「アサーションを追加」ボタンをクリックします。

アサーションのスクリプト作成

ステップ2: 次に、「アサーション」カテゴリを選択します。

  1. この場合はスクリプトです。
  2. SoapUI Script Assertion を選択すると、それに関連付けられたサブタイプはありません。
  3. 「追加」をクリックします。

アサーションのスクリプト作成

ステップ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"}
  1. 「実行」ボタンをクリックして実行をトリガーします。
  2. スクリプトの出力は、[出力] ペインに表示されます。 コンバージョン値と最終結果 (合格または不合格) の両方が出力されます。
  3. 「スクリプトアサーションに合格しました」という情報が表示されます。[OK] をクリックします。

注: スクリプトの構文が正しい限り、最後の情報ポップアップには常に「スクリプト アサーションが合格しました」というメッセージが表示されます。 スクリプト内のあなたの主張とは何の相関関係もありません。

アサーションのスクリプト作成

[OK]をクリックします。

ステップ5: アサーション タブには、このテスト スイートに追加したすべてのアサーションが、それぞれのアサーションに対するステータスとともに表示されます。

アサーションのスクリプト作成

ステップ6: Now

  1. ナビゲーターツリーからテストスイートを選択します
  2. 「実行」ボタンをクリックします
  3. テスト スイート全体の結果が表示されます。

アサーションのスクリプト作成

Xquery一致アサーション

Xquery 式を使用して、ターゲット プロパティからコンテンツを選択します。 SoapUI の XQuery アサーションをよりよく理解するには、さらに大きな応答 XML が必要です。 以下に示すように、もう XNUMX つの WSDL をインポートしてみましょう。 http://www.webservicex.net/medicareSupplier.asmx?WSDL

ステップ1: 既存のプロジェクトを右クリックし、「WSDL の追加」を選択します。

Xquery一致アサーション

ステップ2: 既存のプロジェクトを右クリックし、「WSDL の追加」を選択します。 他のオプションはデフォルトのままにし、「OK」ボタンをクリックします。

Xquery一致アサーション

ステップ3: すべての操作は以下のようにリストされます。

Xquery一致アサーション

ステップ4: ここで、を追加しましょう テストケース 作成したのと同じテストスイート内で テスト 通貨換算機。

Xquery一致アサーション

ステップ5: テストケースの名前を入力し、「OK」ボタンをクリックします。

Xquery一致アサーション

ステップ6: テストケースは以下のように作成します。

Xquery一致アサーション

ステップ7: Add
以下に示すように、「Soap Test Request」と入力して新しいテスト ステップを作成します。

Xquery一致アサーション

ステップ8: テストステップの名前を入力します。 「Supplier_by_City」と言うと、より意味のあるものになります。「OK」をクリックします。

Xquery一致アサーション

ステップ9: 現在地に最も近い Opera検証したい項目を選択します。この場合は、「MedicareSupplierSoap -> GetSupplierByCity」です。「OK」をクリックします。

Xquery一致アサーション

ステップ10: テスト ケースの名前を入力し、[OK] をクリックします。

Xquery一致アサーション

ステップ11: リクエスト XML アウトラインは以下のように表示されます。

Xquery一致アサーション

ステップ12: ここで、「ニューヨーク」市のすべてのサプライヤー情報を検索してみましょう。

これを行うには、コードに次の行を追加します。

<GetSupplierByCity xmlns="http://www.webservicex.net/">

<City>New York</City>

</GetSupplierByCity>

以下の URL の WSDL – http://www.webservicex.net/medicareSupplier.asmx?op=GetSupplierByCity

Xquery一致アサーション

ステップ13: テストを実行すると、以下の応答を受け取ります

Xquery一致アサーション

ステップ14: すべてのサプライヤー番号を検証する必要があるとします。 何百もの XPath アサーションが必要なため、XPath アサーションは使用できません。 したがって、この場合には XQuery の使用が避けられません。

XQuery アサーションは、本質的に反復的な XML 応答のグループを検証するのに役立ちます。

Xquery一致アサーション

ステップ15: 次に、「アサーションを追加」をクリックします。

  1. 「アサーション カテゴリ」 (この場合はプロパティ コンテンツ) を選択します。
  2. アサーション タイプとして「XQuery アサーション」を選択します。
  3. 「追加」をクリックします。

Xquery一致アサーション

ステップ16: XPath アサーションと同様に、名前空間を宣言する必要があります。

  1. 「宣言」ボタンをクリックすると、SOAP UI が自動的に名前空間を宣言できるようになります。宣言ボタンをクリックすると、「代わりにスキーマから名前空間を宣言してください」というメッセージを含む「ポップアップ」がユーザーに表示されます。以下に示すように、「はい」をクリックして続行します。

    ご注意: 「宣言」ボタンを押すと、名前空間の宣言として別の URL が使用される可能性がありますが、実際の Web サービスの場所の名前空間がコーディングの対象となります。

    Xquery一致アサーション

  2. すべてのサプライヤー番号を取得するには、XPath クエリを作成する必要があります。それを <SupplierNumber> 内に配置し、 タグ。
  3. 「現在から選択」をクリックすると、現在の応答から実行されます。
  4. 「現在から選択」をクリックすると、すべてのサプライヤー番号がリストされます。
  5. [保存]をクリックします。
// 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)}
}

Xquery一致アサーション

ステップ17: XQuery アサーションが実行され、以下に示すように「アサーション」パネルに最終結果が表示されます。 これで、すべてのサプライヤー番号情報を検証した Xquery アサーションが正常に追加されました。 リクエストが Web サーバーに送信されるたびに、同じことが実際の値と比較されます。

注: 実際の値は表示されません。すべての実際の値が期待値と同じ場合は VALID と表示され、そうでない場合は 'Failed' と表示されます。

Xquery一致アサーション

組み込みアサーションをいつ使用するか?

  • 応答が短い場合、組み込みアサーションのいずれかを使用して検証できる場合。
  • 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 ではありません。 そうすると、タグ名が正しいにもかかわらず、「現在の応答には一致しません」というメッセージが表示される可能性があります。

一般的なエラーとトラブルシューティング