Я новичок в пользовательском интерфейсе SOAP, поэтому есть какой-либо метод для извлечения пар ключ-> значение из пользовательского интерфейса SOAP. То есть чтение «индекса» того, что может предложить интерфейс SOAP? Как читать MIB из SNMP?
Например я могу запросить:
<SOAP:Body>
<find xmlns="xmlapi">
<fullClassName>Persons</fullClassName>
<resultFilter class="Persons.Data">
<attribute>Name</attribute>
</resultFilter>
</find>
</SOAP:Body>
Имя класса «Persons» — это то, что я знаю, но есть ли способ получить список «классов», который может предложить SOAP UI?
Если вы хотите получить все <fullClassName>
элементы внутри <find>
для конкретного запроса, возможный способ, например, с использованием XmlSlurper внутри Groovy TestStep:
// get your response
def response = context.expand( '${TestRequest#Response}' )
// parse it
def xml = new XmlSlurper().parseText(response)
// find all `<fullClassName>` in your xml
def classNames = xml.'**'.findAll { it.name() == 'fullClassName' }
// print all values
classNames.each{
log.info "fullClassName: $it"}
Как вы новичок в SoapUI (может также Groovy) вот несколько подсказок:
context.expand( '${TestRequestName#Property}' )
получить содержимое определенного свойства из некоторого элемента области видимости. В вашем случае вы должны указать имя запроса и в качестве свойства ответ. Для получения дополнительной информации см. документация по расширению недвижимости
Groovy автоматически использовать it
в качестве переменной для замыканий. Вот почему я использую it
в each
И в findAll
,
ОБНОВИТЬ
Если вы хотите знать все возможные значения, поддерживаемые <fullClassName>
у вас есть следующие варианты:
<fullClassName>
определены в схема имеет <xs:restiction>
с <xs:enumeration>
с возможными значениями.<xs:string>
или другой тип, который не дает никакой подсказки о допустимом значении, обратитесь к провайдеру, чтобы увидеть альтернативу, например, если есть другой сервис SOAP, который возвращает значения …Для первого случая, если у вас есть .xsd
попробуйте добавить Groovy TestStep разобрать .xsd
и получить <xs:enumeration>
значения, см. следующий пример:
def xsd = '''<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<simpleType name="fullClassNameType">
<restriction base="string">
<enumeration value="Persons"/>
<enumeration value="AnotherClassName"/>
<enumeration value="AnotherOne"/>
</restriction>
</simpleType>
</schema>'''
// parse the xsd
def xml = new XmlSlurper().parseText( xsd )
// find your type by name attribute
def fullClassNameType = xml.depthFirst().find { it.@name == 'fullClassNameType' }
// get an array with value attribute of enumeration elements
def allowedValues = fullClassNameType.restriction.enumeration*.@value
log.info allowedValues // [Persons, AnotherClassName, AnotherOne]
Надеюсь, поможет,
Других решений пока нет …