2016-10-07 2 views
1

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

Declare:

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

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

7.362*

код XML Assertion:

<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* для этого конкретного этапа испытаний, и если какой-либо из них проходит проходные испытания.

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

ответ

2

Возможный способ сделать это - использовать 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()) 

Update

я неправильно понял ваш вопрос в первом Я думаю, что вы хотите точно указать 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*") 
+0

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

+0

@Ross обновленный ответ :) – albciff

+2

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

2

Если вы предпочитаете XPath над Groovy сценариев, вы можете использовать простое выражение 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') 

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

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

+0

Вместо нескольких, список значений можно использовать с '|'? – Rao

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