2010-06-10 2 views
0

Мой вопрос заключается в том, чтобы помещать элементы данных (из строкового скрипта) в ответ в SoapUI. Я массив данных, которые я хотел бы поставить в своем ответе (в разных метках/элементов)Как добавить сложный тип данных из сценария Groovy в ответ в 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}, но как мне получить элемент «Pro cent "

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

ответ

1

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

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

Код: Выделить все класса DataSummaryResponseDetail { имя общественного Строка общественного DataProgress DataProgress = новый DataProgress() общественное значение [] значение = новое значение [2] } класса DataProgress { общественного Дата От общественности даты Для общественного поплавка Procent } класса Value { общественной Строка валюты общественного ИНТ Сумма }

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}

Защиту hsrd = новый DataSummaryResponseDetail() hsrd.name = 'Некоторые называют' hsrd .value [0] = новое значение() hsrd.value [0] .Amount = 1000 hsrd.value [0] .Currency = 'SEK' hsrd.totalValue.Amount = 2000 hsrd.totalValue.Currency = ' USD '

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

0

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

${DataSummary.DataSummaryResponseDetail.DataProgress.Procent} 

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

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

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

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

доставит вам все записи.

+0

Nope! Поскольку DataSummary, как и многие другие, здесь «массивы», мне нужен способ объявить, какой индекс мне интересен. – SeeU

+0

Спасибо за наш ответ. Как я писал ранее, я строю массив в Groovy. Но данные включаются в ответ xml вроде этого. [DataSummary: [DataSummaryResponseDetail: [Name: My name, DataProgress: [From: some text, Procent: some value, To: некоторый текст]]] "также как строка. Я пробовал более простые варианты, как следует, но я не верю. $ {DataSummary [0] .DataSummaryResponseDetail [0] .Name} $ {DataSummaryResponseDetail [0] .Name} Если я использую «$ DataSummary», я возвращаю всю строку. Имеет ли что-нибудь с XPATH для достижения необходимых мне данных? Должен ли я создать свой контекст (DataSummary) другим способом? – SeeU

 Смежные вопросы

  • Нет связанных вопросов^_^