2010-04-20 10 views
10

Esiste uno strumento o un framework in grado di semplificare il test del software distribuito scritto in Java? Il mio sistema in prova è un software peer-to-peer e mi piacerebbe eseguire test usando qualcosa come PNUnit, ma con Java invece di .Net.Framework o strumento per "testing di unità distribuite"?

Il sistema in prova è un framework che sto sviluppando per creare applicazioni P2P. Usa JXTA come sottosistema inferiore, cercando di nascondere alcune complessità di esso. Attualmente è un progetto accademico, quindi sto perseguendo la semplicità in questo momento.

Nel mio test, voglio dimostrare che un peer (in esecuzione nel suo stesso processo, possibilmente con più thread) può scoprirne un altro (in esecuzione in un altro processo o anche in un altro computer) e che possono scambiare alcuni messaggi. Non sto usando mock né stub perché ho bisogno di vedere entrambi i lati lavorare contemporaneamente. Mi rendo conto che è necessario un qualche tipo di meccanismo di coordinamento e PNUnit sembra essere in grado di farlo.

Mi sono imbattuto in alcune iniziative come Pisces, che "mira a fornire un ambiente di test distribuito che estende JUnit, dando allo sviluppatore/tester la possibilità di eseguire JUnit remoti e creare suite di test complesse composte da più JUnit remoti test eseguiti parallelamente o in serie ", ma questo progetto e alcuni altri che ho trovato sembrano essere da tempo morti.

+9

Umm ... Non chiamerei quel test dell'unità. Chiamerei sistema o test di integrazione del test funzionale o della varietà di test delle prestazioni/carico. –

+0

Sì, sono tendenzialmente d'accordo con te, Stephen. Nel mio caso, questo non è il test delle prestazioni (carico, stress, nome) perché l'intento del test è di mostrare che le parti del sistema funzionano come pianificato. Ad esempio, ogni componente dovrebbe essere in grado di scoprirne altri, inviare e rispondere a messaggi, ecc. Quindi, direi che questo è più di un test funzionale o anche di un piccolo test di integrazione perché si concentra su alcune interazioni che coinvolgono un paio di coetanei . Per favore, vedi la descrizione aumentata sopra per maggiori dettagli sul software, e grazie per l'attenzione. – msugar

risposta

2

Il test del software distribuito dipende molto dal tipo di software, quindi per una risposta completa dovrò sapere cosa fa il software. Tuttavia, osservando PNUnit sembra che la maggior parte di ciò che fa è consentire la sincronizzazione, l'ordinamento e l'esecuzione parallela dei test. TestNG supporta anche questo, per esempio, si può fare:

@Test(threadPoolSize = 3, invocationCount = 10, timeOut = 10000) 
public void testServer() { 
    : 
} 

che richiamerà la funzione TestServer dieci volte da tre diversi thread. Il registro delle modifiche di TestNG 4.5 suggerisce anche la possibilità di eseguire test remoti, maggiori informazioni sono disponibili nel post del blog this.

In alternativa, è possibile eseguire il checkout del software IBM ConTest per il test di software parallelo e distribuito (esiste una buona descrizione di come utilizzarlo here). Ho avuto un grande successo usandolo per esporre bug nelle mie applicazioni concorrenti.

+0

Lars, grazie mille per l'attenzione. Ho aumentato la descrizione del software. Per favore, fammi sapere se hai bisogno di ulteriori dettagli per capirlo meglio. In questo caso specifico, penso che PNUnit sia più vicino a soddisfare le mie esigenze rispetto a TestNG (sfortunatamente, non voglio lavorare con un'altra piattaforma oltre a Java, quindi PNUnit è fuori questione per me), ma la verità è che non lo faccio Conosco TestNG e JUnit. Gli darò qualche altra attenzione, ma temo di essere in un vicolo cieco qui ... – msugar

0

Bene, c'è un modo che è molto semplice e non richiede l'apprendimento di alcun nuovo framework. È possibile testare i registri prodotti dalle applicazioni attraverso l'ambiente distribuito utilizzando grep4j. Dai un'occhiata a here e here per maggiori informazioni.

Problemi correlati