Domanda

Sto cercando di confrontare due array in groovy.I miei tentativi finora hanno prodotto risposte contrastanti e quindi mi rivolgo al collettivo per un consiglio.

Nel codice seguente prendo 2 risposte REST, le analizzo e inserisco tutto sotto il nodo Fattura in un array.Quindi qualifico ulteriormente il mio array in modo da avere un elenco di InvoiceID e quindi provo a confrontare i risultati delle due risposte per assicurarmi che siano uguali.

Quando confronto l'array di InvoiceID (Guid), questi corrispondono: non è quello che mi aspetto poiché l'ordine delle fatture è attualmente diverso tra le mie 2 fonti di risposta.

Quando ordino gli array di ID fatture, i risultati differiscono.

Sospetto che il mio codice sia difettoso, ma ho passato un'ora a frugarlo, senza alcun risultato.

Qualsiasi consiglio sull'ordinamento degli array in groovy o sul codice seguente sarebbe molto apprezzato:

gu = new com.eviware.soapui.support.GroovyUtils( context )
def xmlSlurper = new groovy.util.XmlSlurper()

// Setting up the response parameters
def responseSTAGE = xmlSlurper.parseText(context.expand('${GET Invoices - STAGE#Response}'));
def responseSTAGE2 = xmlSlurper.parseText(context.expand('${GET Invoices - STAGE2#Response}'));
responseInvoicesSTAGE = responseSTAGE.Invoices
responseInvoicesSTAGE2 = responseSTAGE2.Invoices

def arrayOfInvoicesSTAGE = []
def arrayOfInvoicesSTAGE2 = []

def counter = 0

for (invoice in responseInvoicesSTAGE.Invoice) {
    arrayOfInvoicesSTAGE[counter] = responseInvoicesSTAGE.Invoice[counter].InvoiceID
    //log.info counter+" STAGE"+arrayOfInvoicesSTAGE[counter]
    arrayOfInvoicesSTAGE2[counter] = responseInvoicesSTAGE2.Invoice[counter].InvoiceID
    //log.info counter+" STAGE2"+arrayOfInvoicesSTAGE2[counter]
    counter++
}

log.info arrayOfInvoicesSTAGE
log.info arrayOfInvoicesSTAGE2


def sortedSTAGE = arrayOfInvoicesSTAGE.sort()
def sortedSTAGE2 = arrayOfInvoicesSTAGE2.sort()
log.info sortedSTAGE
È stato utile?

Soluzione

Per inciso, non puoi sostituire:

def arrayOfInvoicesSTAGE = []
def arrayOfInvoicesSTAGE2 = []

def counter = 0

for (invoice in responseInvoicesSTAGE.Invoice) {
    arrayOfInvoicesSTAGE[counter] = responseInvoicesSTAGE.Invoice[counter].InvoiceID
    //log.info counter+" STAGE"+arrayOfInvoicesSTAGE[counter]
    arrayOfInvoicesSTAGE2[counter] = responseInvoicesSTAGE2.Invoice[counter].InvoiceID
    //log.info counter+" STAGE2"+arrayOfInvoicesSTAGE2[counter]
    counter++
}

con

def arrayOfInvoicesSTAGE  = responseInvoicesSTAGE.Invoice*.InvoiceID
def arrayOfInvoicesSTAGE2 = responseInvoicesSTAGE2.Invoice*.InvoiceID

Altri suggerimenti

Due array sono considerati uguali in Groovy se hanno lo stesso numero di elementi e ogni elemento nella stessa posizione è uguale.Puoi verificarlo eseguendo il codice seguente nella console Groovy

Integer[] foo = [1,2,3,4]
Integer[] bar = [4,3,2,1]

assert foo != bar

bar.sort()

assert foo == bar
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top