Als Softwareentwickler verwenden Sie das Abhängigkeitsmanagement, um die Abhängigkeiten in Ihrem Projekt zu verwalten und Frameworks und Bibliotheken in Ihr Projekt aufzunehmen. Wenn Sie ein Java-Entwickler sind, verwenden Sie wahrscheinlich
Wie sieht es mit Ihrer FitNesse Abnahmesuite aus? Da es sich um Software handelt, die zum Projekt gehört, sollten Sie bei der Ausführung der Akzeptanztestsuite die gleichen Standards anwenden. Es ist eigentlich nicht viel anders als die Ausführung Ihrer regulären (Unit-)Tests.
In diesem Blog erkläre ich Ihnen, wie Sie eine FitNesse-Suite von Maven aus starten können. Ich werde auch darauf eingehen, wie FitNesse die Abhängigkeiten erkennt, die zum Starten der Anwendung erforderlich sind. Ein zukünftiger Beitrag wird sich mit der FitNesse/Ivy-Kombination befassen.
FitNesse von Maven aus starten
Wenn Sie mit der Integration von FitNesse über Maven beginnen, gibt es einige Herausforderungen zu bewältigen:
- Maven hat eine begrenzte Anzahl von Bereichen, in denen Sie Abhängigkeiten definieren können (Kompilieren, Testen, Laufzeit)
- Maven verwendet einen festen Satz von Ausführungsphasen.
- Ich würde FitNesse gerne in 2 Modi starten: interaktiv und nicht interaktiv.
Da es bei FitNesse um Akzeptanztests geht, ist es sinnvoll, diese in der Integrationstestphase durchzuführen. Die Integrationstestphase wird nach der
FitNesse im interaktiven Modus
Das Wichtigste zuerst: Um irgendetwas mit FitNesse tun zu können, müssen wir die Abhängigkeit einbeziehen. Um FitNesse zu starten, verwenden wir den Laufzeitbereich:
[sourcecode lang="xml"]<Abhängigkeiten> <!-- Projekt-Abhängigkeiten gehen hier hin ... --> <Abhängigkeit> <groupId>org.fitnesse</groupId> <artifactId>fitnesse</artifactId> <Version>20121220</version> <Geltungsbereich>Laufzeit</Geltungsbereich> </dependency> </dependencies> [/sourcecode]
Dies gehört in den normalen Abschnitt für Abhängigkeiten.
Schauen wir uns nun das Profil an. Wie bereits gesagt, möchte ich FitNesse für die interaktive Bearbeitung aus der Testphase heraus starten.
[sourcecode lang="xml"]<Profile> <Profil> <id>fitnesse</id> <bauen> <Plugins> <Plugin> <artifactId>maven-antrun-plugin</artifactId> <Version>1.6</version> <Hinrichtungen> <Ausführung> <id>start-fitnesse</id> <Phase>test</phase> <Konfiguration> <Aufgaben> <echo taskname="fitnesse" message="FitNesse starten..." /> <java classname="fitnesseMain.FitNesseMain" classpathref="maven.runtime.classpath" fork="true"> <arg line="-p 8000" /> <arg line="-d ." /> </java> </tasks> </configuration> <Ziele> <Ziel>laufen</Ziel> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> [/sourcecode]
Achten Sie auf das classpathref-Attribut im Java-Tag. Es verweist auf die Laufzeit-Klassenpfaddefinition von Maven. So einfach ist das.
So können Sie FitNesse mit dem folgenden Befehl starten:
[sourcecode]$ mvn -Pfitnesse test [/sourcecode]
Ganz okay, oder? Sie können das Wiki im Standalone-Modus starten und es als, nun ja, ein Wiki verwenden.
Maven-Unterstützung in FitNesse
Lassen Sie uns nun sehen, ob wir FitNesse dazu bringen können, einige Abhängigkeiten über Maven zu importieren. Die Abhängigkeiten sind in der Datei pom.xml angegeben, es macht also keinen Sinn, diese zu duplizieren. Da sich die Abhängigkeiten im Laufe der Zeit ändern, ist es ziemlich arbeitsintensiv, sie in FitNesse von Hand zu verwalten. Die beste Lösung ist die Einbindung des maven-classpath-plugin. Dieses Plugin muss zusammen mit der FitNesse-Binärdatei geladen werden, damit FitNesse davon Gebrauch machen kann. Fügen wir es in das Profil ein, dann sieht die Profildefinition wie folgt aus:
[sourcecode lang="xml"]<Profile> <Profil> <id>fitnesse</id> <bauen> <Plugins> <Plugin> <artifactId>maven-antrun-plugin</artifactId> <Version>1.6</version> <Hinrichtungen> <Ausführung> <id>start-fitnesse</id> <Phase>test</phase> <Konfiguration> <Aufgaben> <echo taskname="fitnesse" message="FitNesse starten..." /> <java classname="fitnesseMain.FitNesseMain" classpathref="maven.runtime.classpath" fork="true"> <arg line="-p 8000" /> <arg line="-d ." /> </java> </tasks> </configuration> <Ziele> <Ziel>laufen</Ziel> </goals> </execution> </executions> </plugin> </plugins> </build> <Abhängigkeiten> <Abhängigkeit> <groupId>org.fitnesse.plugins</groupId> <artifactId>maven-classpath-plugin</artifactId> <Version>1.6</version> <Geltungsbereich>Laufzeit</Geltungsbereich> </dependency> </dependencies> </profile> </profiles> [/sourcecode]
Das war's mit der Abhängigkeit. Lassen Sie uns nun FitNesse davon in Kenntnis setzen. In einer Datei namens plugins.properties (im selben Verzeichnis, in dem sich Ihr POM befindet) können wir das Plugin definieren:
[sourcecode]# plugins.properties: Konfiguration für FitNesse SymbolTypes = fitnesse.wikitext.widgets.MavenClasspathSymbolType [/sourcecode]
Wir werden unsere Abhängigkeiten von einer Wiki-Seite definieren, also das Plugin als SymbolType definieren.
Starten Sie nun FitNesse neu(Strg-C, um die laufende Instanz zu beenden). Sie erhalten eine Meldung, dass das Plugin geladen ist:
[sourcecode] [fitnesse] Starten von FitNesse 20121220... (Selenium 2.29.1) FitNesse (v20121220) Gestartet... port: 8000 root page: fitnesse.wiki.FileSystemPage at ./FitNesseRoot logger: none authenticator: fitnesse.authentication.PromiscuousAuthenticator page factory: fitnesse.responders.PageFactory page theme: bootstrap page version expiration set to 0 days. Custom symbol types loaded: fitnesse.wikitext.widgets.MavenClasspathSymbolType [/sourcecode]
Jetzt müssen Sie nur noch den Maven-Klassenpfad in die Hierarchie der Testsuite aufnehmen. Definieren Sie in einer Wikiseite:
[sourcecode]!pomFile pom.xml [/sourcecode]
Wenn Sie die Datei speichern, sollten Sie auf der Seite eine Reihe von "Klassenpfad"-Einträgen sehen.
Standardmäßig wird der Testbereich geladen (dies hat nichts damit zu tun, dass wir FitNesse in der Testphase gestartet haben). Das Plugin zeigt alle Abhängigkeiten an.
Eine Anmerkung: Warum habe ich die FitNesse-Abhängigkeit zu den Projektabhängigkeiten und das Plugin zu den Profilabhängigkeiten hinzugefügt? Sie benötigen das FitNesse-Jar, sobald Sie mit der Ausführung von Tests beginnen. Das Plugin ist derzeit nicht in der Lage, Profile zu aktivieren. In der Praxis ist das kaum ein Problem.
Ausführen von Integrationstests
Die Ausführung von FitNesse als Teil des Build-Zyklus folgt im Grunde demselben Schema. Legen wir es in ein Profil, das standardmäßig aktiv ist. Dies bietet eine gewisse Flexibilität, da das Profil deaktiviert werden kann, um die Ausführung der Tests zu verhindern (z.B. für einen lokalen Build).
[sourcecode lang="xml"]<Profile> <!-- Fitnessprofil aus Gründen der Übersichtlichkeit weggelassen --> <Profil> <id>fitnesse-integration</id> <Aktivierung> <activeByDefault>true</activeByDefault> </activation> <bauen> <Plugins> <Plugin> <artifactId>maven-antrun-plugin</artifactId> <Version>1.6</version> <Hinrichtungen> <Ausführung> <id>start-fitnesse-integration</id> <phase>integration-test</phase> <Konfiguration> <Aufgaben> <echo taskname="fitnesse" message="FitNesse starten..." /> <java classname="fitnesseMain.FitNesseMain" classpathref="maven.runtime.classpath" fork="true" failonerror="true"> <arg line="-p 8001" /> <arg line="-c FitNesse.SuiteAcceptanceTests?suite&format=text" /> <arg line="-d ." /> </java> </tasks> </configuration> <Ziele> <Ziel>laufen</Ziel> </goals> </execution> </executions> </plugin> </plugins> </build> <Abhängigkeiten> <Abhängigkeit> <groupId>org.fitnesse.plugins</groupId> <artifactId>maven-classpath-plugin</artifactId> <Version>1.6</version> <Geltungsbereich>Laufzeit</Geltungsbereich> </dependency> </dependencies> </profile> </profiles> [/sourcecode]
An der Stelle, an der ich FitNesse.SuiteAccceptanceTests eingefügt habe, sollte ein Verweis auf Ihre Acceptance Suite stehen. Die Option -c wird verwendet, um einen Befehl von der Kommandozeile aus auszuführen. Die Befehle haben das gleiche Format wie die URL, wenn Sie sie im interaktiven Modus ausführen. Daher die Option ?suite&format=text.
Jetzt werden die Integrationstests automatisch ausgeführt, wenn Sie eine mvn-Installation durchführen.
Hinweis: Wenn es sich bei Ihrer Anwendung um eine Webanwendung handelt, können Sie sie in der Testphase vor der Integration starten und in der Testphase nach der Integration wieder schließen. Der de-facto Webserver, den Sie verwenden sollten, ist Jetty, aber das würde den Rahmen dieses Blogs sprengen. Im Xebium-Projekt finden Sie ein vollständiges Beispiel für eine POM-Datei.
Der Umgang mit Maven Home
Standardmäßig sucht Maven in $HOME/.m2/ nach seiner settings.xml. Wenn Sie Ihre Einstellungen an einem anderen Ort haben, müssen Sie die Umgebungsvariable
Verfasst von

Arjan Molenaar
Contact



