how handle exception soapui groovy scripts soapui tutorial 11
I denne SoapUI-selvstudie vil vi se på håndtering af undtagelser ved hjælp af Groovy-scripting. Håndtering af runtime-undtagelser i groovy ligner Java, da Java-bibliotekerne er integreret. Vi vil dog diskutere grundlæggende begreber i SoapUI og gå i dybden af undtagelseshåndtering i Java.
Dette er tutorial # 11 i SoapUI tutorials-serien . Dette er den sidste tutorial til den gratis version af SoapUI. Der er et par flere emner tilbage i denne serie, som handler om SoapUI pro-funktioner, REST- og SOAP-tjenester og datadrevet test i SoapUI.
Lad os begynde med en kort introduktion til en undtagelse:
Hvad er en undtagelse?
En undtagelse er en fejl, der opstår under udførelsen af et program. Det kan ske på grund af mange årsager såsom ugyldige data, tab af netværksforbindelse, forsøg på åbne filer, der ikke er tilgængelige, adgang til ugyldig klasse, hukommelseslækage, dvs. at tvinge systemet til at arbejde med enorme mængder data, databaseserveren reagerer ikke osv. Disse fejl kan være på grund af brugere, udviklere eller hardware-ressourcer.
Internt, når der opstår en undtagelse under udførelsen, vil SoapUI forsøge at finde handleren. Handler er den blok, der indeholder koden for at fange undtagelsen.
Undtagelser er kategoriseret i to typer:
- Runtime-undtagelse
- Undtagelse af kompileringstid - gælder ikke for SoapUI, da den ikke har en eksplicit kompilator
Se på følgende skærmbillede, der viser os en runtime-undtagelse for ugyldig kode. I nedenstående script forsøgte vi at dele et heltal med 0. I fejldialogen kan det ses, at undtagelsen er rejst fra java-biblioteker, og fejlmeddelelsen er Opdeling med nul .
Vi kan fange denne undtagelse under udførelsen og håndtere den programmatisk. Før det vil vi se nogle af de vigtige nøgleord, der bruges i java undtagelseskoncepter. Nogle af nøgleordene kan også bruges i det groovy script. De er:
- Kaste - Dette nøgleord hjælper os med at kaste en undtagelse manuelt, dvs. at kaste brugerdefinerede undtagelser
- Kaster - Det bruges til at kalde de foruddefinerede undtagelser fra metodedefinitionen. Så det fanger undtagelsen, hvis der er nogen runtime-fejl fundet under udførelsen.
- Prøve og Fangst - 'forsøg' nøgleord bruges med 'fange' nøgleord. Hvis vi kan forudsige den del af programmet, hvor undtagelsen kan opstå under udførelsen, kan vi bruge 'prøve' -blokken på det sted. I slutningen af 'prøv' -blokken skal 'fangst' -blokken begynde at fange en undtagelse. Inde i fangstblokken er vi nødt til at skrive føreren for at håndtere undtagelsen.
- Langt om længe - Dette er standard- og valgfri blok i undtagelsesstrukturen. Hvis vi har brug for nogle udsagn, der skal udføres i slutningen af programmet, som f.eks. Rengøring af ubrugte objekter, lukning af forbindelser osv., Der kan gøres inde i denne blok.
Følgende er den generelle struktur for en undtagelse:
prøve
{
}
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!'); }
Ovenstående script producerer følgende resultat som vist på skærmbilledet.
Som vi diskuterede tidligere, forsøgte vi at opdele “A” “B”, som er nul. Så 'catch' blokken bliver udført og viser den brugerdefinerede besked i loggen. Se, at vi har brugt i “fangst” -erklæringen Undtagelse klasse, som er superklassen i Java for alle de indbyggede undtagelser. Alle foruddefinerede undtagelsesklasser arves fra Undtagelse klasse. For at håndtere uforudsigelige undtagelser fra runtime kan vi bruge Undtagelse klasse i 'fangst' -blokken.
Lad os nu ændre ovenstående script for at få det krævede resultat. Se følgende skærmbillede:
Lad os nu prøve dette i vores regelmæssige test af webservices. I det følgende script brugte vi ikke prøvefangst-blok, så vi får undtagelsen om 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!'); }
Ovenstående script kaster en undtagelse kaldet ArrayIndexOutOfBoundsException fordi scriptet forsøger at få adgang til ugyldigt matrixindeks, dvs. 5, som ikke er tilgængelig.
(Klik på billedet for at se det forstørrede billede)
Som du kan se i ovenstående script, har vi initialiseret 'countryNames' array med størrelsen på fem. Det accepterer kun fem strengværdier, dvs. landsnavne. Inde i de iterative udsagn har vi kontrolleret som idx<= 5 . Så sløjfen vil gentage op til 6 gange, og den vil forsøge at søge 6thelement i matrixen. Da værdien ikke vil være der, kaster den en runtime-undtagelse.
sql scenariobaserede spørgsmål og svar
For at håndtere dette scenario, lad os ændre ovenstående script som nedenfor:
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!'); }
Her er resultatet for ovenstående script.
Dette er, hvordan vi kan håndtere undtagelser fra runtime under vores programudførelse.
Bemærk: vi kan bruge ArrayIndexOutOfBoundsException i 'fangst' -blokken direkte i stedet for at bruge Undtagelse klasse. Hvis vi lægger det nøjagtige undtagelsesnavn i 'fangst' -blokken ', fanger det kun, når den særlige undtagelse kastes. Hvis der kastes andre foruddefinerede undtagelser, mislykkes fangstblokering.
Et godt automatiseringsscript skal have ordentlige undtagelsesbehandlere. Ellers vil det være svært at overvåge hvert øjeblik i udførelsen.
Som jeg har nævnt tidligere, understøtter groovy script 'kaster' nøgleord for at kaste den foruddefinerede undtagelse til den, der ringer op.
Se nedenstående eksempler på script for at forstå dette koncept:
(argumenter / parametre) kaster
{
}
Her er prøvekoden til ovenstående skelet.
// 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 ovenstående script er ArrayIndexOutOfBoundsException vil blive kastet til den kaldte funktion. Der er vi nødt til at håndtere ordentligt med en prøvefangstblok. Ellers kastes en undtagelse af SoapUI.
Konklusion:
Implementering af undtagelseshåndtering i vores regelmæssige webservicerelaterede testskripter vil være nyttigt for os at vedligeholde koden og reducere manuel intervention / overvågning af testere. Vi kan bruge flere forsøg-fangst-blokke, når det kræves i scriptet.
Næste SoapUI-tutorial # 12: I den næste vejledning giver vi mere information og funktioner i SoapUI Pro-versionen.
Så fortsæt med at læse. Kommentarer, spørgsmål, forslag er velkomne, som altid!
Anbefalet læsning
- 4 Vigtige funktioner i SoapUI Pro for Pro Audience - SoapUI Tutorial # 12
- Sådan skriver du Basic Groovy Script i SoapUI - SoapUi Tutorial # 6
- Sådan bruges egenskaber i SoapUI Groovy Script - SoapUI Tutorial # 7
- En hurtig SoapUI-guide til lagring af anmodnings- og svardata i en fil - SoapUI-vejledning nr. 15
- 15+ SoapUI Tutorials: Det bedste testtestværktøj til webtjenester API
- Lær avancerede SoapUI Groovy Scripting-koncepter - SoapUI Tutorial # 9
- Dybdegående formørkelsesvejledninger til begyndere
- Sådan oprettes REST-projekt i SoapUI Pro: Tutorial # 13