2016-04-28 1 views
0

Я новичок в groovy and soapui pro. У меня ниже ответ образца, который отображает два или более элемента массива с динамическими данными. Мне интересно, как написать утверждение сценария или матч XPATH, чтобы проверить, если сценарий проходит до тех пор, как один из элементов имеет значение 1.Как проверить ответ xml для элементов динамического массива

<ns1:SampleTests> 
    <ns1:SampleTest1> 
     <ns1:Test>1</ns1:Test> 
    </ns1:SampleTest1> 
    <ns1:SampleTest2> 
     <ns1:Test>2</ns1:Test> 
    </ns1:SampleTest2> 
</ns1:SampleTests> 

Я написал это в утверждении сценария, но его недостаток.

+0

«Я написал это в утверждении сценария, но его не удается.» <- Нам нужно посмотреть, что вы сделали, и как это провалится! – SiKing

+0

Для получения требуемого значения должен быть еще один уникальный идентификатор, или вы можете проверить наличие значения, если оно всегда фиксировано. для ex: 'exists (// ns1: SampleTests/ns1: SampleTest1/ns1: Test [. = '1'])' и ожидать, что это будет 'true' – Rao

ответ

0

Предположив, что у Вас есть ответ, как:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> 
    <Body> 
     <ns1:SampleTests xmlns:ns1="hola"> 
      <ns1:SampleTest1> 
      <ns1:Test>1</ns1:Test> 
      </ns1:SampleTest1> 
      <ns1:SampleTest2> 
       <ns1:Test>2</ns1:Test> 
      </ns1:SampleTest2> 
    </ns1:SampleTests> 
    </Body> 
</Envelope> 

Вы можете выполнить следовать XPath: exists(//*:Test[.=1]), чтобы проверить, что существует по крайней мере один <ns1:Test> элемент с 1 в качестве значения.

Внутри XPath Match это выглядит следующим образом:

enter image description here

Если вместо этого вы предпочитаете использовать утверждение Script вы можете использовать XmlSlurper разобрать ваш Xml, а затем получить все <ns1:Test> значения утверждают, что по крайней мере один имеет значение 1. Посмотрите в код последующей:

// get the response 
def responseStr = messageExchange.getResponseContent() 
// parse the response as slurper 
def response = new XmlSlurper().parseText(responseStr) 
// get all <ns1:Test> values 
def results = response.'**'.findAll { it.name() == 'Test' } 
// now in results list we've NodeChild class instances we will convert it to 
// string in order to perform the assert 
results = results.collect { it.toString() } 
// check that at least one element has '1' value 
assert results.contains('1'),'RESPONSE NOT CONTAINS ANY <ns1:Test>1</ns1:Test>' 

enter image description here

+0

Спасибо, утверждение скрипта и xpath оба отлично работали. – user6221615

+0

@ user6221615 приятно вам помочь, если ответ решит вашу проблему, подумайте о том, чтобы принять его ':)' – albciff

Смежные вопросы