Frage

Ich mag eine SQLite im Speicher verwenden ( ": memory:") DB für die Tests in meinem Webapp. Ich verwende nosetests für die Tests und webpy als Rahmen.

Ich will die DB im Setup () Funktion füllen, und dann alle meine Tests ausführen. Mein Problem ist, dass webpy alle offenen DB-Verbindungen nach jeder Anfrage wird geschlossen, und die SQLite: Speicher:. DB dauert nur, bis Sie die Verbindung zu schließen, so dass nur der erste Test ausgeführt wird tatsächlich richtig und alle anderen versagen

sind meine Entscheidungen entweder die Tests auf einem Datenträger gesichert DB, laufen oder die gesamte DB im Speicher zu Beginn eines jeden einzelnen Tests neu zu erstellen.

Wissen Sie, wie kann ich webpy von Schließung DB-Verbindungen nach jeder Anforderung verhindern? Können Sie sich auf andere Weise denken eine im Speicher SQLite DB zu erhalten, die für mehr als eine Anforderung mit webpy dauert?

War es hilfreich?

Lösung

Vielleicht auf der Platte gespeichert Sie können die Tests auf einer DB laufen, aber unter Verwendung eines RAM-Disk . In Windows können Sie einen Treiber installieren Sie eine RAM-Disk einrichten ( einige Anweisungen hier ). In Linux, ich glaube, Sie tmpfs einrichten möchten.

Ein RAM-Disk wirkt genau wie eine Festplatte, wird aber vollständig aus dem Gedächtnis arbeiten, so dass Sie einige des Aufwand für das Laden von Dateien zu / von der Festplatte verlieren.

Andere Tipps

Nicht getestet:

class NoCloseDB(web.db.SqliteDB):
  def _unload_context(self):
    pass # this keeps the _ctx.db attribute alive
web.db.register_database('sqlite',NoCloseDB) # overrides the previous registration

Beachten Sie, dass dies nur funktionieren, wenn Sie web.py in einer Art und Weise ausgeführt werden, dass nur ein Betriebssystem-Prozess verwendet. Wenn eine Anforderung über mehrere Prozesse versandt wird, wird jeder noch eine eigene Datenbank erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top