Wie finden Sie Änderungen in einer Tabelle relativ zu einem anfänglichen SQL-Fixture?

8

Ich habe eine Reihe von Tests, die gegen eine MySQL-Datenbank laufen, die mit Schemas und Beispieldaten aus einer Reihe von SQL-Dateien vorinstalliert ist. Einige dieser Tests erstellen während ihrer Ausführung auch neue Daten in der Datenbank.

Normalerweise sind Tests dafür verantwortlich, dass sie sich selbst bereinigen (und somit die Datenbankumgebung nicht für andere Tests verschmutzen). Es scheint jedoch, dass einige dieser Tests dies nicht vollständig tun und somit zusätzliche / geänderte Datensätze dort hinterlassen, wo sie nicht sollten.

Aufgrund des komplexen Codesatzes, der gerade getestet wird, ist es nicht möglich, eine einzelne Transaktion für den gesamten Test laufen zu lassen. Daher kann ich nicht einfach alles zurückrollen lassen (es gibt mehrere Cursor und mehrere) unter anderem replizierte DB-Server).

Ich möchte eine Möglichkeit haben, diese Tests, die die Datenbank verschmutzen, leichter zu identifizieren, aber es ist erlaubt, dass Tests in die Datenbank geschrieben werden (solange sie die Dinge danach entfernen) ), Ich kann nicht nur alle Änderungen an der DB betrachten - ich brauche nur die effektiven Änderungen, mit gelöschten Änderungen entfernt.

Ein Gedanke, den ich hatte, war, dass, wenn es eine einfache Möglichkeit gäbe, den Inhalt einer Tabelle mit einer anderen zu vergleichen, ich dies nach jedem Test tun und den Inhalt einer mit der Fixtur initialisierten Tabelle mit dem Inhalt der Tabelle vergleichen könnte nach dem Test.

    
Amber 17.09.2010, 18:28
quelle

2 Antworten

2

Einige verschiedene Vorschläge, die ich bisher über andere Kanäle erhalten habe:

  • CHECKSUM TABLE - das wäre fast perfekt für meine Bedürfnisse, außer dass es nur für MyISAM-Tabellen funktioniert (wir verwenden InnoDB).

  • SHOW TABLE STATUS - dies liefert Data_length , was als vereinfachter Vergleich funktionieren könnte. Wenn ich nichts besseres finde, könnte das genügen.

Amber 17.09.2010, 18:48
quelle
1

Vor dem Test könnten Sie alle Tabellen duplizieren (zB CREATE TABLE tmpTableA SELECT * FROM TabelleA) und dann nach den Tests mit ihnen verbinden, um zu sehen, welche neuen Zeilen die Anweisung

verwenden %Vor%

Sie können auch einen Dump der Tabelle vor den Tests machen, dann nach den Tests, und dann ein Diff auf den beiden Dumps machen.

    
Jeff Day 17.09.2010 22:35
quelle

Tags und Links