Ich habe einen CI-Server (Hudson), der fröhlich Unit-Tests erstellt, ausführt und in der Entwicklungsumgebung bereitstellt, aber ich möchte jetzt, dass er die Integrationstests ausführt.
Die Integrationstests treffen auf eine Datenbank und diese Datenbank wird ständig geändert, um die für den betreffenden Test relevanten Daten zu enthalten. Dies führt jedoch zu einem Problem: Wie stelle ich sicher, dass die Datenbank nicht mit Daten für einen Test bespritzt wird und dass diese Daten dann von einem zweiten Projekt überschrieben werden, bevor der erste Testsatz abgeschlossen ist?
Ich verwende derzeit die "Hoffnung" -Methode, die im Moment nicht allzu schlecht funktioniert, aber hauptsächlich aufgrund der Tatsache, dass wir nur eine kleine Anzahl von Integrationstests auf CI eingerichtet haben.
Aus meiner Sicht habe ich folgende Möglichkeiten:
Testlokale (im Speicher) Datenbanken Ich bin mir nicht sicher, ob In-Memory-Datenbanken die Unheimlichkeit von Oracles-Triggern und -Paketen usw. bewältigen, und alles andere, was ich nicht für einen lohnenden Test halte.- CI Executor-lokale Datenbanken
Es wäre ein angemessener Arbeitsaufwand erforderlich, um dies einzurichten und auf dem neuesten Stand zu halten, aber trotzig eine Option (der größte Teil der Arbeit ist bereits erledigt, um die aktuelle CI-Datenbank auf dem neuesten Stand zu halten). - Einzelner "Integrationstest" -Exekutor
Wahrscheinlich am einfachsten zu implementieren, würde aber bedeuten, dass die Integrationstests ziemlich weit zurückfallen könnten. - Sperren der Datenbank (oder einer Reihe von Tabellen)
Ich bin sicher, ich habe einige Möglichkeiten verpasst (bitte hinzufügen). Wie führen Sie datenbankbasierte Integrationstests auf dem CI-Server durch? Welche Probleme hatten Sie und welche Methode empfehlen Sie? (Hinweis: Während ich Hudson verwende, akzeptiere ich gerne Antworten für jeden CI-Server. Die Ideen sind sicher portabel, auch wenn die Details nicht zutreffen.)
Prost,
Mlk
Antworten:
Nur eine Idee, da ich dies noch nie getan habe, aber Sie könnten eine Aufgabe einrichten, um die DDL für das Datenbankschema abzurufen, gegen das Sie testen, und sie entweder im Speicher oder in einer anderen Datenbank neu erstellen. Es sieht so aus, als ob es in Oracle ziemlich einfach ist . Anschließend können Sie die neue Datenbank bei jeder Änderung automatisch generieren.
Es sieht so aus, als hätte Oracle eine In-Memory-Datenbank namens TimesTen . Es könnte sich lohnen, einen Blick darauf zu werfen. Ich würde definitiv die Verwendung einer In-Memory-Datenbank bevorzugen, wenn dies möglich ist, da diese normalerweise schneller als die Festplatte ist.
quelle
Wir führen datenbankbasierte Integrationstests durch, indem wir einen Datenbankserver aufstellen, um mit der CI-Box zu arbeiten und die CI-Instanz zu hosten. Ein bisschen wie, wie Staging und Produktion jeweils einen eigenen Datenbankserver haben.
quelle