van.pg

Screenshot der Software:
van.pg
Softwarebeschreibung:
Version: 2.0
Upload-Datum: 14 Apr 15
Entwickler: Brian Sutherland
Lizenz: Frei
Popularität: 5

Rating: nan/5 (Total Votes: 0)

van.pg ist ein Python-Modul, das die einfache Erstellung von PostgreSQL-Datenbanken (und Cluster) für Unit-Tests zur Verfügung stellt.
Dirty Datenbanken
Testdatenbanken eine lange Zeit zu erstellen. In der Regel müssen Sie ein wenig vorsichtig, wenn Sie sich entscheiden, zu löschen / neu eine Testdatenbank Befestigung.
Auch scheint es keine stabile Weise in PostgreSQL, herauszufinden, ob eine Datenbank haben wir begangen oder nicht.
So hat van.pg keine Wahl, als die Verantwortung auf die Sie setzen, um sie zu benachrichtigen, wenn eine Datenbank ist verschmutzt. Wenn dies nicht richtig gemacht, wird Test Isolierung beeinträchtigt werden. Es ist nicht ideal, aber das Beste, was wir tun können.
Eine Ausnahme ist, wenn Sie konsequent die Transaktion Paket (http://pypi.python.org/pypi/transaction) zu verwalten Datenbank-Commits. In diesem Fall müssen Sie für die Ressource an ist zu verschmutzt, wenn eine Transaktion festgeschrieben werden.
Die Integration mit testresources
Der typische Weg, um diese Vorrichtungen zu verwenden ist über testresources (http://pypi.python.org/pypi/testresources/):
& Nbsp; >>> von testresources importieren ResourcedTestCase
& Nbsp; >>> von van.pg Importdatabase
& Nbsp; >>> import psycopg2
& Nbsp; >>> def INIT_DB (db):
& Nbsp; ... conn = psycopg2.connect (host = db.host, Datenbank = db.database)
& Nbsp; ... cur = conn.cursor ()
& Nbsp; ... cur.execute ("CREATE TABLE foo (bar INTEGER);")
& Nbsp; ... conn.commit ()
& Nbsp; ... conn.close ()
& Nbsp; >>> Klasse MyTest (ResourcedTestCase):
& Nbsp; ...
& Nbsp; ... Ressourcen = [('db', Database (initialize_sql = INIT_DB))]
& Nbsp; ...
& Nbsp; ... def runTest (Selbst-):
& Nbsp; ... conn = psycopg2.connect (host = self.db.host, Datenbank = self.db.database)
& Nbsp; ... cur = conn.cursor ()
& Nbsp; ... cur.execute ("INTO foo Werte einfügen (1);")
& Nbsp; ... conn.commit ()
& Nbsp; ... cur = conn.cursor ()
& Nbsp; ... cur.execute ("SELECT * FROM foo")
& Nbsp; ... self.assertEquals (cur.fetchall (), [(1)])
& Nbsp; ... # HINWEIS: muss Verbindungen zu schließen oder Löschen von Datenbanken ausfällt
& Nbsp; ... conn.close ()
& Nbsp; ... self.db.dirtied () # änderten wir den DB, so muss es Nachladen
Tatsächlich führen Sie den Test:
& Nbsp; >>> von unittest Import TextTestRunner
& Nbsp; >>> import sys
& Nbsp; >>> Läufer = TextTestRunner (Strom = sys.stdout)
& Nbsp; >>> runner.run (MyTest ()) # doctest: + ELLIPSIS
& Nbsp ;.
& Nbsp; ...
& Nbsp; OK
& Nbsp; ...
Mit Vorlagendatenbanken
Wenn Sie die gleiche Datenbank oft erstellen müssen, ist es schneller sein kann PostgreSQL kopieren Sie die Datenbank aus einer Vorlagendatenbank zu lassen. Sie können dies tun, indem er ein Database als Vorlage für die anderen zu dienen:
& Nbsp; >>> template_db = Database (initialize_sql = INIT_DB)
& Nbsp; >>> Klasse MyTest2 (MyTest):
& Nbsp; ... Ressourcen = [('db', Database (template = template_db))]
& Nbsp; >>> runner.run (MyTest2 ()) # doctest: + ELLIPSIS
& Nbsp ;.
& Nbsp; ...
& Nbsp; OK
& Nbsp; ...
Transaktion Integration
Wenn das Schlüsselwort argumen dirty_on_commit True ist, wird ein Databasemanager die Datenbank markieren, wie verschmutzt nach jedem erfolgreich durch das Transaktionsmodul hergestellt Commit. Das bedeutet, jeder Test, der die Datenbank verschmutzt muss nicht manuell benachrichtigen sie.
& Nbsp; >>> Mann = Database (dirty_on_commit = True)
Wenn Sie diese Funktion verwenden, müssen Sie bei der Transaktion (http://pypi.python.org/pypi/transaction) verpacken Sie sich ab.
Vorhandene Datenbank
Standardmäßig erstellt van.pg eine neue PostgreSQL Cluster in ein temporäres Verzeichnis und startet eine PostgreSQL-Dämon. Dieses arbeitet die meiste Zeit, ist aber nicht sehr schnell.
Wenn Sie einen bereits laufenden PostgreSQL Cluster haben, kann Ihnen sagen, es van.pg, indem Sie die Umgebungsvariable VAN_PG_HOST verwenden. Zum Beispiel, um van.pg die Tests gegen eine lokale PostgreSQL-Server laufen mit seinem Sockel in / tmp / pgcluster tun:
VAN_PG_HOST = / tmp / pgcluster python setup.py Test
ACHTUNG: alle Datenbanken mit TEST_DB in der Zieldatenbank werden voraussichtlich fallen gelassen werden.
Schließen von Verbindungen
Achten Sie darauf, alle Verbindungen richtig schließen an die Datenbank, sobald Ihr Test wird mit ihr geschehen. PostgreSQL nicht erlaubt Löschen von Datenbanken während es gibt offene Verbindungen. Dies führt dazu, van.pg für Fehler beim Versuch, die Testdatenbank fallen.
Programatically schaffen ein Cluster
Auf einem niedrigeren Niveau, können Sie auch programmgesteuert bearbeiten Sie Ihre eigenen PostgreSQL Cluster.
Initialisieren Sie den Cluster:
& Nbsp; >>> von van.pg Import Cluster
& Nbsp; >>> Cluster = Cluster ()
& Nbsp; >>> cluster.initdb ()
Welche erstellt eine Datenbank in einem temporären Verzeichnis:
& Nbsp; >>> import os
& Nbsp; >>> dbdir = cluster.dbdir
& Nbsp; >>> 'pg_version' in os.listdir (dbdir)
& Nbsp; Wahr
Starten Sie es:
& Nbsp; >>> cluster.start ()
Erstellen / Testen einer Datenbank:
& Nbsp; >>> dbname = cluster.createdb ()
Wir können mit der Datenbank verbinden:
& Nbsp; >>> import psycopg2
& Nbsp; >>> conn = psycopg2.connect (Datenbank = Datenbankname, host = cluster.dbdir)
& Nbsp; >>> Aktuell = conn.cursor ()
Twiddle die Datenbank, um sicherzustellen, dass wir die Grundlagen tun können:
& Nbsp; >>> cur.execute ("CREATE TABLE-x (y int)")
& Nbsp; >>> cur.execute ("INSERT INTO x VALUES (1)")
& Nbsp; >>> conn.commit ()
& Nbsp; >>> cur.execute ("SELECT * von x")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
Stoppen Sie den Cluster-Daemon:
& Nbsp; >>> conn.close ()
& Nbsp; >>> cluster.stop ()
Starten Sie es erneut:
& Nbsp; >>> cluster.start ()
& Nbsp; >>> conn = psycopg2.connect (Datenbank = Datenbankname, host = cluster.dbdir)
& Nbsp; >>> Aktuell = conn.cursor ()
& Nbsp; >>> cur.execute ("SELECT * von x")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
Und Aufräumarbeiten:
& Nbsp; >>> conn.close ()
& Nbsp; >>> cluster.cleanup ()
& Nbsp; >>> cluster.dbdir ist None
& Nbsp; Wahr
& Nbsp; >>> os.path.exists (dbdir)
& Nbsp; Falsch
Entwicklung
Die Entwicklung erfolgt auf GitHub:
& Nbsp; http: //github.com/jinty/van.pg

Was ist neu in dieser Pressemitteilung:

  • Support Python 3.2.
  • Drop Python 2.5 zu unterstützen.
  • tox.ini hinzufügen zum Testen gegen mehrere Python-Versionen.
  • Run PostgreSQL als Unterprozess und nicht als Daemon (via pg_ctl).
  • Re-Organisation Code, um die Wiederverwendung und die Testabdeckung zu verbessern.

Anforderungen :

  • Python

Ähnliche Software

nose-kleenex
nose-kleenex

15 Apr 15

TestLink
TestLink

20 Feb 15

random_instances
random_instances

11 May 15

Andere Software von Entwickler Brian Sutherland

wesgi
wesgi

11 May 15

Kommentare zu van.pg

Kommentare nicht gefunden
Kommentar hinzufügen
Schalten Sie auf die Bilder!