Como adicionar tipo de dados complexos do script groovy à resposta no SOAPUI
Pergunta
Minha pergunta é sobre colocar elementos de dados (do script Groovy) na resposta no SOAPUI. Eu tenho uma variedade de dados que gostaria de colocar na minha resposta (em diferentes tags/elementos)
Estou ciente de colocar um elemento simples como este:
O elemento "O meu nome"Na resposta XML:
<ns:MyName>${MyName}</ns:MyName>
É mapeado do roteiro Groovy por
context.setProperty("MyName" , "My name" )
Agora o problema:
Minha resposta XML se parece com a seguinte:
<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:-->
No Groovy, criei a matriz de dados que é preenchida com dados, por exemplo, como este:
context:[DataSummary:[DataSummaryResponseDetail:[Name:My name, DataProgress:[From:some text, **Procent:some value**, To:some text]]]
Na resposta, sou capaz de ver todo o valor de ${DataSummary}
Mas como faço para obter o elemento "Proced"
Talvez eu esteja errado sobre como construir meus dados de contexto, mas fique à vontade para ajustar!
Solução
Consegui fazer isso com muita pesquisa. Primeiro de tudo, eu precisava usar "=" na frente do elemento para poder obter um identificador como $ {= DataSummary [0]} Isso funciona no nível superior dos meus dados mostrados antes.
Mas para realmente resolver o problema, criei uma aula em Groovy assim:
Código: Selecione todas as classes DataSummaryRescedEtail {public String Name public DataProgress DataProgress = new DataProgress () public value [] valor = novo valor [2]} classe Dataprogress {Data pública da data pública para Float Public Procent} Classe Valor {public String Public Public Public Public Public Public Public Public} Int Monta}
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'
e então na resposta XML. Refiro -me a elementos como este $ {hsrd.value [0] .amount} $ {= hsrd.totalvalue.amount}
def hsrd = new DataSummaryResponsedEtail () hsrd.name = 'algum nome' hsrd.value [0] = new Value () hsrd.value [0] .Amount = 1000 hsrd.Value [0] .Currency = 'Sek' Hsrd. totalValue.amount = 2000 hsrd.totalvalue.currency = 'USD'
Problema resolvido. Se você souber de uma maneira melhor, por favor me avise.
Outras dicas
Eu não trabalho com Soapui, mas você já tentou o seguinte:
${DataSummary.DataSummaryResponseDetail.DataProgress.Procent}
Se o DataSummary for uma matriz, você pode acessar a primeira entrada usando
${DataSummary[0].DataSummaryResponseDetail.DataProgress.Procent}
Você pode iterar sobre a matriz usando o método cada (), então
${DataSummary.each { it.DataSummaryResponseDetail.DataProgress.Procent }}
conseguiria todas as entradas.