Как добавить сложный тип данных из сценария Groovy в ответ в SoapUI
Вопрос
Мой вопрос касается помещения элементов данных (из отличного сценария) в ответ в SoapUI.У меня есть массив данных, которые я хотел бы поместить в свой ответ (в разных тегах/элементах).
Я знаю, что можно поместить такой простой элемент:
Элемент "Мое имя" в ответе XML:
<ns:MyName>${MyName}</ns:MyName>
Сопоставляется из сценария Groovy с помощью
context.setProperty("MyName" , "My name" )
Теперь проблема:
мой ответ Xml выглядит так:
<soapenv:Body>
<ns:GetDataSummaryResponse>
<!--Optional:-->
<ns:GetDataSummaryResult>
<ns:DataSummary>
<!--Zero or more repetitions:-->
<ns:DataSummaryResponseDetail>
<ns:Name>?</ns:Name>
<!--Optional:-->
<ns:DataProgress>
<!--Optional:-->
<From>?</From>
<!--Optional:-->
<Procent>?</Procent>
<!--Optional:-->
<To>?</To>
<!--Optional:-->
В Groovy я построил массив данных, заполненный данными, например так:
context:[DataSummary:[DataSummaryResponseDetail:[Name:My name, DataProgress:[From:some text, **Procent:some value**, To:some text]]]
В ответе я вижу всю ценность ${DataSummary}
но как мне получить элемент "Процент"
Возможно, я ошибаюсь в том, как создавать контекстные данные, но не стесняйтесь вносить изменения!
Решение
Мне удалось это сделать после долгих поисков.Прежде всего, мне нужно было использовать "=" перед элементом, чтобы иметь возможность получить ручку, например, $ {= DataSummary [0]} Это работает на верхнем уровне моих данных, показанных ранее.
Но чтобы действительно решить проблему, я создал в Groovy такой класс:
Код:Выберите все класс DataSummaryResponseDetail {public String name public dataProgress dataProgress = new DataProgress () public value [] value = new Value [2]} класс DataProgress {public Date от public to public float procent} class value {public String currence public int int summ }
def hsrd = new DataSummaryResponseDetail()
hsrd.name = 'Some name'
hsrd.value[0]=new Value()
hsrd.value[0].Amount = 1000
hsrd.value[0].Currency = 'SEK'
hsrd.totalValue.Amount = 2000
hsrd.totalValue.Currency = 'USD'
а затем в ответе xml.Я имею в виду такие элементы, как этот $ {hsrd.value [0] .amount} $ {= hsrd.totalvalue.amount}
def hsrd = new DataSummaryResponseDetail () hsrd.name = 'некоторое имя' hsrd.value [0] = new Value () hsrd.value [0] .Amount = 1000 hsrd. TotalValue.Amount = 2000 HSRD.TotalValue.currency = 'USD'
Задача решена.Если вы знаете лучший способ, пожалуйста, дайте мне знать.
Другие советы
Я не работаю с Soapui, но вы пробовали это:
${DataSummary.DataSummaryResponseDetail.DataProgress.Procent}
Если DataSummary является массивом, вы можете получить доступ к первой записи, используя
${DataSummary[0].DataSummaryResponseDetail.DataProgress.Procent}
Вы можете перейти на массив, используя метод каждый (), так
${DataSummary.each { it.DataSummaryResponseDetail.DataProgress.Procent }}
доставит вам все записи.