Kapitel 6. Fragen und Antworten

Inhaltsverzeichnis

6.1. Checkerberry test center
6.1.1. Wie kann ich die Versionsnummer einer externen Bibliothek ändern?
6.1.2. Wie konfiguriere ich die Logging-Einstellungen?
6.1.2.1. Konfiguration des Logging von Selenium
6.1.3. Welche generellen Fehlermeldungen gibt es?
6.2. Checkerberry db
6.2.1. Wie erstelle ich eine neue DTD?
6.2.2. Wie kann ich die Datenbank-Statements loggen?
6.2.3. Warum bekomme ich bei einem Datenbank-Dump einen OutOfMemoryError?
6.2.4. Meine Testdatei ist da, wird aber nicht gefunden?
6.2.5. Meine inkludierten Testdaten (LOCATION=RELATIVE) werden nicht gefunden?
6.2.6. Wie wird die Verbindung zwischen Datenbank und erwarteten Daten hergestellt?
6.2.7. Warum liest checkerberry db nicht die korrekten Werte aus der Datenbank?
6.2.8. Was sind Lookup-Keys?
6.2.9. Muss ich immer eine DTD für die Testdaten verwenden?
6.2.10. Warum bekomme ich die Fehlermeldung trotz korrekter Testdaten?
6.2.11. Warum ändert sich die Reihenfolge der Tabellen in der DTD?
6.2.12. Welche Fehlermeldungen gibt es in checkerberry db?
6.3. Checkerberry web
6.3.1. Wie kann ich checkerberry web in Hudson integrieren?
6.3.2. Wie kann ich Portal-Anwendungen testen?
6.3.3. Warum erscheint bei clickAndWaitForPage ein Timeout?
6.3.4. Warum laufen die Tests im Internet Explorer nicht?
6.3.5. Welche Fehlermeldungen gibt es in checkerberry web?
6.3.6. Warum Selenium RC als Default-Fernsteuerung?
6.3.7. Kann ich mein Modelle für Selenium RC und WebDriver verwenden?

6.1. Checkerberry test center

6.1.1. Wie kann ich die Versionsnummer einer externen Bibliothek ändern?

Die Versionsangaben in den Maven-Konfigurationen des checkerberry test centers beziehen sich nie auf feste Versionen, sondern geben immer die empfohlene Versionsnummer an. Wird das checkerberry test center in ein Maven-Projekt des Kunden eingebunden, können die Versionsnummern einfach in der Maven-Konfiguration überschrieben werden. Maven richtet sich bei der Auswahl der Versionsnummer an der Entfernung zum Wurzelprojekt, welches in diesem Beispiel das Kundenprojekt ist. Das bedeutet, dass die Definition der Versionen in den pom.xml Dateien des Kundenprojekts (Distanz 1) eine höhere Priorität haben, als die Versionen des checkerberry test center (Distanz 2). Dies liegt daran, dass die Maven-Konfigurationen des checkerberry test centers in dem Kundenprojekt lediglich referenziert werden.

Neben dem Standardverfahren von Maven zur Ermittlung der besten Version kann für jede externe Bibliothek die verwendete Versionsnummer geändert werden. Für alle externen Bibliotheken existiert eine Property, die den Wert der Version enthält. Das Property kann durch eine Konfiguration in der settings.xml überschrieben werden. Folgendes Code-Beispiel beschreibt die erforderliche Konfiguration der settings.xml.

Beispiel 6.1. Änderung einer Versionsnummer in der settings.xml

<profiles>
  <profile>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <org.dbunit.checkerberry.version>2.4.7</org.dbunit.checkerberry.version>
    </properties>
  </profile>
</profiles>


Um ein Property in der settings.xml zu setzen, muss ein neues Profil angelegt werden. In dem angegebenen Code-Beispiel wird das Profil standardmäßig aktiviert (<activeByDefault>true</activeByDefault>). Dann wird die Versionsnummer von DbUnit auf den Wert 2.4.7 gesetzt. Diese Einstellung führt dazu, dass der in dem checkerberry test center konfigurierte Wert überschrieben wird.

Es ist darauf zu achten, dass die settings.xml immer dem aktuellen Benutzer zugeordnet ist. Daher muss diese Einstellung bei allen Nutzern angepasst werden. Dies betrifft insbesondere auch die Benutzer, unter deren Namen die Continuous Integration Systeme gestartet werden.

6.1.2. Wie konfiguriere ich die Logging-Einstellungen?

Das checkerberry test center verwendet slf4j [slf4j Homepage, 2013] als Logging-Api. Dadurch kann der Benutzer durch eine Bindung (z.B. slf4j-log4j12-1.7.5.jar) die konkrete Implementierung des Logging Frameworks wählen, z.B. Log4j [Log4j Homepage, 2010]. Das folgende Code-Beispiel enthält eine mögliche Konfiguration in Form einer log4j.properties Datei.

Beispiel 6.2. log4j.properties

log4j.rootLogger=INFO, MyConsApp, MyFileApp
log4j.appender.MyConsApp=org.apache.log4j.ConsoleAppender
log4j.appender.MyConsApp.layout=org.apache.log4j.PatternLayout
log4j.appender.MyConsApp.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c:
%m%n

log4j.appender.MyFileApp=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MyFileApp.datePattern='.'yyyy-MM-dd_HH-mm
log4j.appender.MyFileApp.file=checkerberry.log
log4j.appender.MyFileApp.layout=org.apache.log4j.PatternLayout
log4j.appender.MyFileApp.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c:
%m%n

log4j.logger.de.conceptpeople=DEBUG


Das Code-Beispiel enthält eine mögliche log4j-Konfiguration. Die Konfiguration aktiviert einen Appender, der die Ausgabe auf die Konsole steuert (MyConsApp). Des Weiteren wird ein Appender definiert, der Log-Informationen in die Datei checkerberry.log schreibt (MyFileApp).

Über den rootLogger wird der Standard-Log-Level definiert, der bei der Logging-Ausgabe berücksichtigt wird. In dem Beispiel werden nur Logging-Ausgaben auf INFO-Level und darüber ausgegeben. Als Ausnahme wird für alle Packages, die mit de.conceptpeople beginnen, der Log-Level auf DEBUG gesetzt.

Eine detaillierte Auflistung der Konfigurationsmöglichkeiten ist auf der Log4j-Homepage vorhanden.

6.1.2.1. Konfiguration des Logging von Selenium

Selenium verwendet die Java Logging API. Die Konfigurationsdatei von der der Java Logging API liegt unter JAVA_HOME/jre/lib. Um eine andere Konfiguration zu verwenden kann die Datei über das Property java.util.logging.config.file angegeben werden. Der entsprechende Aufruf mit Maven wäre:

Beispiel 6.3. Maven Aufruf mit Angabe einer alternativen logging.properties

mvn clean install -Djava.util.logging.conf.file=C:\settings\logging.properties


Ein Konfigurationsbeispiel für die Datei logging.properties ist in Beispiel 6.4, „logging.properties“ angegeben.

Beispiel 6.4. logging.properties

handlers=java.util.logging.ConsoleHandler

# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level=INFO
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter


6.1.3. Welche generellen Fehlermeldungen gibt es?

Tabelle 6.1. Fehlermeldungen des checkerberry test centers

CB-1000Das Verzeichnis 'XXX' konnte nicht erstellt werden.
Um eine Datei zu speichern, z.B. eine neue DTD, einen Datenbankdump, einen Diff-Report, o.ä., sollte ein neues Verzeichnis erstellt werden. Das Erstellen dieses Verzeichnisses ist fehlgeschlagen.
 
CB-1001Spring hat eine Exception geworfen.
Das checkerberry test center wird in Verbindung mit Spring genutzt. Diese Fehlermeldung kapselt eine Exception aus dem Springframework und tritt z.B. auf, wenn der ApplicationContext nicht geladen werden konnte.
 
CB-1002Unbekanntes Testframework. Bitte lesen sie die Dokumentation dieser Exception (entweder im Benutzerhandbuch oder im Quelltext) für weitere Hinweise zu möglichen Lösungswegen.
Das Testframework konnte nicht ermittelt werden. Wie Sie das checkerberry test center für verschiedene Testframeworks konfigurieren, können Sie unter Abschnitt 2.5.3, „Erzeugen der checkerberry db-Umgebung“ nachlesen.
 
CB-1004Unerwarteter Programmzustand. Diese Exception sollte niemals auftreten. Bitte wenden Sie sich an die ConceptPeople consulting gmbh.
Wir entschuldigen uns für die Unannehmlichkeiten. Bitte teilen Sie uns mit, dass diese Exception aufgetreten ist.
 
CB-1005Der TestConnectorCreator 'XXX' konnte nicht instanziiert werden.
Der über die TestConnectorConfiguration Annotation angegebene TestConnectorCreator konnte nicht instanziiert werden.
 
CB-1006Der Name der aktuellen Testmethode konnte nicht bestimmt werden. Bitte lesen sie die Dokumentation dieser Exception (entweder im Benutzerhandbuch oder im Quelltext) für weitere Hinweise zu möglichen Lösungswegen.

Das checkerberry test center konnte den Namen der aktuellen Testmethode nicht bestimmen. Dies hängt damit zusammen, dass einige Testframeworks den Zugriff auf den Methodennamen nur über Umwege ermöglichen. Das checkerberry test center bietet daher für unterschiedliche Frameworks jeweils passende Methoden zur Bestimmung des Namens:

  • JUnit3 erlaubt den direkten Zugriff auf den Methodennamen. Es sind keinerlei andere Methoden nötig.

  • JUnit4 bietet ab der Version 4.7 mit der @Rule-Annotation eine einfache Möglichkeit, den Methodennamen zu bestimmen. Um dem checkerberry test center dies zu ermöglichen, fügen Sie bitte folgenden Code in Ihre Testklasse ein:

    @Rule
    public MethodNameDeterminationRule rule = new MethodNameDeterminationRule();

    In den Versionen zwischen 4.0 bis 4.7 bietet JUnit4 leider keinerlei Möglichkeit, die Testmethode zu bestimmen. Es wird daher empfohlen auf das Spring-Framework zurückzugreifen (s.u.) oder auf eine aktuellere Version von JUnit umzusteigen.

  • JUnit4+Spring: Das Spring Framework stellt ebenfalls einen Mechanismus zur Verfügung, mit dem sich der Methodenname bestimmen lässt. Um diesen Weg unter JUnit4 zu nutzen, annotieren Sie Ihre Testklasse bitte folgendermassen:

    @RunWith(SpringJUnit4ClassRunner.class)
    @TestExecutionListeners({ TestMethodNameResolvingExecutionListener.class })
  • TestNG: In TestNG lässt sich die Testmethode einfach bei der Verwendung der Annotation @BeforeMethod angeben:

    @BeforeMethod
    public void setUp(Method testMethod) {
    ...
    environment.setUp(this, method);
    }

Bei jeder dieser Methoden reicht es aus, sie im abstrakten Basistestfall anzuwenden. Auf diese Weise können alle abgeleiteten Testfälle die Methode ohne Code-Duplizierung nutzen. (siehe Abschnitt 2.5.3, „Erzeugen der checkerberry db-Umgebung“)

 
CB-1007Die Testmethode 'XXX' existiert nicht.
Die Testmethode mit dem Namen XXX konnte nicht gefunden werden. Möglicherweise gibt es ein Problem mit der Einstellung des Testframeworks (siehe Abschnitt 2.5.3, „Erzeugen der checkerberry db-Umgebung“).
 
CB-1008Der Bezeichner 'XXX' enthält das XML Steuerzeichen 'YYY' und kann deshalb nicht verwendet werden.
Es wurde der String XXX für einen konfigurierbaren Bezeichner gewählt. Dieser wird in XML Dateien verwendet und darf deshalb kein XML Steuerzeichen enthalten. Bitte entfernen Sie den Substring YYY aus dem Bezeichner.
 
CB-1009Der Wert 'XXX' konnte nicht in den Typ 'YYY' konvertiert werden.
Bei der Verwendung der Validatoren werden aus String-Representationen spezielle Java-Klassen z.B. java.util.Date erzeugt. Wenn eine Zeichenkette XXX nicht in einen Typ YYY konvertiert werden konnte, wird diese Fehlermeldung erzeugt.
 
CB-1010Der Wert ''XXX'' konnte nicht in eine BCD-Darstellung konvertiert werden, da die oberen 4 Bit (''Y'') oder die unteren 4 Bit (''Z'') nicht durch eine Ziffer darstellbar sind.
Dieser Fehler tritt auf, wenn in checkerberry db die Verwendung des BCD-Formats aktiviert ist und der Wert XXX nicht im BCD-Format dargestellt werden kann. Dies ist der Fall, wenn der Wert mindestens ein Byte enthält, bei dem das obere (Y) oder untere Nibble (Z) einen Wert enthält der nicht zwischen 0 und 9 liegt. Die Werte Y und Z werden als Zahl angegeben z.B. 9 oder 11.
 
CB-1011Die BCD-Darstellung >XXX< konnte nicht in ein Byte-Array konvertiert werden, da sie ein ungültiges Zeichen (''Y'') enthält.
Dieser Fehler tritt auf, wenn ein String im BCD-Format ein ungültiges Zeichen Y enthält z.B. „X'1ö'“ und daher nicht in ein Byte-Array konvertiert werden konnte.
 
CB-1012Die BCD-Darstellung >XXX< hat eine ungültige Länge. Die Anzahl der Ziffern muss ein Vielfaches von 2 sein.
Dieser Fehler tritt auf, wenn ein String im BCD-Format mit ungültiger Länge angegeben wird z.B. „X'123'“.
 
CB-1013Die BCD-Darstellung >XXX< hat ein ungültiges Präfix. Das gültige Präfix lautet >Y<.
Dieser Fehler tritt auf, wenn ein String im BCD-Format das falsche Präfix verwendet z.B. „X123“. Das erwartete Präfix („X'“) wird in der Meldung ebenfalls angezeigt.
 
CB-1014Die BCD-Darstellung >XXX< hat ein ungültiges Suffix. Das gültige Suffix lautet >Y<.
Dieser Fehler tritt auf, wenn ein String im BCD-Format das falsche Suffix verwendet z.B. „X'123“. Das erwartete Präfix („'“) wird in der Meldung ebenfalls angezeigt.