how handle exception soapui groovy scripts soapui tutorial 11
În acest tutorial SoapUI, vom analiza gestionarea excepțiilor folosind scripturi Groovy. Gestionarea excepțiilor runtime în groovy sunt similare cu Java, deoarece bibliotecile Java sunt integrate. Cu toate acestea, vom discuta concepte de bază în SoapUI și vom intra în profunzimea gestionării excepțiilor în Java.
Aceasta este tutorialul nr. 11 din seria de tutoriale SoapUI . Acesta este ultimul tutorial pentru versiunea gratuită a SoapUI. Au mai rămas câteva subiecte în această serie care se referă la caracteristicile SoapUI pro, la serviciile REST și SOAP și la testarea bazată pe date în SoapUI.
Să începem cu o scurtă introducere la o excepție:
Ce este o excepție?
Un excepție este o eroare care se întâlnește în timpul executării unui program. Se poate întâmpla din mai multe motive, cum ar fi date nevalide, pierderea conexiunii la rețea, încercarea fișierelor deschise care nu sunt disponibile, accesarea clasei nevalide, scurgeri de memorie, adică forțarea sistemului să funcționeze cu o cantitate mare de date, serverul de baze de date nu răspunde, etc. Aceste erori poate fi din cauza utilizatorilor, dezvoltatorilor sau resurselor hardware.
Pe plan intern, când se întâlnește o excepție în timpul execuției, SoapUI va încerca să găsească handlerul. Handler este blocul care conține codul pentru a prinde excepția.
Excepțiile sunt clasificate în două tipuri:
- Excepție în timpul rulării
- Excepție de timp de compilare - nu se aplică SoapUI, deoarece nu are un compilator explicit
Uitați-vă la următoarea captură de ecran, care ne arată o excepție de rulare pentru codul nevalid. În scriptul de mai jos am încercat să împărțim un număr întreg la 0. În dialogul de eroare se poate vedea că excepția este ridicată din bibliotecile java și mesajul de eroare este Impartirea cu zero .
Putem prinde această excepție în timpul execuției și o putem gestiona programatic. Înainte de aceasta, vom vedea câteva dintre cuvintele cheie importante care sunt utilizate în conceptele de excepție Java. Unele dintre cuvintele cheie pot fi folosite și în scriptul groovy. Sunt:
- Arunca - Acest cuvânt cheie ne ajută să aruncăm o excepție manual, adică să aruncăm excepții definite de utilizator
- Aruncă - Este folosit pentru a apela excepțiile predefinite de la definiția metodei. Deci va prinde excepția dacă există vreo eroare de execuție găsită în timpul execuției.
- Încerca și Captură - Cuvântul cheie „încearcă” este utilizat cu cuvântul cheie „captură”. Dacă putem prevedea porțiunea programului în care poate apărea excepția în timpul execuției, putem folosi blocul „try” în acel loc. La sfârșitul blocului „try”, blocul „catch” ar trebui să înceapă să prindă o excepție. În interiorul blocului de captură, trebuie să scriem handlerul pentru a gestiona excepția.
- In cele din urma - Acesta este blocul implicit și opțional în structura de excepție. Dacă avem nevoie de declarații pentru a fi executate la sfârșitul programului, cum ar fi curățarea obiectelor neutilizate, închiderea conexiunilor etc. care se pot face în interiorul acestui bloc.
Următoarea este structura generală a unei excepții:
încerca
{
}
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!'); }
Scriptul de mai sus produce următorul rezultat așa cum se arată în captura de ecran.
După cum am discutat mai devreme, am încercat să împărțim „A” „B”, care este zero. Deci, blocul „catch” este executat și afișează mesajul definit de utilizator în jurnal. Vedeți că în declarația „catch” am folosit-o Excepție clasă care este superclasa în Java pentru toate excepțiile încorporate. Toate clasele de excepție predefinite sunt moștenite de la Excepție clasă. Pentru a face față excepțiilor imprevizibile în timpul rulării, putem folosi Excepție clasa în blocul „captură”.
Să modificăm acum scriptul de mai sus pentru a obține rezultatul necesar. Vedeți următoarea captură de ecran:
Să încercăm acum acest lucru în testarea regulată a serviciilor noastre web. În scriptul următor, nu am folosit blocul try-catch, așa că vom obține excepția 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!'); }
Scriptul de mai sus va arunca o excepție numită Indicele matricei este în afara limitelor deoarece scriptul încearcă să acceseze indexul matrice nevalid, adică 5, care nu este disponibil.
(Faceți clic pe imagine pentru vizualizare mărită)
După cum puteți vedea în scriptul de mai sus, am inițializat matricea „countryNames” cu dimensiunea de cinci. Acceptă doar cinci valori de șir, adică nume de țări. În cadrul declarațiilor iterative, am verificat ca idx<= 5 . Deci, bucla va itera de până la 6 ori și va încerca să caute 6aelement din matrice. Deoarece valoarea nu va fi acolo, aruncă o excepție de rulare.
asigurarea calității software-ului în ingineria software-ului
Pentru a gestiona acest scenariu, permiteți-ne să modificăm scriptul de mai sus după cum urmează:
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!'); }
Iată rezultatul pentru scriptul de mai sus.
Acesta este modul în care putem gestiona excepția runtime în timpul executării programului nostru.
Notă: putem folosi Indicele matricei este în afara limitelor în blocul „catch” direct în loc să îl utilizați Excepție clasă. Dacă punem numele excepției exacte în blocul „captură”, acesta va fi capturat numai atunci când este aruncată excepția specială. Dacă se aruncă alte excepții predefinite, blocarea blocării va fi eșuată.
Un script de automatizare bun ar trebui să aibă gestionare de excepție adecvată. În caz contrar, va fi dificil să monitorizați fiecare moment al execuției.
După cum am menționat mai devreme, scenariul groovy acceptă cuvântul cheie „aruncă” pentru a arunca excepția predefinită către apelant.
Consultați exemplul de script de mai jos pentru a înțelege acest concept:
(argumente / parametri) aruncă
{
}
Iată exemplul de cod pentru scheletul de mai sus.
// 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)); } }
În scriptul de mai sus, Indicele matricei este în afara limitelor va fi aruncat la funcția apelată. Acolo trebuie să ne descurcăm corect cu un bloc de încercare. În caz contrar, o excepție va fi aruncată de SoapUI.
Concluzie:
Implementarea gestionării excepțiilor în scripturile noastre de testare obișnuite legate de serviciile web ne va fi utilă pentru a menține codul și a reduce intervenția / monitorizarea manuală de către testeri. Putem folosi mai multe blocuri try-catch atunci când este necesar în script.
Următorul tutorial SoapUI # 12: În următorul tutorial, vom oferi mai multe informații și caracteristici ale versiunii SoapUI Pro.
Așa că continuați să citiți. Comentariile, întrebările, sugestiile sunt binevenite, ca întotdeauna!
Lectură recomandată
- 4 Caracteristici importante ale publicului SoapUI Pro pentru Pro - Tutorial SoapUI # 12
- Cum se scrie un script groovy de bază în SoapUI - Tutorialul SoapUi # 6
- Cum se utilizează proprietăți în SoapUI Groovy Script - Tutorial SoapUI # 7
- Un Ghid rapid SoapUI pentru stocarea datelor de solicitare și răspuns într-un fișier - Tutorial SoapUI # 15
- 15+ Tutoriale SoapUI: Cel mai bun instrument de testare API pentru servicii web
- Aflați concepte avansate de scriptare SoapUI Groovy - Tutorial SoapUI # 9
- Tutoriale detaliate pentru eclipsă pentru începători
- Cum să creați un proiect REST în SoapUI Pro: Tutorial nr. 13