Miglioramenti nel framework di test basato su java per ridurre i tempi di esecuzione

0

Lascia che ti dia un po 'di informazioni sul problema.

Abbiamo un'applicazione java con integrazione MQ e un pacchetto di test di integrazione, anch'esso scritto in java.

Il pacchetto di test esegue tutti gli scenari (positivi e negativi) eseguendo i casi di test (metodi) e modificando i parametri in base allo scenario. Il modo in cui fa le asserzioni è di mettere un messaggio sulle code di input dell'applicazione e si aspetta un messaggio nelle code di output dell'applicazione. Il corpo del messaggio viene controllato perché differisce a seconda dello scenario di test.

C'è solo 1 coda di input e 1 coda di output nell'applicazione principale. Il numero di casi (metodi) di test è circa 300 e, a causa dell'esecuzione di tutti gli scenari noti, il numero di casi di test effettivamente eseguiti è circa 2500. A causa di ciò, il test pack richiede circa 6 ore per essere eseguito completamente.

Poiché c'è solo una coda su cui il test pack asserisce il messaggio di output, dobbiamo cancellare la coda ogni volta prima di eseguire il prossimo test case. Altrimenti può portare alla miscelazione dei messaggi di output. Ad es. la chiamata di metodo n. 2 potrebbe finire per consumare messaggi di output per la chiamata di metodo n. 1. Quindi non possiamo eseguire i test case anche in parallelo.

Voglio migliorare questo processo e sarei molto grato per qualsiasi suggerimento per ottimizzare il pacchetto di test. In questo momento sto pensando di separare le code di input e output dell'applicazione principale secondo la funzione aziendale e quindi affermare su più code in parallelo. Ma questo approccio significa che devo cambiare l'architettura originale in modo che i miei casi di test funzionino più velocemente e questo non è facile poiché ci sono già client che usano questa applicazione e interagiscono usando le 2 code e dovranno cambiare anche le loro applicazioni.

Chiedo scusa per il post lungo, ma mi piacerebbe sentire gli input di così tante persone creative nella community SO.

Grazie!

    
posta phoenixSid 10.06.2018 - 20:01
fonte

4 risposte

0

Quindi la soluzione che abbiamo trovato è questa. Dockizzeremo il pacchetto di test in modo da avere più contenitori che eseguono più server e più code di messaggi. Utilizzeremo i profili Maven per distribuire la stessa guerra, ma eseguiremo diversi test pack nei contenitori separati. Il pacchetto di test sarebbe modularizzato in modo tale che i test all'interno di ciascun modulo non si sovrappongano l'un l'altro in termini di code / messaggi. Grazie a tutti per il loro tempo e i loro preziosi commenti.

    
risposta data 09.11.2018 - 12:12
fonte
1

Esistono filtri sulle code di messaggi. È possibile inserirli nella stessa coda di messaggi e quindi assegnare un listener per i messaggi in base a un criterio specifico. Questo criterio può essere qualsiasi cosa, per collegare ID a un nome di messaggio arbitrario.

Il risultato finale è che i messaggi che non hanno quel criterio specifico non vengono buttati via, semplicemente aspettano di essere processati dai gestori senza tali criteri, consentendo in pratica di eseguire controlli su aspetti specifici relativi a messaggi specifici senza rimuovere messaggi altri rispetto a quelli che desideri controllare.

    
risposta data 08.11.2018 - 08:35
fonte
0

Una delle cose che mi faceva impazzire era quando eclipse avrebbe eseguito i miei test in parallelo quando non me l'ero aspettato. Questo mi ha irritato perché sono un tester di vecchia scuola che pensa ancora che scrivere alla console sia utile. Due test avrebbero scritto sulla console e, a volte, tutto andava bene. A volte il testo di un utente viene mixato a metà strada tra gli altri.

Poi ho capito quanto fosse semplice la soluzione. Lascia che ogni test costruisca la propria stringa e restituisca quella stringa alla volta. Una volta fatto ciò, ho potuto lasciare che i test funzionassero parallelamente bene.

Se non hai dipendenze sequenziali, memoria condivisa o uscite multiple da ogni lavoro da mantenere in ordine, non vedo perché non puoi lasciarle funzionare in parallelo.

    
risposta data 11.06.2018 - 00:41
fonte
0

Since there is only 1 queue on which the test pack asserts the output message, we have to clear the queue each time before we run the next test case. Otherwise it may lead to mixing of the output messages. For e.g. method call#2 might end up consuming output message for method call#1. Hence we can't run the test cases in parallel too.

Assegna id univoci ai messaggi e ascolta il messaggio con l'ID previsto nella coda di output con un limite di tempo superiore. Questo dovrebbe farti provare le esecuzioni parallele.

Puoi racchiudere questa logica di pubblicazione / ascolto in un'implementazione generica di stile di richiesta / risposta. Da lì in poi, usa qualcosa come RxJava per comporre scenari di più di tali chiamate.

    
risposta data 11.06.2018 - 06:27
fonte

Leggi altre domande sui tag