#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
инструкции!