SoapUI: иметь несколько ожидаемых результатов в одном утверждении

#xml #xpath #soapui #assertions

#xml #xpath #soapui #утверждения

Вопрос:

Есть ли способ получить несколько ожидаемых результатов в одном утверждении для одного шага тестирования.

Объявить:

declare namespace b="base"; //b:policies/b:policy/b:total-premium

Ожидаемый результат:

7.362*

Код утверждения XML:

 <con:assertion type="XPath Match" id="" name="XPath Match">                                             
<con:configuration>                                             
<path>                                              
declare namespace b="base"; //b:policies/b:policy/b:total-premium                                               
</path>                                             
<content>7.362*</content>                                               
<allowWildcards>true</allowWildcards>                                               
<ignoreNamspaceDifferences>false</ignoreNamspaceDifferences>                                                
<ignoreComments>false</ignoreComments>                                              
</con:configuration>                                                
</con:assertion>                                                
<con:credentials>                                               
<con:authType>No Authorization</con:authType>                                               
</con:credentials>                                              
<con:jmsConfig JMSDeliveryMode="PERSISTENT"/>                                               
<con:jmsPropertyConfig/>                                                
<con:wsaConfig mustUnderstand="NONE" version="200508" action="" addDefaultTo="true"/>   
  

То, что я хотел бы, чтобы SoapUI сделал, это сравнил значение из total-premium со значениями 7.362* , 6.994* , и 7.730* для этого конкретного шага тестирования, и если какой-либо из них проходит тестовый этап, проходит.

Возможно ли это?

Ответ №1:

Возможный способ сделать это — использовать Script assertion вместо Xpath match assertion .

В Script assertion вы можете проанализировать ответ, получить значения узла и сравнить со списком возможных значений, что-то вроде:

 // get the xml response
def response = messageExchange.getResponseContent() 
// parse it
def xml = new XmlSlurper().parseText(response)
// find your node by name
def node = xml.'**'.find { it.name() == 'total-premium' }
// assert against the possible values
assert ['7.362*','6.994*','7.730*'].contains(node.toString())
  

Обновить

Сначала я неправильно понял ваш вопрос, я думаю, что вы хотите точно проверить 7.362* , и на самом деле подстановочный знак предназначен для любых цифр, извините. Затем вы можете использовать регулярное выражение с matches() помощью метода, чтобы проверить, начинается ли ваше значение с некоторых желаемых значений:

 // get the xml response
def response = messageExchange.getResponseContent() 
// parse it
def xml = new XmlSlurper().parseText(response)
// find your node by name
def node = xml.'**'.find { it.name() == 'total-premium' }
// assert 
assert node.toString().matches("(7.362|6.994|7.730)\d*")
  

Комментарии:

1. Я получаю эту ошибку: assert ['7.36*','6.99*','7.73*'].contains(node.toString()) | | | false | 6.9943104 6.9943104 это потому, что он пытается найти точную строку 6.9943104 . если да, то как мне сделать так, чтобы это был подстановочный знак?

2. Одним из способов было бы использовать регулярное выражение?

3. Потрясающее спасибо. Сделал мою жизнь намного проще 🙂

4. @Ross приятно вам помочь 🙂

Ответ №2:

Если вы предпочитаете XPath, а не Groovy scripting, вы все равно можете использовать простое выражение XPath:

 declare namespace b="base";

starts-with(//b:policies/b:policy/b:total-premium, '7.362') or 
starts-with(//b:policies/b:policy/b:total-premium, '6.994') or 
starts-with(//b:policies/b:policy/b:total-premium, '7.730')
  

Тогда ожидаемый результат будет истинным.

С XPath вы можете использовать функции и операторы, как и в других языках программирования.

Комментарии:

1. Вместо нескольких можно использовать список значений с | ?