how handle exception soapui groovy scripts soapui tutorial 11
В този урок за SoapUI ще разгледаме обработката на изключения, използвайки скриптове Groovy. Обработката на изключения по време на изпълнение в groovy са подобни на Java, тъй като Java библиотеките са интегрирани. Ние обаче ще обсъдим основните концепции в SoapUI и ще навлезем в дълбочината на обработката на изключения в Java.
Това е урок № 11 в серията уроци на SoapUI . Това е последният урок за безплатната версия на SoapUI. Има още няколко теми, останали в тази поредица, които са за функциите на SoapUI pro, услугите REST и SOAP и тестването, управлявано от данни в SoapUI.
Нека започнем с кратко въведение в едно изключение:
Какво е изключение?
An изключение е грешка, която се среща по време на изпълнението на програма. Това може да се случи поради много причини като невалидни данни, загуба на мрежова връзка, опитване на отворени файлове, които са недостъпни, достъп до невалиден клас, изтичане на памет, т.е. може да се дължи на потребители, разработчици или хардуерни ресурси.
Вътрешно, когато се срещне изключение по време на изпълнението, SoapUI ще се опита да намери манипулатора. Манипулаторът е блокът, който съдържа кода за улавяне на изключението.
Изключенията са категоризирани два вида:
- Изключение по време на изпълнение
- Изключение по време на компилация - не е приложимо за SoapUI, тъй като няма изричен компилатор
Погледнете следната екранна снимка, която ни показва изключение по време на изпълнение за невалиден код. В скрипта по-долу се опитахме да разделим цяло число на 0. В диалога за грешка може да се види, че изключението е повдигнато от библиотеките на Java и съобщението за грешка е Деление на нула .
Можем да хванем това изключение по време на изпълнението и да се справим програмно. Преди това ще видим някои от важните ключови думи, които се използват в концепциите за изключения на java. Някои от ключовите думи могат да се използват и в грууви скрипта. Те са:
- Хвърли - Тази ключова дума ни помага да хвърляме изключение ръчно, т.е. да хвърляме дефинирани от потребителя изключения
- Хвърля - Използва се за извикване на предварително дефинираните изключения от дефиницията на метода. Така че ще улови изключението, ако има някаква грешка по време на изпълнение, открита по време на изпълнението.
- Опитвам и Хвани - ключовата дума „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”.
Нека сега променим горния скрипт, за да получим необходимия резултат. Вижте следната екранна снимка:
Нека сега опитаме това в нашето редовно тестване на уеб услуги. В следващия скрипт не използвахме 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” с размера на пет. Той приема само пет низови стойности, т.е. имена на държави. Вътре в итеративните изявления сме проверили като idx<= 5 . Така че цикълът ще се повтори до 6 пъти и ще се опита да търси 6тиелемент в масива. Тъй като стойността няма да бъде там, тя хвърля изключение по време на изпълнение.
как да пиша uat тестови случаи
За да се справим с този сценарий, нека променим горния скрипт, както е показано по-долу:
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 скриптът поддържа ключова дума „хвърля“, за да хвърли предварително дефинираното изключение към повикващия.
Вижте примерния скрипт по-долу, за да разберете тази концепция:
(аргументи / параметри) хвърля
{
}
Ето примерния код за горния скелет.
// 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 ще бъде хвърлен към извиканата функция. Там трябва да се справим правилно с блок за опити за улавяне. В противен случай изключение ще бъде хвърлено от SoapUI.
Заключение:
Внедряването на обработка на изключения в нашите редовни скриптове за тестване, свързани с уеб услуги, ще бъде полезно за нас, за да поддържаме кода и да намалим ръчната намеса / наблюдение от тестери. Можем да използваме множество блокове за изпробване, когато се изисква в скрипта.
Следващ урок № 12 за SoapUI: В следващия урок ще предоставим повече информация и функции на версията SoapUI Pro.
Така че продължавайте да четете. Коментари, въпроси, предложения са добре дошли, както винаги!
Препоръчително четене
- 4 Важни характеристики на SoapUI Pro за професионална аудитория - Урок SoapUI # 12
- Как да напиша основен скрипт Groovy в SoapUI - Урок № 6 за SoapUi
- Как да използвам свойства в SoapUI Groovy Script - Урок SoapUI # 7
- Кратко ръководство за SoapUI за съхраняване на данни за заявки и отговори във файл - Урок SoapUI # 15
- 15+ урока за SoapUI: Най-добрият инструмент за тестване на API за уеб услуги
- Научете разширени концепции за сценарии на SoapUI Groovy - Урок № 9 за SoapUI
- Уроци за задълбочено затъмнение за начинаещи
- Как да създадете REST проект в SoapUI Pro: Урок # 13