how handle exception soapui groovy scripts soapui tutorial 11
이 SoapUI 튜토리얼에서는 Groovy 스크립팅을 사용한 예외 처리를 살펴 봅니다. Groovy에서 런타임 예외 처리는 Java 라이브러리가 통합되어 있으므로 Java와 유사합니다. 그러나 SoapUI의 기본 개념에 대해 논의하고 Java에서 예외 처리의 깊이를 살펴 보겠습니다.
이것은 SoapUI 튜토리얼 시리즈의 튜토리얼 # 11 . 이것은 SoapUI의 무료 버전에 대한 마지막 튜토리얼입니다. 이 시리즈에는 SoapUI pro 기능, REST 및 SOAP 서비스, SoapUI의 데이터 기반 테스트에 대한 몇 가지 주제가 더 남아 있습니다.
예외에 대한 간략한 소개부터 시작하겠습니다.
eps 파일 사용 방법
예외 란 무엇입니까?
안 예외 프로그램 실행 중에 발생한 오류입니다. 잘못된 데이터, 네트워크 연결 손실, 사용할 수없는 열린 파일 시도, 잘못된 클래스 액세스, 메모리 누수 (예 : 시스템이 엄청난 양의 데이터로 작동하도록 강제 실행, 데이터베이스 서버 응답 없음 등)와 같은 여러 가지 이유로 인해 발생할 수 있습니다. 이러한 오류 사용자, 개발자 또는 하드웨어 리소스 때문일 수 있습니다.
내부적으로 실행 중에 예외가 발생하면 SoapUI는 핸들러를 찾으려고합니다. 핸들러는 예외를 포착하는 코드를 포함하는 블록입니다.
예외는 두 가지 유형으로 분류됩니다.
- 런타임 예외
- 컴파일 시간 예외 – 명시적인 컴파일러가 없기 때문에 SoapUI에 적용 할 수 없습니다.
유효하지 않은 코드에 대한 런타임 예외를 보여주는 다음 스크린 샷을보십시오. 아래 스크립트에서 정수를 0으로 나누려고했습니다. 오류 대화 상자에서 예외가 Java 라이브러리에서 발생하고 오류 메시지가 다음과 같은 것을 볼 수 있습니다. 0으로 나누기 .
실행 중에이 예외를 포착하고 프로그래밍 방식으로 처리 할 수 있습니다. 그 전에 Java 예외 개념에 사용되는 몇 가지 중요한 키워드를 살펴 보겠습니다. 일부 키워드는 groovy 스크립트에서도 사용할 수 있습니다. 그들은:
- 던지다 –이 키워드는 수동으로 예외를 발생시키는 데 도움이됩니다.
- 던짐 – 메소드 정의에서 미리 정의 된 예외를 호출하는 데 사용됩니다. 따라서 실행 중에 런타임 오류가 발견되면 예외를 포착합니다.
- 시험 과 잡기 – '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!'); }
위 스크립트는 스크린 샷과 같이 다음과 같은 결과를 생성합니다.
앞서 논의했듯이 우리는 0 인“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에 액세스하려고하기 때문입니다.
(확대 된 이미지를 보려면 클릭하세요)
위의 스크립트에서 볼 수 있듯이 크기가 5 인 'countryNames'배열을 초기화했습니다. 5 개의 문자열 값 (예 : 국가 이름) 만 허용합니다. 반복문 내에서 다음과 같이 확인했습니다. idx<= 5 . 따라서 루프는 최대 6 번 반복되고 6 번 검색을 시도합니다.일배열의 요소. 값이 존재하지 않기 때문에 런타임 예외가 발생합니다.
이 시나리오를 처리하기 위해 위의 스크립트를 아래와 같이 수정하겠습니다.
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!'); }
다음은 위 스크립트의 결과입니다.
온라인에서 youtube를 mp4 mac으로 변환하십시오
이것이 프로그램 실행 중에 런타임 예외를 처리하는 방법입니다.
노트 : 우리는 사용할 수 있습니다 ArrayIndexOutOfBoundsException 'catch'블록에서 직접 사용하는 대신 예외 수업. 'catch'블록 '에 정확한 예외 이름을 입력하면 특정 예외가 throw 될 때만 catch됩니다. 다른 미리 정의 된 예외가 발생하면 catch 블록이 실패합니다.
좋은 자동화 스크립트에는 적절한 예외 처리기가 있어야합니다. 그렇지 않으면 실행의 모든 순간을 모니터링하기가 어려울 것입니다.
앞서 언급했듯이 groovy 스크립트는 미리 정의 된 예외를 호출자에게 던지기 위해 'throws'키워드를 지원합니다.
이 개념을 이해하려면 아래 샘플 스크립트를 참조하십시오.
(인수 / 매개 변수) 던지다
{
}
위 스켈레톤의 샘플 코드는 다음과 같습니다.
// 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 호출 된 함수에 던져집니다. 여기에서 try-catch 블록으로 제대로 처리해야합니다. 그렇지 않으면 SoapUI에서 예외가 발생합니다.
결론:
정규 웹 서비스 관련 테스트 스크립트에서 예외 처리를 구현하면 코드를 유지하고 테스터의 수동 개입 / 모니터링을 줄이는 데 도움이됩니다. 스크립트에서 필요한 경우 여러 try-catch 블록을 사용할 수 있습니다.
다음 SoapUI 튜토리얼 # 12 : 다음 튜토리얼에서는 SoapUI Pro 버전의 더 많은 정보와 기능을 제공 할 것입니다.
그래서 계속 읽으십시오. 언제나처럼 의견, 질문, 제안을 환영합니다!
추천 도서
- 프로 사용자를위한 SoapUI Pro의 4 가지 중요한 기능 – SoapUI 튜토리얼 # 12
- SoapUI에서 기본 Groovy 스크립트를 작성하는 방법-SoapUi Tutorial # 6
- SoapUI Groovy 스크립트에서 속성을 사용하는 방법-SoapUI Tutorial # 7
- 요청 및 응답 데이터를 파일에 저장하는 빠른 SoapUI 가이드 – SoapUI 자습서 # 15
- 15 개 이상의 SoapUI 자습서 : 최고의 웹 서비스 API 테스트 도구
- 고급 SoapUI Groovy 스크립팅 개념 알아보기-SoapUI 자습서 # 9
- 초보자를위한 심층 이클립스 튜토리얼
- SoapUI Pro에서 REST 프로젝트를 만드는 방법 : 자습서 # 13