2014-06-17 10 views
0

짧은 버전 : 외부 속성이 이전 테스트 단계의 ResponseAsXML에 대한 참조이고 내부 속성이 속성에서 제공되는 SoapUI Pro 5의 XQuery에서 중첩 속성 확장을 수행하는 방법 파일?SoapUI에서 중첩 된 속성 확장

예 :

내 테스트 단계는 다음과 같이 : 또한 이메일 주소를 추가하고, 고객 ID를을 반환

  1. 전화 AddCustomer와.
  2. propertyProperties라는 속성 파일에 customerId를 저장하려면 property transfer를 사용하십시오.
  3. 같은 고객에게 두 번째 전자 메일을 추가하고 새 전자 메일 ID를 반환하는 AddEmailToCustomer를 호출합니다.
  4. 고객의 두 전자 메일을 모두 반환하는 GetEmailsForCustomer를 호출합니다. 3 단계에 대한

나머지 엔드 포인트와 같은 4보기 :

POST/GET http://myEndpoint.com/customers/{customerId}/emails 

4 단계를 확인하기 위해 노력하고, 우리가 보장 할 수 없기 때문에 (응답을 통해 루프 XQuery를 쓴 어떤 순서 이메일은이 같은 네임 스페이스의 고객 ID를 하드 코딩 경우 잘 작동, 이메일 내 XQuery를에서 3 단계에서 추가 발견) 응답에있을 것입니다 :

for $email in //emails 
where $email/id/text()='${AddEmailToCustomer#ResponseAsXml#declare namespace ns1='http://myEndpoint.com/customers/1234/emails'; //ns1:Response[1]/ns1:id[1]}' 

을하지만 난 고객 ID를 사용하려고하는 경우 th와 같은 속성 파일에서 입니다 :

...Exception:org.custommonkey.xmlunit.Diff[different] Expected presence of child nodes to be 'true' but was 'false'... 

가 어떻게이 작업을 얻을 수 :

for $email in //emails 
where $email/id/text()='${AddEmailToCustomer#ResponseAsXml#declare namespace ns1='http://myEndpoint.com/customers/${#EmailProperties#customerId}/emails'; //ns1:Response[1]/ns1:id[1]}' 

나는 예상 자식 노드를 찾을 수있는 방법에 대해 오류가?

답변

0

네임 스페이스가 크게 XPath의 단순화하기 위해 당신은 와일드 카드를 사용할 수 있습니다 : 네임 스페이스를 확인에 대한 상관하지 않는 경우 @SiKing 네임 스페이스는 XPath를 단순화하기 위해 와일드 카드를 사용할 수 있습니다 권장으로

where $email/id/text()='${AddEmailToCustomer#ResponseAsXml#//*:Response[1]/*:id[1]}' 
+0

감사합니다. 네임 스페이스에 와일드 카드를 사용할 수 있다는 것을 알지 못했습니다. – GeekChick

0

이 충분하다 (이것은 가장 일반적인 행동입니다). 하지만 난 당신이 다음과 같이 XQuery를 매치 주장을 선언 시도 할 수 있습니다 때문에 가능한 서로 다른 네임 스페이스를 확인하기 위해 속성에 네임 스페이스를 넣어 생각 :

declare namespace ns1='http://myEndpoint.com/customers/${#EmailProperties#customerId}/emails'; 
<XQueryResult> 
{ 
for $email in //ns1:emails 
where $email/id/text()='${AddEmailToCustomer#Response#//ns1:Response[1]/ns1:id[1]}' 
return $email 
} 
</XQueryResult> 

EmailProperties이 속성 testStep 경우 다음 사용하셔야합니다 대신 ${EmailProperties#customerId} 대신 대신 #Response을 사용하는 것을 선호합니다.

호프가 도움이 되었기를 바랍니다.

+0

SiKing의 답변이이 테스트 케이스에서 작동했지만, 여러 네임 스페이스를 처리해야하는 경우 염두에 두겠습니다! 감사! – GeekChick