2010-04-20 12 views
10

Gibt es ein Tool oder Framework, das den Test von in Java geschriebener verteilter Software erleichtert? Mein System im Test ist eine Peer-to-Peer-Software, und ich möchte Tests mit etwas wie , aber mit Java statt. NET durchführen.Framework oder Tool für "Distributed Unit Testing"?

Das System im Test ist ein Framework, das ich entwickle, um P2P-Anwendungen zu erstellen. Es verwendet JXTA als ein unteres Subsystem und versucht, einige Komplexitäten davon zu verbergen. Es ist derzeit ein akademisches Projekt, also suche ich Einfachheit in diesem Moment.

In meinem Test möchte ich zeigen, dass ein Peer (der in einem eigenen Prozess läuft, möglicherweise mit mehreren Threads) einen anderen (in einem anderen Prozess oder sogar einem anderen Rechner) findet und ein paar Nachrichten austauschen kann. Ich benutze keine Mocks oder Stubs, weil ich sehen muss, dass beide Seiten gleichzeitig arbeiten. Ich erkenne, dass eine Art Koordinationsmechanismus benötigt wird, und PNUnit scheint dazu in der Lage zu sein.

Ich habe einige Initiativen wie Pisces getroffen, die "eine verteilte Testumgebung bereitstellen, die JUnit erweitert und dem Entwickler/Tester die Möglichkeit gibt, Remote-JUnits auszuführen und komplexe Test-Suites zu erstellen, die aus mehreren Remote-JUnit bestehen Tests laufen parallel oder seriell ", aber dieses Projekt und einige andere, die ich gefunden habe, scheinen lange tot zu sein.

+9

Umm ... Ich würde diese Unit-Tests nicht nennen. Ich würde es System- oder Integrationstests von entweder der funktionalen Test- oder der Leistungs-/Lasttest-Variante nennen. –

+0

Ja, ich stimme dir zu, Stephen. In meinem Fall ist dies kein Test (Last, Stress, Sie nennen es), weil die Absicht des Tests darin besteht, zu zeigen, dass die Teile des Systems wie geplant funktionieren. Zum Beispiel sollte jede Komponente in der Lage sein, andere zu entdecken, Nachrichten zu senden und zu beantworten. Daher würde ich sagen, dass dies eher ein Funktionstest oder sogar ein kleiner Integrationstest ist, weil es sich auf einige wenige Interaktionen mit einem Paar von Peers konzentriert . Bitte beachten Sie die erweiterte Beschreibung für mehr Details über die Software, und danke für Ihre Aufmerksamkeit. – msugar

Antwort

2

Das Testen von verteilter Software hängt stark davon ab, welche Art von Software es ist. Für eine vollständige Antwort muss ich also wissen, was Ihre Software macht. Bei der Betrachtung von PNUnit ist jedoch zu beachten, dass die meisten Funktionen Synchronisation, Bestellung und parallele Ausführung von Tests ermöglichen. TestNG unterstützt auch dies, zum Beispiel, können Sie tun:

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

, die die Funktion Testserver zehnmal aus drei verschiedenen Threads aufrufen wird. Das Änderungsprotokoll von TestNG 4.5 weist auch auf die Möglichkeit hin, entfernte Tests durchzuführen. Weitere Informationen finden Sie im Blog-Post this.

Alternativ können Sie IBM ConTest Software zum Testen von paralleler und verteilter Software prüfen (es gibt eine großartige Beschreibung, wie man es verwendet here). Ich hatte großen Erfolg damit, Fehler in meinen gleichzeitigen Anwendungen aufzudecken.

+0

Lars, vielen Dank für Ihre Aufmerksamkeit. Ich habe die Beschreibung der Software erweitert. Bitte lassen Sie es mich wissen, wenn Sie weitere Details benötigen, um es besser zu verstehen. In diesem speziellen Fall denke ich, dass PNUnit meinen Anforderungen näher kommt als TestNG (leider möchte ich nicht mit einer anderen Plattform als Java arbeiten, so dass PNUnit für mich nicht in Frage kommt), aber die Wahrheit ist, dass ich t kennen sowohl TestNG als auch JUnit. Ich werde es etwas mehr Aufmerksamkeit geben, aber ich fürchte, ich bin hier in einer Sackgasse ... – msugar

0

Nun, es gibt einen Weg, der sehr einfach ist und kein neues Framework lernen muss. Sie können die von den Anwendungen in Ihrer verteilten Umgebung erstellten Protokolle mit grep4j testen. Werfen Sie einen Blick auf here und here für weitere Informationen.