Blog

So integrieren Sie FitNesse-Tests in Jenkins

Marcus Martina

Marcus Martina

Aktualisiert Oktober 22, 2025
4 Minuten
In einer idealen kontinuierlichen Integrationspipeline sind verschiedene Testebenen involviert. Einzelne Softwaremodule werden in der Regel durch Unit-Tests validiert, während Aggregate von Softwaremodulen durch Integrationstests validiert werden. Bei der Verwendung eines Continuous-Integration-Build-Tools wie Jenkins ist es naheliegend, verschiedene Build-Schritte zu definieren, wobei jeder Schritt Feedback zurückgibt und Testberichte und Trenddiagramme für eine bestimmte Testebene erstellt. FitNesse ist ein leichtgewichtiges Test-Framework, das Integrationstests auf eine sehr kollaborative Art und Weise implementieren soll, wodurch es sich sehr gut für den Einsatz in agilen Softwareprojekten eignet. Mit Jenkins und Maven ist es ganz einfach, die Ausführung von FitNesse-Integrationstests automatisch auszulösen. Wenn Jenkins richtig konfiguriert und gebootstrapped ist, kann es die FitNesse-Testergebnisse ähnlich behandeln wie die Ergebnisse regulärer JUnit-Tests. Nehmen wir nun an, dass wir innerhalb eines Maven-Projekts eine FitNesse-Suite haben, die die Integrationstests enthält, die von einem Jenkins-Job ausgeführt werden sollen. Mit dem Maven Failsafe Plugin und der Hilfe einiger praktischer, in FitNesse integrierter JUnit Utility-Klassen kann dies ganz einfach erreicht werden.Zunächst müssen wir eine JUnit Integrationstestklasse erstellen, die die FitNesse-Tests tatsächlich bootstrappen wird. Sagen wir, diese Klasse heißt FitNesseIT. Innerhalb dieser Klasse müssen wir einen JUnitXMLTestListener und einen JUnitHelper so instanziieren, dass Jenkins die Testergebnisse automatisch als reguläre JUnit-Testergebnisse erkennt: [code lang="java"] import fitnesse.junit.*; resultListener = new JUnitXMLTestListener("target/failsafe-reports"); jUnitHelper = new JUnitHelper(".", "target/fitnesse-reports", resultListener); [/code] Die Port-Eigenschaft des JUnitHelper muss bei Verwendung des SLIM-Testsystems nicht gesetzt werden. Wenn jedoch das FIT-Testsystem verwendet wird, muss dieser Port auf einen geeigneten Wert gesetzt werden, da er die Portnummer des FitServers angibt, der zur Ausführung der FIT-Tests gestartet wird. Es wird empfohlen, einen zufälligen, frei verfügbaren Port zuzuweisen, da es als gute Praxis gilt, die Verwendung eines festen Ports auf dem ausführenden Jenkins-Knoten zu vermeiden: [code lang="java"] // wenn Testsystem == FIT socket = new ServerSocket(0); jUnitHelper.setPort(socket.getLocalPort()); socket.close(); [/code] Die Eigenschaft debugMode des JUnitHelper sollte nicht geändert werden. Sie ist standardmäßig auf true gesetzt, was bedeutet, dass der SlimService oder FitServer effizient innerhalb desselben Java-Prozesses ausgeführt wird, der vom Maven Failsafe Plugin zur Ausführung des Integrationstests erstellt wird. Der JUnitHelper wird verwendet, um die Ausführung der eigentlichen FitNesse-Tests zu starten: [code lang="java"] @Test public void assertSuitePasses() throws Exception { jUnitHelper.assertSuitePasses(suiteName); } [/code] Die Ausführung der FitNesseIT Testklasse selbst kann durch die Verwendung des Maven Failsafe Plugin ausgelöst werden. Auf diese Weise wird die FitNesse-Suite automatisch als Teil der Maven-Lebenszyklus-Integrationstest-Build-Phase ausgeführt.Die FitNesseIT-Testklasse kann auch von Ihrer IDE aus ausgeführt werden, was es wirklich einfach macht, die FitNesse-Tests zu debuggen, indem man durch die Fixture-Klassen schreitet.Anstatt selbst einen JUnitHelper zu instanziieren, hätten wir die JUnit-Runner-Klasse FitNesseSuite verwenden und per Annotation die eigentliche FitNesse-Suite angeben können, die als JUnit-Test ausgeführt werden soll. Diese Runner-Klasse erstellt jedoch nicht die JUnit-XML-Berichtsdateien, die von Jenkins verarbeitet werden müssen. Da der JUnitXMLTestListener bereits Berichtsdateien für alle einzelnen FitNesse-Tests erstellt, besteht keine Notwendigkeit für eine separate Berichtsdatei für die Bootstrapping-FitNesseIT-Testklasse selbst. Daher muss die Konfigurationseigenschaft disableXmlReport des Maven Failsafe Plugin aktiviert werden. Auf diese Weise berücksichtigt der Jenkins-Auftrag bei der Erstellung seines Testberichts und Trenddiagramms nur die Ergebnisse der einzelnen FitNesse-Tests. Außerdem müssen die Systemeigenschaftsvariablen TEST_SYSTEM und SLIM_PORT entsprechend konfiguriert werden: [code lang="xml"] <Plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <Hinrichtungen> <Ausführung> <Ziele> <goal>integration-test</goal> </goals> </execution> </executions> <Konfiguration> <disableXmlReport>true</disableXmlReport> <systemPropertyVariables> <TEST_SYSTEM>slim</TEST_SYSTEM> <SLIM_PORT>0</SLIM_PORT> </systemPropertyVariables> </configuration> </plugin> [/code] Wenn Sie die Variable SLIM_PORT auf 0 setzen, wird der SLIM-Executor auf einem zufälligen, frei verfügbaren Port ausgeführt, so dass auf dem ausführenden Jenkins-Knoten kein fester Port verwendet wird. Wenn Sie FIT verwenden, muss die Variable TEST_SYSTEM natürlich auf fit statt slim gesetzt werden und die Variable SLIM_PORT wird nicht benötigt. Alternativ können die Variablen TEST_SYSTEM und SLIM_PORT mit dem Schlüsselwort Fitnesse define definiert werden: !define TEST_SYSTEM {slim} !define SLIM_PORT {0} Da Jenkins automatisch die Verzeichnisse für Failsafe-Reports "**/target/failsafe-reports" durchsucht, werden die FitNesse-Testergebnisse sofort verarbeitet. Es sind keine zusätzlichen Jenkins-Plugins erforderlich. Der JUnitHelper erstellt auch einen schönen HTML-Bericht, der aus einer Zusammenfassung mit einigen nützlichen Statistiken sowie aus detaillierten Testergebnisseiten für alle ausgeführten Tests besteht. Dieser Bericht befindet sich im Verzeichnis "target/fitnesse-reports" und kann durch eine Post-Build-Aktion mit dem HTML Publisher Plugin veröffentlicht werden. In einer kontinuierlichen Integrationspipeline ist es sinnvoll, die Ausführung der Integrationstests in einem einzelnen Build-Schritt anzustoßen. Dies kann typischerweise durch die Aktivierung des Maven Failsafe Plugins unter Verwendung eines Maven Profils erreicht werden. Auf diese Weise werden die Ergebnisse der Integrationstests und die Ergebnisse der Unit-Tests von Jenkins nicht in denselben Berichten und Trenddiagrammen vermischt.

Verfasst von

Marcus Martina

Contact

Let’s discuss how we can support your journey.