SoapUI의 스크립트 어설션은 어설션의 구현 및 관리를 매우 쉽게 해주는 가장 많이 사용되는 어설 션 기술 중 하나입니다.
테스트 개발자에게 프로그래밍 제어를 제공하여 테스트 흐름을 프로그래밍 방식으로 제어하고 유효성을 검사할 수 있습니다.
따라서 이러한 상황을 처리하기 위해 SoapUI는 Groovy 스크립트를 사용하여 유효성 검사를 구현하는 기능을 제공합니다.
스크립트를 사용하여 어설 션을 구현하면 테스트 개발자에게 다음과 같은 확장 기능이 제공됩니다.
능력 | 기술 |
사전 및 사후 작업 | 스크립팅은 TestCase 전후에 특정 작업을 수행 할 수있는 자유를 제공합니다. |
동적 응답 처리 | 스크립팅은 동적으로 변경되는 API의 응답을 처리하고 유효성을 검사하는 기능을 제공합니다. |
사용자 지정 어설 션 | 스크립트를 사용하여 프로젝트에 특정한 사용자 지정 어설 션을 만들고 필요에 따라 사용할 수 있습니다. |
SoapUI에서 스크립트 어설 션을 추가하는 방법은 무엇입니까?
스크립트 어설 션을 추가하려면 어설 션 을 추가하려는 SOAP 요청으로 이동하여 아래와 같이 요청 창의 왼쪽 상단 모서리에 있는 '+'아이콘을 클릭하면 됩니다.
위에 강조 표시된 단계를 이해해 보겠습니다.
- 먼저 SOAP 요청으로 이동하여 단계를 두 번 클릭하여 요청을 엽니다.
- 둘째, 요청 창의 왼쪽 상단 또는 왼쪽 하단 에있는 ' + '아이콘을 클릭합니다. 위의 화면에서 강조 표시된 것을 볼 수 있습니다.
- 마지막으로 Script assertion을 선택하고 '추가'를 클릭합니다.
SOAP 응답에서 문자열의 존재를 확인하는 방법은 무엇입니까?
BookStore SOAP Service의 응답에 저자 이름("Richard E. Silverman." )이 있 는 책이 포함되어 있는지 확인해야 한다고 가정합니다.
스크립트 어설 션을 사용하여 동일한 내용을 검증해 보겠습니다.
서비스 응답에 대한 유효성 검사를 위해 다음 코드 스 니펫을 사용할 수 있습니다.
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
def responseXml = holder.getPrettyXml()
assert responseXml.contains('Richard E. Silverman')
위의 코드를 자세히 이해해 보겠습니다.
1. 첫 번째 줄 은 SoapUI에서 XML을 구문 분석하는 필수 라이브러리 XmlHolder를 가져옵니다.
2. 그런 다음 XmlHolder 개체를 초기화하고 아래와 같이 서비스의 응답을 매개 변수로 전달합니다.
<span style="color: #000000;">def holder = new XmlHolder( messageExchange.responseContentAsXml )</span>
messageExchange.responseContentAsXml 은 SOAP 호출의 응답을 XML 형식으로 반환합니다.
3. 다음으로 XML 응답을 문자열로 변환해야 합니다. 다음과 같이 getPrettyXml ()을 사용하여 동일한 작업을 수행할 수 있습니다.
<span style="color: #000000;">def responseXml = holder.getPrettyXml()</span>
4. 그런 다음 Groovy Script의 assert 메서드를 사용하여 응답에 문자열 값이 있는지 확인할 수 있습니다.
<span style="color: #000000;">assert responseXml.contains('Richard E. Silverman')</span>
' assert '표현식을 부울 표현식으로 평가할 수 있습니다. 표현식의 값이 false를 반환하면 스크립트 어설 션이 실패하고 그 반대의 경우도 마찬가지입니다.
아래 그림은 SoapUI 창에서 위 스크립트 어설 션의 샘플 배치 및 실행을 보여줍니다.
보시다시피 스크립트는 2 단계에서 강조 표시된 스크립트 영역에 추가되고 재생 아이콘 (3 단계에서 강조 표시됨)을 사용하여 실행할 수 있습니다.
스크립트가 1로 표시된 단계에서 강조 표시된 대로 어설 션을 전달했음을 알 수 있습니다.
SOAP 응답에 문자열이 없는지 확인하는 방법은 무엇입니까?
다음으로, 특정 문자열이 대상 서비스의 응답에 포함되지 않아야 함을 확인하려면 " not contains "어설 션을 사용하여 동일하게 평가할 수 있습니다. 되지는 포함 이름의 정확히 반대에서 알 수 있듯이, 주장을 포함 주장. 특정 문자열이 없는지 확인합니다.
BookStore SOAP Service의 응답에 저자 이름이 " Mark Twain "인 책이 포함되어 있는지 확인해야 한다고 가정합니다. Script assertions의 도움으로 동일한 것을 검증해 봅시다.
서비스 응답에 대한 유효성 검사를 위해 다음 코드 스 니펫을 사용할 수 있습니다.
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
def responseXml = holder.getPrettyXml()
<strong>assert !responseXml.contains('Mark Twain')</strong>
보시다시피, 위의 코드는 contains the string 메서드를 사용하여 ' Mark Twain ' 문자열을 찾습니다. 유일한 차이점 은 contains () 메서드 앞에 사용된 연산자 (!)가 아니라 논리입니다. 결과를 부정하고 예상 문자열이 응답에 없을 때만 어설 션을 전달합니다.
SOAP 응답에서 노드 값의 유효성을 검사하는 방법은 무엇입니까?
아시다시피 XPath 일치 어설 션을 사용하면 XPath 표현식을 사용하여 대상 응답 노드에서 콘텐츠를 선택하고 예상 한 값과 비교할 수 있습니다. 스크립트 어설 션의 도움으로 이 어설 션을 구현하는 방법을 설명하기 위해 BookStore SOAP Service를 사용합니다.
BookStore API의 응답에서 두 번째 책의 제목 이 null 이 아닌지 확인하려고 한다고 가정합니다. 스크립트 어설 션을 사용하여 동일한 유효성을 검사할 수 있습니다. 이를 달성하는 방법을 살펴보겠습니다.
어설 션을 작성하기 전에 책 제목의 XPath를 파악하기 위해 BookStore SOAP 서비스의 XML 응답을 빠르게 살펴보겠습니다.
XML 응답에서 제목의 유효성을 검사하기 위해 다음 스크립트 어설 션을 작성해야 합니다.
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
def responseXml = holder.getPrettyXml()
def title = holder.getNodeValue('//ns1:BooksResult/ns1:Books/ns1:CustomBookModel[2]/ns1:Title')
assert title.equals('Learning JavaScript Design Patterns')
위의 코드를 더 자세히 이해해 보겠습니다.
Xmlholder 클래스의 다른 메서드를 사용하는 것 외에도 아래와 같이 " getNodeValue "메서드를 사용하여 특정 노드의 값을 가져왔습니다.
def title = holder.getNodeValue('//ns1:BooksResult/ns1:Books/ns1:CustomBookModel[2]/ns1:Title')
여기에서는 두 번째 책 제목의 XPATH를 언급했습니다. ' ns1 '은 XML 응답의 네임 스페이스를 나타냅니다. XML의 첫 번째 네임 스페이스는 기본적으로 ' ns1 '이라고 합니다. 두 번째 네임 스페이스가 있었다면 ' ns2 '등이 됩니다.
두 번째 책의 제목을 가져오기 위해 ' ns1 : CustomBookModel [2] '을 사용했습니다. 목록의 첫 번째 요소는 인덱스 0이 아닌 인덱스 1에서 시작합니다.
그리고 다음과 같이 equals ()를 사용하여 제목의 값을 확인했습니다.
title.equals()
따라서 이러한 방식으로 SOAP 서비스의 XML 응답에서 모든 노드의 값을 확인할 수 있습니다.
SOAP 응답의 헤더를 확인하는 방법은 무엇입니까?
다른 어설 션과 마찬가지로 스크립트 어설 션은 SoapUI의 응답 헤더를 어설 션 할 수 있습니다. BookStore SOAP Service의 헤더에서 응답 상태를 확인하는 다른 스크립트를 추가해 보겠습니다.
헤더에 대한 어설 션을 추가하기 전에 아래와 같이 bookstoreAPI 응답 헤더 를 살펴보겠습니다.
아래 코드 스 니펫 은 bookstore API의 응답 코드 가 포함된 ' # status # ' 헤더의 유효성을 검사합니다.
def status = messageExchange.responseHeaders["#status#"]
assert status.toString().equals('[HTTP/1.1 200 OK]')
보시다시피 messageExchange 인터페이스의 responseHeaders 메서드는 응답 헤더를 가져옵니다. 일단 모든 헤더가 있습니다. 위의 경우와 같이 값의 유효성을 검사하기 위한 어설 션을 넣을 수 있습니다. 문자열로 변환하고 값이 “ [HTTP / 1.1 200 OK] ”와 같은지 확인했습니다.
SOAP 응답의 응답 시간을 확인하는 방법은 무엇입니까?
또한 스크립트 어설 션을 사용하여 서비스의 응답 시간을 확인할 수도 있습니다. 아시다시피 응답 시간 은 서비스 요청에 응답하는 데 걸리는 총시간입니다. SoapUI에서 스크립트를 사용하여 이를 수행하는 방법을 살펴보겠습니다.
assert messageExchange.timeTaken < 900
SOAP 응답에서 범위 값의 유효성을 검사하는 방법은 무엇입니까?
값의 정확한 일치를 확인하기 위해 어설 션을 추가할 수 있지만 퍼지 어설 션 을 적용할 수도 있습니다. 즉 , 특정 한계 사이에 있는 값을 확인하기 위해 어설 션을 추가할 수 있으며 SoapUI의 스크립트 어설 션을 사용하여 이를 달성할 수 있습니다.
책의 페이지가 200-300 페이지 범위 내에 있는지 확인해야 한다고 가정해 보겠습니다. 다음 스크립트 어선 션을 사용하여 동일한 유효성을 검사할 수 있습니다.
import com.eviware.soapui.support.XmlHolder
def holder = new XmlHolder( messageExchange.responseContentAsXml )
def responseXml = holder.getPrettyXml()
def pages = holder.getNodeValue('//ns1:BooksResult/ns1:Books/ns1:CustomBookModel[2]/ns1:Pages')
log.info pages
assert pages.toInteger() > 200 && pages.toInteger() < 300
여기서 우리가 하려는 것이 무엇인지 이해합시다.
1. 다음과 같이 " Pages "에 " getNodeValue "메서드를 사용하여 XML 응답에 모든 페이지를 가져왔습니다.
def pages = holder.getNodeValue('//ns1:BooksResult/ns1:Books/ns1:CustomBookModel[2]/ns1:Pages')
2. 그런 다음 " toInteger "메서드를 사용하여 값을 " integer " 로 변환하고 아래와 같이 값 200 및 300과 비교했습니다.
assert pages.toInteger() > 200 && pages.toInteger() < 300
따라서 XML 응답에서 값을 검색하고 SoapUI의 스크립트 어설 션을 사용하여 예상 값에 대해 유효성을 검사할 수 있습니다.
'API Test > SoupUI' 카테고리의 다른 글
SOAPUI의 속성 전송이란 무엇입니까? (0) | 2020.09.09 |
---|---|
SoapUI의 속성은 무엇입니까? (0) | 2020.09.08 |
Behave를 사용하여 REST API를 테스트하는 BDD (Behavior-Driven Development) (0) | 2020.08.21 |
API 테스트 관련 용어 (0) | 2018.11.29 |
Top 15 SoapUI 인터뷰 질문 및 답변 (0) | 2018.11.27 |