Как добавить сложный тип данных из скрипта Groovy в ответ в SoapUI - PullRequest
0 голосов
/ 10 июня 2010

Мой вопрос касается помещения элементов данных (из groovy script) в ответ в SoapUI. У меня есть массив данных, которые я хотел бы добавить в свой ответ (в разных тегах / элементах)


Я знаю, как поместить простой элемент, подобный этому:

Элемент " MyName " в ответе 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}, но как мне получить элемент " Procent "

Возможно, я ошибаюсь из-за того, как строить свои контекстные данные, но не стесняйтесь настраивать!

Ответы [ 2 ]

1 голос
/ 11 июня 2010

Мне удалось сделать это с большим количеством поиска.Прежде всего, мне нужно было использовать «=» перед элементом, чтобы иметь возможность получить дескриптор типа $ {= DataSummary [0]}. Это работает на верхнем уровне моих данных, показанных ранее.

Но чтобы действительно решить эту проблему, я создал класс в Groovy следующим образом:

Код: выбрать все Класс DataSummaryResponseDetail {публичное имя строки public DataProgress DataProgress = new DataProgress () public Value [] value = new Value [2]} class DataProgress {public Date From public Date To public float Procent} class Значение {public String Currency public int Amount}

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 = 'Some name' hsrd.value[0] = новое значение () hsrd.value [0] .Amount = 1000 hsrd.value [0] .Currency = 'SEK' hsrd.totalValue.Amount = 2000 hsrd.totalValue.Currency = 'USD'

Проблема решена.Если вы знаете лучший способ, пожалуйста, дайте мне знать.

0 голосов
/ 10 июня 2010

Я не работал с SoapUI, но вы пробовали это:

${DataSummary.DataSummaryResponseDetail.DataProgress.Procent}

Если DataSummary является массивом, вы можете получить доступ к первой записи, используя

${DataSummary[0].DataSummaryResponseDetail.DataProgress.Procent}

Вы можете перебирать массив, используя метод each (), поэтому

${DataSummary.each { it.DataSummaryResponseDetail.DataProgress.Procent }}

получит все записи.

...