soapui - сопоставить значение ответа со значением запроса

У меня есть SOAP-запрос, подобный этому

<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 Expression:

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 для идентификатора корреляции.
но при этом Утверждение, что сценарий для CorrelationId оценивается снова, что создает другой идентификатор.
Я просто хочу получить идентификатор coorelation в полезной нагрузке, отправленной в запросе, чтобы я мог сравнить.

Я просмотрел документы и искал решение, но не нашел.
Заранее благодарен за помощь.


person Srikanth Kumar    schedule 12.02.2015    source источник


Ответы (1)


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

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

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

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

Измените оба ваш запрос SOAP и утверждение XPath, чтобы использовать: ${#TestCase#uuid} вместо этого.

person SiKing    schedule 12.02.2015
comment
Спасибо за ваше время, SiKing. Я не могу сохранить идентификатор корреляции в сценарии установки, так как он уникален для каждого шага теста. Не хотите писать скрипт после каждого шага теста, чтобы обновить CorrelationId для следующего запроса. - person Srikanth Kumar; 18.02.2015
comment
Облом! Так что в этом случае я должен был бы спросить: есть ли выгода от проверки этого correlationId? - person SiKing; 18.02.2015
comment
Это вот так. когда в запросе нет идентификатора корреляции, он создается в веб-службе. Если он присутствует, то он возвращается. Поэтому я должен проверить, возвращает ли он CorrelationId или нет, когда он присутствует. - person Srikanth Kumar; 19.02.2015
comment
Если у вас есть SoapUI-Pro, вы можете использовать пользовательское событие soapui .org/scripting---properties/custom-event-handlers.html, чтобы создать его перед каждым этапом тестирования. - person SiKing; 19.02.2015