как объявить подстановочный знак в пространствах имен в soapui?

#xpath #namespaces #soapui #wildcard

#xpath #пространства имен #soapui #подстановочный знак

Вопрос:

У меня есть две среды. Локальный и облачный. в облаке я получаю результат с пространством имен как

 <ServiceAvailability **xmlns="http://types.infrastructure.abc.de"**>
  <BackendSystem>*</BackendSystem>
  <BackendName>Domain Server Release GIT commit hash</BackendName>
  <Status>OK</Status>
  <URL>*</URL>
  <Timestamp>*</Timestamp>
</ServiceAvailability>
 

и локально я получаю без пространства имен

 <ServiceAvailability>
  <BackendSystem>*</BackendSystem>
  <BackendName>Domain Server Release GIT commit hash</BackendName>
  <Status>OK</Status>
  <URL>*</URL>
  <Timestamp>*</Timestamp>
</ServiceAvailability>
 

Я использую xpath в soapui как

 declare namespace ns1='http://types.infrastructure.abc.de';
/ns1:ServiceAvailabilities/ns1:ServiceAvailability[ns1:BackendName='Domain Server Release GIT commit hash']
 

таким образом, он проходит для облака, но не локально, потому что существует пространство имен. Итак, как я могу сделать свой тестовый набор универсальным, который включает * как пространство имен (в основном игнорирует пространство имен) В soapui есть опция as, в которой говорится, что префиксы пространства имен игнорируются, но когда они отмечены, они все равно не работают??? Как я могу использовать подстановочные знаки в объявлении пространства имен???

Ответ №1:

Один из способов справиться с этим — использовать вместо этого локальные имена. Итак, следующее должно работать для обеих версий xml в вашем вопросе:

 //*[local-name()='ServiceAvailability']/*[local-name()="BackendName"['Domain Server Release GIT commit hash']]
 

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

1. на самом деле у меня много элементов ServiceAvailability внутри одной serviceavailability, поэтому я получаю «более одного совпадения в заданном ответе»

2. @MiGo Ну, я могу работать только с образцами xml в вопросе, а не с реальной жизнью 🙂

Ответ №2:

Приведенный ниже код может вам помочь, этот заводной код работает с пространством имен soapui или без него.

введите описание изображения здесь

Я запустил один и тот же код с 2 разными ответами,

единственное, что вам нужно изменить в приведенном ниже коде, это «REST_Request» <- имя вашего тестового шага

  def GroovyUtils=new com.eviware.soapui.support.GroovyUtils(context)
 def request=GroovyUtils.getXmlHolder("REST_Request#Response")
 def backendName = request.getNodeValue("/*:ServiceAvailability/*:BackendName")
 log.info backendName 
 

введите описание изображения здесь

Ответ №3:

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

 /*:ServiceAvailabilities/*:ServiceAvailability[*:BackendName='Domain Server Release GIT commit hash']
 

Обратите внимание, что нет declare инструкции!