2016-06-27 6 views
0

Groovy 및 SoapUI 테스트 스위트를 처음 사용하고 조건부 실행을 시도 할 때 오류가 발생합니다. 문제는 JSON 문자열에 응답하는 몇 가지 REST 서비스가 있고 서비스 A가 해당 응답의 특정 코드를 반환하는 경우에만 서비스 B가 실행되는 TestSuite를 만들고 싶습니다. 코드가 "1"나는 서비스 B를 실행해야하는 동일한 경우
서비스 A는
SoapUI : json 응답이 작동하지 않는 조건부 고토

{ 
     "parentObject": { 
      "myCode": "0", 
      "severity": "INFO" 
     }, 
     "message": "operation successfull" 
    } 

같은 것을 반환, 그렇지 않으면하지 : 그래서, 일을 더 명확하게합니다. 내 조건 고토는 : 나는 조건부 고토 창에서 실행 아이콘에서이 조건을 테스트하는 경우도 contains(., "1")

과 노력

contains(text(), "1") 

, 올바르게 상태를 해결합니다,하지만 난있는 TestSuite에서 실행하는 경우 "일치 조건 누락, 이동 중"이라는 메시지가 표시되고 서비스 B가 실행됩니다.
Google에이 오류와 관련된 몇 가지 검색 결과가 있으며 그 중 하나에서만 다른 옵션 (link here)을 발견했습니다. Groovy 스크립트 사용 :

import groovy.json.JsonSlurper 
responseContent = testRunner.testCase.getTestStepByName("Service A step").getPropertyValue("response") 
slurperresponse = new JsonSlurper().parseText(responseContent) 
myCode = slurperresponse.parentObject.myCode 
if ('1'.equalsIgnoreCase(myCode.toString()))  testRunner.gotoStepByName("Service B Step") 
else log.info("Some error") 

그러나 작동하지 않습니다. 서비스 B가 다시 실행되면 이벤트가 실행되어서는 안됩니다.
조건부 Goto에서 오류가 표시되는 이유나 서비스 B가 Groovy 스크립트와 함께 실행되는 이유를 알면 두 가지 옵션 중 하나를 사용하여 여기에 손을 댈 수 있다면 정말 고마워 할 것입니다. 사전에
감사

UPDATE 다음있는 TestSuite의 단계의 목록이 @Rao 요청 (죄송합니다, 나는 실제 구성 요소와 이미지를 추가 할 수 없습니다)

  1. REST 서비스에 따라 반환을 JSON 응답
  2. 그루비 스크립트, 이전 응답에 포함 된 토큰을 읽고 다음 REST 서비스에서 헤더로
  3. REST 서비스를 삽입하기 위해, (JSON 응답을 반환 올바르게 수신 (이 "서비스 A"가 될 것입니다) 이전 단계에서 삽입 된 헤더)
  4. (설명 참조)
  5. 그루비 스크립트
  6. REST 서비스 이것은 나의 유일한 구성 요소가있는 TestSuite에 JSON 응답
    반환 (이 "서비스 B"가 될 것입니다)
+0

에서 발견? 귀하의 JSON 예제가 유효하지 않습니다 ... –

+0

안녕하세요 @ tim_yates, 단지 대답의 단편입니다, 내가 사용하고있는 변수 "myCode"를 표시하기 위해, 나는 JSON 대답을 – maxivis

+0

업데이트 할 것입니다 그리고'log.info myCode.toString())'show? 나는 그것이 목록이라고 의심한다. –

답변

2

이 글은 JSON을 사용하는 것은 불가능합니다 SoapUI의 조건부 이동. 그러나 Groovy 스크립트로 그렇게 할 수 있습니다. 여기

이 조각은`서비스 A`는 무엇을 반환하지 https://community.smartbear.com/t5/SoapUI-Open-Source/Conditional-goto/td-p/107276

import static com.jayway.jsonpath.JsonPath.parse 

def response = context.expand('${REST Request#Response}') 

def id = parse(response).read('$.id') 
log.info id 

if (id!=null) testRunner.gotoStepByName("TestStepName")