how handle exception soapui groovy scripts soapui tutorial 11
I denna SoapUI-handledning kommer vi att titta på undantagshantering med Groovy-skript. Hantering av undantag för runtime i groovy liknar Java eftersom Java-biblioteken är integrerade. Vi kommer dock att diskutera grundläggande begrepp i SoapUI och gå in på djupet av undantagshantering i Java.
Detta är handledning # 11 i SoapUI-handledningsserier . Detta är den sista guiden för den kostnadsfria versionen av SoapUI. Det finns ett par fler ämnen kvar i denna serie som handlar om SoapUI pro-funktioner, REST- och SOAP-tjänster och datadriven testning i SoapUI.
Låt oss börja med en kort introduktion till ett undantag:
Vad är ett undantag?
En undantag är ett fel som uppstår under körningen av ett program. Det kan hända på grund av många anledningar som ogiltiga data, förlust av nätverksanslutning, försök att öppna filer som inte är tillgängliga, få tillgång till ogiltig klass, minnesläckage, dvs tvinga systemet att arbeta med enorm mängd data, databasservern svarar inte etc. Dessa fel kan bero på användare, utvecklare eller hårdvaruresurser.
Internt, när ett undantag påträffas under körningen, kommer SoapUI att försöka hitta hanteraren. Handler är blocket som innehåller koden för att fånga undantaget.
Undantag kategoriseras i två typer:
- Runtime-undantag
- Undantag för kompileringstid - inte tillämpligt på SoapUI eftersom det inte har en uttrycklig kompilator
Titta på följande skärmdump som visar oss ett körtidsundantag för ogiltig kod. I skriptet nedan försökte vi dela ett heltal med 0. I feldialogen kan man se att undantaget tas upp från java-bibliotek och felmeddelandet är Dividera med noll .
Vi kan fånga detta undantag under körningen och hantera det programmatiskt. Innan det kommer vi att se några av de viktiga nyckelorden som används i java undantagskoncept. Några av nyckelorden kan också användas i groovy script. Dom är:
- Kasta - Det här nyckelordet hjälper oss att kasta ett undantag manuellt, dvs att kasta användardefinierade undantag
- Kastar - Den används för att anropa de fördefinierade undantagen från metoddefinitionen. Så det fångar undantaget om det finns något runtime-fel under körningen.
- Prova och Fånga - 'försök' nyckelord används med 'fånga' nyckelord. Om vi kan förutsäga den del av programmet där undantaget kan uppstå under körningen kan vi använda 'försök' -blocket på den platsen. I slutet av 'försök' -blocket bör 'fångst' -blocket börja få ett undantag. Inuti fångblocket måste vi skriva föraren för att hantera undantaget.
- Till sist - Detta är standard- och valfritt block i undantagsstrukturen. Om vi behöver några uttalanden som ska utföras i slutet av programmet, som att rengöra oanvända föremål, stänga anslutningar etc. som kan göras inuti detta block.
Följande är den allmänna strukturen för ett undantag:
Prova
{
}
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!'); }
Ovanstående skript ger följande resultat som visas på skärmdumpen.
Som vi diskuterade tidigare försökte vi dela 'A' 'B' vilket är noll. Så fångstblocket körs och visar det användardefinierade meddelandet i loggen. Se att vi har använt i “fångst” uttalande Undantag klass som är superklassen i Java för alla inbyggda undantag. Alla fördefinierade undantagsklasser ärvs från Undantag klass. För att hantera oförutsägbara runtimeundantag kan vi använda Undantag klass i 'fångst' -blocket.
Låt oss nu ändra ovanstående skript för att få önskat resultat. Se följande skärmdump:
Låt oss nu prova detta i våra vanliga webbtjänsttester. I följande skript använde vi inte försök-fångst-block så vi får undantaget för runtime.
// 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!'); }
Ovanstående skript ger ett undantag som kallas ArrayIndexOutOfBoundsException eftersom skriptet försöker komma åt ogiltigt array-index, dvs 5 som inte är tillgängligt.
(Klicka på bilden för förstorad vy)
Som du kan se i ovanstående skript har vi initierat 'countryNames' -array med storleken fem. Det accepterar endast fem strängvärden, dvs. landnamn. Inuti de iterativa uttalandena har vi kontrollerat som idx<= 5 . Så slingan kommer att iterera upp till sex gånger och den kommer att försöka söka 6thelement i matrisen. Eftersom värdet inte kommer att finnas där ger det ett undantag för körning.
konvertera youtube till mp3 längre än 20 minuter
För att hantera detta scenario, låt oss ändra ovanstående skript enligt nedan:
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!'); }
Här är resultatet för ovanstående skript.
Så här kan vi hantera undantag för runtime under vårt programkörning.
Notera: vi kan använda ArrayIndexOutOfBoundsException i 'fångst' -blocket direkt istället för att använda Undantag klass. Om vi lägger in det exakta undantagsnamnet i 'fångst' -blocket, kommer det att fångas först när det specifika undantaget kastas. Om några andra fördefinierade undantag kastas kommer fångsten att misslyckas.
Ett bra automatiseringsskript bör ha rätt undantagshanterare. Annars blir det svårt att övervaka varje ögonblick av körningen.
Som jag nämnde tidigare stöder groovy script 'kastar' nyckelord för att kasta det fördefinierade undantaget till den som ringer.
Se exemplet nedan för att förstå detta koncept:
(argument / parametrar) kastar
{
}
Här är exempelkoden för ovanstående skelett.
// 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)); } }
I ovanstående skript, ArrayIndexOutOfBoundsException kommer att kastas till den kallade funktionen. Där måste vi hantera ordentligt med ett försök-block. Annars kommer ett undantag att kastas av SoapUI.
Slutsats:
Implementering av undantagshantering i våra vanliga webbtjänster relaterade testskript kommer att vara till hjälp för oss att behålla koden och minska manuell intervention / övervakning av testare. Vi kan använda flera försöksfångstblock när det krävs i skriptet.
Nästa SoapUI-handledning nr 12: I nästa handledning kommer vi att ge mer information och funktioner i SoapUI Pro-versionen.
Så fortsätt läsa. Kommentarer, frågor, förslag är välkomna, som alltid!
Rekommenderad läsning
- 4 Viktiga funktioner i SoapUI Pro för Pro Audience - SoapUI Tutorial # 12
- Hur man skriver Basic Groovy Script i SoapUI - SoapUi Tutorial # 6
- Hur man använder egenskaper i SoapUI Groovy Script - SoapUI Tutorial # 7
- En snabb SoapUI-guide för att lagra förfrågan och svarsdata i en fil - SoapUI-handledning nr 15
- 15+ SoapUI-självstudier: Det bästa testtjänstprogrammet för webbtjänster
- Lär dig avancerade SoapUI Groovy Scripting Concepts - SoapUI Tutorial # 9
- Fördjupade förmörkningsövningar för nybörjare
- Så här skapar du REST-projekt i SoapUI Pro: Handledning nr 13