Come aggiungere il tipo di dati complessi da Groovy script per la risposta in SoapUI
Domanda
La mia domanda è di mettere elementi di dati (da copione Groovy) nella risposta a SoapUI. Ho una serie di dati che vorrei mettere nella mia risposta (in diversi tag / elementi)
Sono consapevole di mettere un elemento semplice come questo:
L'elemento " MyName " nella risposta XML:
<ns:MyName>${MyName}</ns:MyName>
è mappato dallo script Groovy da
context.setProperty("MyName" , "My name" )
Ora il problema:
i miei Xml aspetto di risposta come questo:
<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:-->
In Groovy Ho costruito array di dati che viene riempito con i dati, ad esempio in questo modo:
context:[DataSummary:[DataSummaryResponseDetail:[Name:My name, DataProgress:[From:some text, **Procent:some value**, To:some text]]]
Nella risposta sono in grado di vedere l'intero valore del ${DataSummary}
ma come faccio a ottenere l'elemento " Procent "
I forse sbaglio su come costruire i miei dati di contesto, ma sentitevi liberi di regolare!
Soluzione
Sono riuscito a fare questo con un sacco di ricerca. Prima di tutto, avevo bisogno di usare "=" di fronte l'elemento da essere in grado di ottenere una maniglia come $ {= DataSummary [0]} Questo funziona al livello superiore dei miei dati mostrato in precedenza.
Ma per davvero risolvere il problema ho creato una classe in Groovy in questo modo:
Codice: Seleziona tutto Classe DataSummaryResponseDetail { nome pubblico String pubblico DataProgress DataProgress = new DataProgress () Valore pubblico [] Valore = Nuovo valore [2] } class DataProgress { pubblica Data Dal Per pubblico Data flottante Procent } classe di valore { public String valuta public int Importo }
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 poi in xml risposta. Mi riferisco a elementi come questo $ {Hsrd.value [0] .Amount} $ {= Hsrd.totalValue.Amount}
def hsrd = new DataSummaryResponseDetail () hsrd.name = 'qualche nome' hsrd.value [0] = Nuovo valore () hsrd.value [0] .Amount = 1000 hsrd.value [0] = .Currency 'SEK' hsrd.totalValue.Amount = 2000 hsrd.totalValue.Currency = 'USD'
Problema risolto. Se siete a conoscenza di un modo migliore, per favore fatemelo sapere.
Altri suggerimenti
Non avere un lavoro con SoapUI, ma hai provato questo:
${DataSummary.DataSummaryResponseDetail.DataProgress.Procent}
Se DataSummary è un array, è possibile accedere alla prima voce usando
${DataSummary[0].DataSummaryResponseDetail.DataProgress.Procent}
È possibile iterare la matrice utilizzando il metodo each (), in modo da
${DataSummary.each { it.DataSummaryResponseDetail.DataProgress.Procent }}
si otterrebbe tutte le voci.