2015-02-12 3 views
0

У меня есть SOAP запрос, как этотSoapUI - значение ответа на матч со значением запроса

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://request.com" xmlns:dto="http://dto.com"> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <req:requestInput> 
     ...... 
     <dto:correlationId>${=UUID.randomUUID().toString().replaceAll("-", "").toUpperCase().substring(0, 16);}</dto:correlationId> 
     ...... 
    </req:requestInput> 
    </soapenv:Body> 
</soapenv:Envelope> 

и SOAP-ответ на вышеуказанную просьбу, как

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:res="http://response.com" xmlns:dto="http://dto.com"> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <res:responseOutput> 
     ...... 
     <dto:correlationId>539A708FA1B44490</dto:correlationId> 
     ...... 
    </res:responseOutput> 
    </soapenv:Body> 
</soapenv:Envelope> 

И это мое утверждение Выражение XPath:

declare namespace env="http://schemas.xmlsoap.org/soap/envelope/"; 
declare namespace req="http://request.com"; 
declare namespace res="http://response.com"; 
declare namespace dto="http://dto.com"; 
//res:responseOutput/dto:correlationId/text() 

Ожидаемое значение:

${Request#//req:requestInput/dto:correlationId/text()} 

Ошибка:

XPathContains comparison failed for path [ 
declare namespace env="http://schemas.xmlsoap.org/soap/envelope/"; 
declare namespace req="http://request.com"; 
declare namespace res="http://response.com"; 
declare namespace dto="http://dto.com"; 
//res:responseOutput/dto:correlationId/text()], expecting [6F37EA93D0454E67], actual was [539A708FA1B44490] 

Я хочу, чтобы проверить, если значение, переданное в корреляционного идентификатор в запросе SOAP возвращается в ответ или нет.
Когда этот тестовый пример выполнен, он создал 539A708FA1B44490 в запросе SOAP для идентификатора корреляции.
, но при выполнении утверждения скрипт для корреляцииId снова вычисляется, который генерирует другой идентификатор.
Я просто хочу получить идентификатор coorelation в полезной нагрузке, отправленной в запросе, чтобы я мог сравнивать.

Я просмотрел документы и искал решение, и я этого не сделал.
Я ценю помощь заранее.

ответ

0

Когда ваше утверждение ищет значение ${Request#//req:requestInput/dto:correlationId/text()}, оно фактически выполнит ${=UUID.randomUUID().toString().replaceAll("-", "").toUpperCase().substring(0, 16)}. Сторона примечания: точка с запятой в инструкции не нужна.

Для того, чтобы достичь того, чего вы хотите, вы должны иметь этот код выполнить только один раз:

В сценарии установки TestCase, выполните следующие действия:

def uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase().substring(0, 16) 
testCase.setPropertyValue('uuid', uuid) 

Изменение как ваш SOAP Request и XPath Assertion для использования: ${#TestCase#uuid} вместо этого.

+0

Спасибо за ваше время, SiKing. Я не могу сохранить корреляцию в скрипте установки, поскольку он уникален для каждого этапа тестирования. Не хотите писать скрипт после каждого тестового шага, чтобы обновить корреляцию для следующего запроса. –

+0

Bummer! Поэтому в этом случае я должен был бы спросить: есть ли * выгода * при проверке этого 'correId'? – SiKing

+0

Вот так. при отсутствии корреляции в запросе, он генерируется в web-сервисе. Если он присутствует, он возвращается. Поэтому я должен проверить, не возвращает ли он коррелятор или нет, когда он присутствует. –