Im nachfolgenden werden die notwendigen Konfigurationsschritte erläutert, um die Auswertung der User Stories und die Darstellung der Ergebnisse im Hudson oder als eigenständigen HTML-Report darzustellen.
Das checkerberry-atdd-maven-plugin
wird
benötigt, um die User Stories einzulesen und die darin enthaltenen
Akzeptanzkriterien (definiert durch eine Menge von Akzeptanztests) mit
den Surefire-Ergebnissen zu vergleichen. Die Resultate der Auswertung
schreibt das Maven-Plugin in die XML-Datei
acceptancetest.xml
. Auf Basis dieser Datei werden die
aufbereiteten Ergebnisse durch checkerberry business view in den Build
integriert und dargestellt.
Um eine Auswertung der User Stories vorzunehmen, ist es
erforderlich, das checkerberry-atdd-maven-plugin
mit dem Maven-Goal analyze-tests
aufzurufen. Der vollständige Name des Maven-Goals lautet
de.conceptpeople.checkerberry:checkerberry-atdd-maven-plugin:3.2.x:analyze-tests.
Das Plugin verwendet einen separaten Parser, um die Informationen
einer User Story auszulesen. Der mitgelieferte Standard-Parser liest
die Informationen aus einer Textdatei im Dateisystem (siehe Abschnitt 4.4.2, „Verwendung des Standard-Parsers“). Im Abschnitt 4.4.1, „Verwendung des Jira-UserStory-Retrievers“ wird beschrieben, wie die User
Story-Informationen aus Atlassian Jira ausgelesen werden können.
Darüber hinaus ist es auch möglich, eigene Parser zu definieren, die
unterschiedliche Formate unterstützen oder die die User
Story-Informationen aus anderen Quellen wie z.B. einer Datenbank
lesen. Nähere Information dazu finden sich in Abschnitt 4.4.3, „Eigene User Story-Parser schreiben“.
In der Konfiguration des Plugins ist die Angabe von mindestens
einem Parser Pflicht. Die Angabe der Parser erfolgt über das
<parsers>
-Tag, welches wiederum ein oder
mehrere <parser>
-Tags enthält (siehe Abschnitt 4.3.1.2, „Beispielkonfiguration“).
Damit die Status der Akzeptanztests zu den eingelesenen User
Stories auswertbar sind, müssen die Surefire-Ergebnisse richtig
eingelesen werden. Sind die Surefire-Reports wie üblich unter
target/surefire-reports
abgelegt, ist keine
zusätzliche Konfiguration notwendig. Befinden sich die
Surefire-Ergebnisse in einem abweichenden Ordner oder sind über
mehrere Ordner verteilt, kann über den optionalen Parameter
<reportDirectories>
abweichende Pfade gesetzt
werden. Um sicherzustellen, dass die Surefire-Ergebnisse beim
Auswerten der User Stories bereits vorliegen, wird das Goal analyze-tests des Plugins standardmäßig in der
Maven-Lebenszyklusphase post-integration-test
ausgeführt.
Das Encoding der Ausgabedatei
acceptancetest.xml
kann über den Parameter
<encoding>
gesetzt werden. Darüber hinaus
kann über den Parameter <outputDirectory>
bestimmt werden, wohin die Ausgabedatei geschrieben wird. In den
beiden nachfolgenden Tabellen sind die notwendigen und die optionalen
Parameter zusammengefasst.
Name | Type | Description |
---|---|---|
parsers | Parser[] | Ein oder mehrere Parser, die dazu verwendet werden, die User Stories einzulesen. |
Name | Type | Description |
---|---|---|
encoding | String | Setzt das Encoding, welches beim Schreiben der
Ausgabedatei verwendet wird. Default value is: UTF-8 |
outputDirectory | File | Pfad zu dem Ausgabeordner für die
acceptancetest.xml . Default value is: target |
reportDirectories | File[] | Pfade zu den reports Ordnern.
Default value is: target/surefire-reports |
Nachfolgend sind einige Konfigurationsbeispiele aufgeführt.
Neben den üblichen Angaben wie groupId
,
artifactId
, version
und
executions
, existieren mit
dependencies
und configuration
zwei wichtige Konfigurationsabschnitte in dem
checkerberry-atdd-maven-plugin
. Wie eingangs
erwähnt, lassen sich dem Plugin unterschiedliche Parser hinzufügen,
die das Interface UserStoryParser
implementieren.
Um dem Plugin einen Parser bekannt zu machen, muss dieser als
dependency
eingetragen werden. Erst dann ist es
möglich, den Parser über die configuration
zu
verwenden. In dem unteren Beispiel wird das
checkerberry-atdd-userstory-fileparser.jar
in der
Version 3.2.x
eingebunden. Dieses enthält die Parser-Klasse
de.conceptpeople.checkerberry.atdd.parser.UserStoryFileParser
,
welche in der Konfiguration als Parser ausgewählt wird. Über
properties
können Einstellungen an den Parser
übergeben werden, die dann beim Parsen zur Verfügung stehen.
Beispiel 4.1. Beispielkonfiguration des Maven-Plugins
<plugins> <plugin> <groupId>de.conceptpeople.checkerberry</groupId> <artifactId>checkerberry-atdd-maven-plugin</artifactId> <version>3.2.x</version> <executions> <execution> <id>analyze-tests</id> <goals> <goal>analyze-tests</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>de.conceptpeople.checkerberry</groupId> <artifactId>checkerberry-atdd-userstory-fileparser</artifactId> <version>3.2.x</version> </dependency> </dependencies> <configuration> <parsers> <parser> <parserClass> de.conceptpeople.checkerberry.atdd.parser.UserStoryFileParser </parserClass> <properties> <userStoryDirectory>src/test/resources/stories</userStoryDirectory> </properties> </parser> </parsers> </configuration> </plugin> </plugins>
Die Angaben zu einem Parser bestehen aus zwei Teilen. Mit der
parserClass
muss auf eine gültige Klasse verwiesen
werden, die das Interface UserStoryParser
implementiert. Die Angabe der properties
ist
optional. Ob und welche zusätzlichen Informationen ein Parser
benötigt, um die User Stories erfolgreich einzulesen, hängt vom
jeweiligen Parser ab. Daher ist insbesondere bei der Implementierung
eigener Parser darauf zu achten, dass notwendigen Properties für den
Benutzer transparent sind.
Sollen unterschiedliche Typen von User Stories eingelesen
werden, lassen sich innerhalb von configuration
mehrere Parser angeben. Die Parser werden während der Ausführung des
Plugins in der angegebenen Reihenfolge aufgerufen. Es ist darauf zu
achten, dass jeder verwendete Parser in den
dependencies
des Plugins bekannt gemacht wurde. Das
Beispiel zeigt schematisch das Einbinden von mehreren Parsern.
Beispiel 4.2. Einbinden mehrerer User Story Parser
... <parsers> <parser> <parserClass>...</parserClass> <properties>...</properties> </parser> <parser> <parserClass>...</parserClass> <properties>...</properties> </parser> ... </parsers> ...