Я пытаюсь получить значения из ответа веб-службы в readyAPI, чтобы я мог передать его другому запросу веб-службы и создать автоматизированный поток тестирования.
Я пробовал разные фрагменты кода чаще всегоиз них была одна строка кода, которую я предпочитаю, если это возможно.Я могу взять значение из узла, набрав родительский узел по значению его атрибута.Я также могу получить родительский узел по значению атрибута дочерних узлов и использовать его для получения другого дочернего значения.
Вот несколько примеров:
Первый формат, который я могу использовать для получения значения потомков:
<webserviceResponse>
<documentslist>
<document @id="1">
<payment @currency="USD" >
<amount>1250.00</amount>
</payment>
</document>
<document @id="2">
<payment @currency="JPY" >
<amount>150.00</amount>
</payment>
</document>
<document @id="3">
<payment @currency="EUR" >
<amount>1170.00</amount>
</payment>
</document>
<!-- etc. -->
</documentslist>
-----> Toполучить валюту для конкретного документа
def webServiceResponse = "webservice#Response"
int index=2
def currency = context.expand('${'+webServiceResponse+'//*:document[@id="['+index+']"]//*:payment/@currency}')
-----> Результатом этого является "JPY"
<webserviceResponse>
<documentslist>
<document @id="1">
<payment @currency="USD" >
<amount>1250.00</amount>
</payment>
<refund>true</refund>
</document>
<document @id="2">
<payment @currency="JPY" >
<amount>150.00</amount>
</payment>
</document>
<document @id="3">
<payment @currency="EUR" >
<amount>1170.00</amount>
</payment>
<refund>false</refund>
</document>
<!-- etc. -->
</documentslist>
-------> Чтобы получить валюту, зависящую от существования определенного узла В этом примере мы просматриваем файл сверху вниз и находим все узлы возврата, а также берем значение валюты, которое находится в том же блоке, во второй раз, когда мыувидеть узел возврата.
def webServiceResponse = "webservice#Response"
int index=2
def currrency= context.expand('${'+webServiceResponse+'(//*:refund)['+index+']//parent::*//*:payment/@currency}')
--------> Результат для этого - "EUR"
Это то, что я не могу взять дочернее значение таким же образом.
<webserviceResponse>
<documentslist>
<document>
<key>D_Computer</key>
<currency>USD</currency>
<amount>1250.00</amount>
<refund>true</refund>
</document>
<document>
<key>D_Keyboard</key>
<currency>JPY</currency>
<amount>150.00</amount>
</document>
<document>
<key>D_Monitor</key>
<currency>EUR</currency>
<amount>1170.00</amount>
<refund>false</refund>
</document>
<!-- etc. -->
</documentslist>
Моя проблема с этим, он не имеет никаких атрибутов, имеет только значения узлов.Я знаю, что у него, кстати, нет целого числа, но, возможно, я делаю неправильно, чего не понимаю.
Я хочу получить значение суммы, зависящее только от значения «ключевых» узлов, которое я собираюсь указать в сценарии.
Результат должен показать: 150,00