how handle exception soapui groovy scripts soapui tutorial 11
このSoapUIチュートリアルでは、Groovyスクリプトを使用した例外処理について説明します。 groovyでのランタイム例外の処理は、Javaライブラリが統合されているためJavaと同様です。ただし、SoapUIの基本的な概念について説明し、Javaでの例外処理について詳しく説明します。
これは SoapUIチュートリアルシリーズのチュートリアル#11 。これは、SoapUIの無料バージョンの最後のチュートリアルです。このシリーズには、SoapUIプロの機能、RESTおよびSOAPサービス、SoapUIでのデータ駆動型テストに関するトピックがいくつか残っています。
例外の簡単な紹介から始めましょう:
例外は何ですか?
アン 例外 プログラムの実行中に発生するエラーです。これは、無効なデータ、ネットワーク接続の喪失、使用できないファイルを開こうとする、無効なクラスにアクセスする、メモリリーク、つまりシステムに大量のデータを処理させる、データベースサーバーが応答しないなどの多くの理由で発生する可能性があります。これらのエラーユーザー、開発者、またはハードウェアリソースが原因である可能性があります。
内部的には、実行中に例外が発生すると、SoapUIはハンドラーを見つけようとします。ハンドラーは、例外をキャッチするためのコードを含むブロックです。
例外は2つのタイプに分類されます。
- ランタイム例外
- コンパイル時の例外–明示的なコンパイラがないためSoapUIには適用されません
無効なコードの実行時例外を示す次のスクリーンショットを見てください。以下のスクリプトでは、整数を0で除算しようとしました。エラーダイアログでは、Javaライブラリから例外が発生し、エラーメッセージが次のようになっていることがわかります。 ゼロ除算 。
実行中にこの例外をキャッチし、プログラムで処理できます。その前に、Java例外の概念で使用される重要なキーワードのいくつかを見ていきます。一部のキーワードは、Groovyスクリプトでも使用できます。彼らです:
- スロー –このキーワードは、手動で例外をスローする、つまりユーザー定義の例外をスローするのに役立ちます
- 投げる –メソッド定義から事前定義された例外を呼び出すために使用されます。したがって、実行中にランタイムエラーが見つかった場合は、例外をキャッチします。
- 試してみてください そして キャッチ –「try」キーワードは「catch」キーワードとともに使用されます。実行中に例外が発生する可能性のあるプログラムの部分を予測できる場合は、その場所で「try」ブロックを使用できます。 「try」ブロックの終わりに、「catch」ブロックが例外のキャッチを開始する必要があります。 catchブロック内で、例外を処理するハンドラーを作成する必要があります。
- 最後に –これは、例外構造のデフォルトおよびオプションのブロックです。プログラムの最後に、未使用のオブジェクトのクリーニング、接続の終了など、このブロック内で実行できるステートメントを実行する必要がある場合。
例外の一般的な構造は次のとおりです。
試してみてください
{{
}
catch
{
}
finally
{
}
Now let us implement the exception handler in the sample code which we have already seen in the screenshot.
ジェンキンスは経験豊富な人のための質問と回答をインタビューします
Add new test suite under the GlobalWeather project. Then add a test case and groovy script test step under the test step. In the script editor, enter the following script.
// initializing the variables int a = 10; int b = 0; // try, catch block try { // Dividing a number by zero int c = a/b; log.info('Result :' + c); } catch(Exception expObj) { // Exception Handler log.info('You are trying to divide ' + a + ' by ' + b + '. This is not possible actually!'); }
上記のスクリプトは、スクリーンショットに示すように次の結果を生成します。
前に説明したように、ゼロである「A」「B」を除算しようとしました。そのため、「catch」ブロックが実行され、ユーザー定義のメッセージがログに表示されます。 「catch」ステートメントで、 例外 すべての組み込み例外のJavaのスーパークラスであるクラス。事前定義されたすべての例外クラスは、 例外 クラス。予測できないランタイム例外を処理するために、 例外 「catch」ブロックのクラス。
上記のスクリプトを変更して、必要な結果を取得しましょう。次のスクリーンショットを参照してください。
これを定期的なWebサービスのテストで試してみましょう。次のスクリプトでは、try-catchブロックを使用しなかったため、ランタイム例外が発生します。
// Initializing array with 5 elements String() countryNames = new String(5); // Assigning values to the array countryNames(0) = 'India'; countryNames(1) = 'Cyprus'; countryNames(2) = 'Canada'; countryNames(3) = 'Austria'; countryNames(4) = 'Mauritius'; // Iterate the array elements and assign value to the global property for(int idx=0; idx<=5; idx++) { com.eviware.soapui.SoapUI.globalProperties.setPropertyValue( 'CountryName', countryNames(idx)); def testStep = testRunner.testCase.testSteps('GetCitiesByCountry'); testStep.run(testRunner,context); log.info('Executed at ' + idx + ' times!'); }
上記のスクリプトは、という例外をスローします ArrayIndexOutOfBoundsException スクリプトが無効な配列インデックス、つまり使用できない5にアクセスしようとしているためです。
(画像をクリックすると拡大表示されます)
上記のスクリプトでわかるように、「countryNames」配列を5のサイズで初期化しました。 5つの文字列値、つまり国名のみを受け入れます。反復ステートメント内で、次のようにチェックしました。 idx<= 5 。したがって、ループは最大6回繰り返され、6を検索しようとします。th配列内の要素。値が存在しないため、実行時例外がスローされます。
このシナリオを処理するために、上記のスクリプトを以下のように変更しましょう。
String() countryNames = new String(5); // Try block try { countryNames(0) = 'India'; countryNames(1) = 'Cyprus'; countryNames(2) = 'Canada'; countryNames(3) = 'Austria'; countryNames(4) = 'Mauritius'; for(int idx=0; idx<=5; idx++) { com.eviware.soapui.SoapUI.globalProperties.setPropertyValue ( 'CountryName', countryNames(idx)); def testStep = testRunner.testCase.testSteps('GetCitiesByCountry'); testStep.run(testRunner,context); log.info('Executed at ' + idx + ' times!'); } } catch(Exception exp) // Catch the exception and displaying the message in the log { log.info('You are trying to access invalid array index. Please check and try again!'); }
上記のスクリプトの結果は次のとおりです。
これは、プログラムの実行中にランタイム例外を処理する方法です。
注意: 使用できます ArrayIndexOutOfBoundsException を使用する代わりに、「catch」ブロックで直接 例外 クラス。正確な例外名を「catch」ブロックに入れると、特定の例外がスローされた場合にのみキャッチされます。他の事前定義された例外がスローされた場合、catchブロックは失敗します。
優れた自動化スクリプトには、適切な例外ハンドラーが必要です。そうしないと、実行のすべての瞬間を監視することが困難になります。
前に述べたように、groovyスクリプトは「throws」キーワードをサポートして、事前定義された例外を呼び出し元にスローします。
この概念を理解するには、以下のサンプルスクリプトを参照してください。
(引数/パラメータ) 投げる
{{
}
上記のスケルトンのサンプルコードは次のとおりです。
// Invoke Method MethodWithThrowKeyword(); void MethodWithThrowKeyword() throws ArrayIndexOutOfBoundsException { String() countryNames = new String(5); countryNames(0) = 'India'; countryNames(1) = 'Cyprus'; countryNames(2) = 'Canada'; countryNames(3) = 'Austria'; countryNames(4) = 'Mauritius'; for(int idx=0; idx<=5; idx++) { log.info('Country Names: ' + countryNames(idx)); } }
上記のスクリプトでは、 ArrayIndexOutOfBoundsException 呼び出された関数にスローされます。そこで、try-catchブロックで適切に処理する必要があります。それ以外の場合、SoapUIによって例外がスローされます。
結論:
通常のWebサービス関連のテストスクリプトに例外処理を実装すると、コードを維持し、テスターによる手動の介入/監視を減らすのに役立ちます。スクリプトで必要な場合は、複数のtry-catchブロックを使用できます。
次のSoapUIチュートリアル#12: 次のチュートリアルでは、SoapUIProバージョンの詳細と機能を提供します。
だから読み続けてください。コメント、質問、提案はいつものように大歓迎です!
推奨読書
- プロオーディエンス向けのSoapUIProの4つの重要な機能– SoapUIチュートリアル#12
- SoapUIで基本的なGroovyスクリプトを作成する方法-SoapUiチュートリアル#6
- SoapUI Groovyスクリプトでプロパティを使用する方法-SoapUIチュートリアル#7
- リクエストとレスポンスのデータをファイルに保存するためのクイックSoapUIガイド– SoapUIチュートリアル#15
- 15以上のSoapUIチュートリアル:最高のWebサービスAPIテストツール
- 高度なSoapUIGroovyスクリプトの概念を学ぶ-SoapUIチュートリアル#9
- 初心者向けの詳細なEclipseチュートリアル
- SoapUI ProでRESTプロジェクトを作成する方法:チュートリアル#13