Debuggen
Der Zweck der Tests ist herauszufinden, wann etwas kaputtgeht. Unvermeidlich führen Änderungen am System dazu, dass ein Test fehlschlägt – und dann muss der Test debuggt werden.
Zuerst empfiehlt es sich immer, im Debug-Modus zu arbeiten. Dazu kompilieren Sie das System mit dem Befehl make debug. Zweitens sollten Sie nur den fehlschlagenden Test ausführen. Dazu übergeben Sie den Dateinamen des fehlschlagenden Tests als Kommandozeilenparameter an die Testsuite (z. B. build/debug/test/unittest test/sql/projection/test_simple_projection.test). Weitere Optionen, um nur eine Teilmenge der Tests auszuführen, finden Sie im Abschnitt Festlegen, welche Tests ausgeführt werden.
Anschließend können Sie einen Debugger an das Programm anhängen und den Test debuggen. In den sqllogictests ist es normalerweise schwierig, an einer bestimmten Abfrage anzuhalten. Die Testsuite wurde jedoch so erweitert, dass für jede ausgeführte Abfrage eine Funktion namens query_break mit der Zeilennummer line als Parameter aufgerufen wird. Damit können Sie einen bedingten Haltepunkt auf eine bestimmte Abfrage setzen. Wenn wir zum Beispiel in Zeile 43 der Testdatei anhalten möchten, können wir folgenden Haltepunkt anlegen:
gdb: break query_break if line==43lldb: break s -n query_break -c line==43Sie können auch bestimmte Abfragen von der Ausführung ausnehmen, indem Sie mode skip in die Datei schreiben, gefolgt von einem optionalen mode unskip. Alle Abfragen zwischen den beiden Anweisungen werden nicht ausgeführt.
Festlegen, welche Tests ausgeführt werden
Beim Ausführen des unittest-Programms werden standardmäßig alle schnellen Tests ausgeführt. Ein bestimmter Test lässt sich ausführen, indem Sie den Namen des Tests als Argument übergeben. Bei den sqllogictests ist das der relative Pfad zur Testdatei. Um nur einen einzelnen Test auszuführen:
build/debug/test/unittest test/sql/projection/test_simple_projection.testAlle Tests in einem bestimmten Verzeichnis können ausgeführt werden, indem Sie das Verzeichnis als Parameter in eckigen Klammern angeben. Um alle Tests im Verzeichnis „projection“ auszuführen:
build/debug/test/unittest "[projection]"Alle Tests, einschließlich der langsamen Tests, können ausgeführt werden, indem Sie die Tests mit einem Sternchen starten. Um alle Tests einschließlich der langsamen Tests auszuführen:
build/debug/test/unittest "*"Eine Teilmenge der Tests können wir mit den Parametern --start-offset und --end-offset ausführen.
Um die Tests 200…250 auszuführen:
build/debug/test/unittest --start-offset=200 --end-offset=250Diese Parameter gibt es auch in Prozent. Um die Tests 10 % – 20 % auszuführen:
build/debug/test/unittest --start-offset-percentage=10 --end-offset-percentage=20Die Menge der auszuführenden Tests kann auch aus einer Datei geladen werden, die einen Testnamen pro Zeile enthält, und mit dem Befehl -f geladen werden.
cat test.listtest/sql/join/full_outer/test_full_outer_join_issue_4252.testtest/sql/join/full_outer/full_outer_join_cache.testtest/sql/join/full_outer/test_full_outer_join.testUm nur die in der Datei angegebenen Tests auszuführen:
build/debug/test/unittest -f test.list