2017-11-21 19 views
0

최근에 SoapUI Pro (ReadyAPI)로 업그레이드했고 다음과 같은 문제가 발생했습니다. 나는이 같은 XPath는 주장이 있습니다XPath 결과가 배열을 반환합니다.

선언 네임 스페이스 NS2 = 'http://some.schema.tld/foo/bar/1.0을'; // NS2 : GenerateOrResetPasswordFault // faultCode를

가 나는 faultCode 요소에 얻을 특정 값과 일치합니다. 응답이

//.. 
<GenerateOrResetPasswordFault> 
    <faultCode>123</faultCode> 
    <faultCode>456</faultCode> 
</GenerateOrResetPasswordFault> 
//... 

내가 이전에 두 개의 주장, 하나 456에 대해 일치, 123 다른, 같은 XPath에 대해 일치했다하고 일 같은 것을 포함, 그래서 나는 그러나, 같은 부모에서이 두 가지를 얻을. 이제 XPath가 결과적으로 [123,456]을 반환하기 때문에 전환 후 어설 션이 실패합니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

그러면 목록을 주장 할 수 있습니까? – Rao

+0

@Rao 불행히도 같은 순서에있는 목록에 의존 할 수는 없습니다. 요소를 나열하는 어설 션을 수행 할 수 있습니까? 문자 그대로의 비교가 아닙니까? – Dropout

+1

그런 다음 스크립트 어설 션을 사용할 수 있습니다. 너 괜찮 니? – Rao

답변

2

다음은 동일한 기능을 수행하기위한 스크립트 어설 션입니다. 이 방법을 사용하면 여러 xpath 어설 션을 가질 필요가 없습니다.

스크립트 어설는 : 인라인 당신은 신속하게 주어진 XML 데이터에 대한 온라인 demo을 시도 할 수 있습니다

//Check if the response is ok 
assert context.response, 'Response is empty or null' 

//Define your expected fault codes 
def expectedCodes = [123, 456] 


def actualCodes = [] 
if (context.response.contains('faultCode')) { 
    //Get the actual fault codes from xml response by parse and find 
    actualCodes = new XmlSlurper().parseText(context.response).'**'.findAll {it.name() == 'faultCode' }*.text() as Integer[] 
    log.info "Actual fault codes are : ${actualCodes}" 

    //Check both expected and actual are matching 
    assert expectedCodes.sort() == actualCodes.sort() 
} else { 
    throw new Error('Response does not contain faultCode elements') 
} 

논평 따릅니다.

+0

오, 화려한, 당신은 단지 배열을 정렬! 고맙습니다, 시도해 보겠습니다. – Dropout