how handle exception soapui groovy scripts soapui tutorial 11
En aquest tutorial de SoapUI, analitzarem el tractament d’excepcions mitjançant scripts Groovy. El tractament de les excepcions en temps d'execució en groovy és similar a Java ja que les biblioteques Java estan integrades. Tanmateix, parlarem de conceptes bàsics a SoapUI i aprofundirem en el tractament de les excepcions a Java.
Això és tutorial núm. 11 de la sèrie de tutorials SoapUI . Aquest és l'últim tutorial per a la versió gratuïta de SoapUI. Hi ha un parell de temes més en aquesta sèrie que inclouen funcions SoapUI pro, serveis REST i SOAP i proves basades en dades a SoapUI.
Comencem amb una breu introducció a una excepció:
Què és una excepció?
An excepció és un error que es produeix durant l'execució d'un programa. Pot passar per molts motius, com ara dades no vàlides, pèrdua de connexió de xarxa, intentar obrir fitxers que no estan disponibles, accedir a classes no vàlides, fuites de memòria, és a dir, obligar el sistema a treballar amb una gran quantitat de dades, el servidor de bases de dades no respon, etc. Aquests errors pot ser a causa d’usuaris, desenvolupadors o recursos de maquinari.
Internament, quan es troba una excepció durant l'execució, SoapUI intentarà trobar el controlador. Handler és el bloc que conté el codi per obtenir l'excepció.
Les excepcions es classifiquen en dos tipus:
- Excepció en temps d'execució
- Excepció de temps de compilació: no aplicable a SoapUI, ja que no té un compilador explícit
Mireu la captura de pantalla següent que ens mostra una excepció en temps d'execució per al codi no vàlid. A l'script següent hem intentat dividir un nombre enter per 0. Al diàleg d'errors es pot veure que l'excepció es planteja de les biblioteques java i el missatge d'error és Divisió per zero .
Podem detectar aquesta excepció durant l'execució i gestionar-la per programació. Abans d’això, veurem algunes de les paraules clau importants que s’utilitzen en els conceptes d’excepció de Java. Algunes de les paraules clau també es poden utilitzar en el guió fantàstic. Ells són:
- Llançar - Aquesta paraula clau ens ajuda a llançar una excepció manualment, és a dir, a llançar excepcions definides per l'usuari
- Llançaments - S'utilitza per cridar a les excepcions predefinides de la definició del mètode. Per tant, obtindrà l'excepció si es troba algun error d'execució durant l'execució.
- Proveu-ho i Captura - La paraula clau 'provar' s'utilitza amb la paraula clau 'capturar'. Si podem predir la porció del programa on es pot produir l'excepció durant l'execució, podem utilitzar el bloc 'prova' en aquest lloc. Al final del bloc 'prova', el bloc 'captura' hauria de començar a captar una excepció. Dins del bloc de captures, hem d’escriure el controlador per gestionar l’excepció.
- Finalment - Aquest és el bloc predeterminat i opcional de l'estructura d'excepció. Si necessitem que s’executin declaracions al final del programa, com ara netejar objectes no utilitzats, tancar connexions, etc., que es poden fer dins d’aquest bloc.
La següent és l'estructura general d'una excepció:
provar
{
}
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!'); }
L'escriptura anterior produeix el resultat següent, tal com es mostra a la captura de pantalla.
Com hem comentat anteriorment, hem intentat dividir 'A' 'B' que és zero. Així, el bloc ‘catch’ s’executa i mostra el missatge definit per l’usuari al registre. Vegeu que a la declaració 'catch' ja ho hem utilitzat Excepció classe que és la superclasse de Java per a totes les excepcions integrades. S’hereten totes les classes d’excepció predefinides Excepció classe. Per gestionar excepcions de temps d'execució imprevisibles, podem utilitzar-les Excepció classe al bloc “catch”.
Modifiquem ara l'script anterior per obtenir el resultat requerit. Vegeu la captura de pantalla següent:
Proveu-ho ara a les proves habituals de serveis web. Al següent script, no hem utilitzat el bloc try-catch, de manera que obtindrem l'excepció en temps d'execució.
// 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!'); }
L'escriptura anterior llançarà una excepció anomenada ArrayIndexOutOfBoundsException perquè l'script intenta accedir a un índex de matriu no vàlid, és a dir, 5 que no està disponible.
(Feu clic a la imatge per ampliar-la)
Com podeu veure a l'script anterior, hem inicialitzat la matriu 'countryNames' amb la mida de cinc. Només accepta cinc valors de cadena, és a dir, noms de països. Dins de les afirmacions iteratives, hem comprovat com a idx<= 5 . Per tant, el bucle iterarà fins a 6 vegades i intentarà cercar-ne 6thelement de la matriu. Com que el valor no hi serà, genera una excepció en temps d'execució.
com escriure casos de prova uat
Per gestionar aquest escenari, modificem l'script anterior de la manera següent:
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!'); }
Aquí teniu el resultat de l'script anterior.
Així és com podem gestionar les excepcions en temps d'execució durant l'execució del programa.
Nota: podem utilitzar ArrayIndexOutOfBoundsException al bloc 'catch' directament en lloc d'utilitzar-lo Excepció classe. Si posem el nom d’excepció exacte al bloc “catch”, només es capturarà quan es llanci l’excepció en particular. Si es produeix alguna altra excepció predefinida, el bloqueig de captures fallarà.
Un bon script d’automatització ha de tenir controladors d’excepcions adequats. En cas contrari, serà difícil controlar cada moment de l’execució.
Com he esmentat anteriorment, el guió groovy admet paraules clau 'throws' per llançar l'excepció predefinida a la persona que truca.
Vegeu el següent exemple de guió per entendre aquest concepte:
(arguments / paràmetres) llança
{
}
Aquí teniu el codi de mostra de l’esquelet anterior.
// 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)); } }
Al guió anterior, el fitxer ArrayIndexOutOfBoundsException es llançarà a la funció anomenada. Allà hem de manejar correctament amb un bloc de prova. En cas contrari, SoapUI llançarà una excepció.
Conclusió:
Implementar el tractament d’excepcions als nostres scripts de proves relacionats amb els serveis web habituals ens serà útil per mantenir el codi i reduir la intervenció / supervisió manual dels verificadors. Podem utilitzar diversos blocs try-catch quan es requereixi a l'script.
Següent tutorial SoapUI núm. 12: Al proper tutorial, proporcionarem més informació i funcions de la versió de SoapUI Pro.
Així que segueix llegint. Els comentaris, preguntes, suggeriments són benvinguts, com sempre!
Lectura recomanada
- 4 Funcions importants de SoapUI Pro for Pro Audience: tutorial SoapUI núm. 12
- Com escriure script Groovy bàsic a SoapUI - Tutorial SoapUi # 6
- Com s'utilitzen les propietats a SoapUI Groovy Script: tutorial SoapUI # 7
- Una guia ràpida de SoapUI per emmagatzemar dades de sol·licituds i respostes en un fitxer: tutorial de SoapUI núm. 15
- 15+ Tutorials SoapUI: la millor eina de prova de l'API de serveis web
- Apreneu els conceptes avançats de scripts SoapUI Groovy: tutorial SoapUI núm. 9
- Tutorials Eclipse en profunditat per a principiants
- Com es crea un projecte REST a SoapUI Pro: tutorial núm. 13