van.pg

Software screenshot:
van.pg
Software informatie:
Versie: 2.0
Upload datum: 14 Apr 15
Ontwikkelaar: Brian Sutherland
Licentie: Gratis
Populariteit: 5

Rating: nan/5 (Total Votes: 0)

van.pg is een Python module die het eenvoudig creëren van PostgreSQL databases (en clusters) voorziet unit testing.
Dirty Databases
Test databases neem een ​​lange tijd te creëren. In het algemeen moet je een beetje voorzichtig te zijn wanneer u besluit om te verwijderen / opnieuw een test-database armatuur.
Ook lijkt er geen robuuste manier in PostgreSQL van het uitzoeken als er een database is vastbesloten om zijn of niet.
Dus van.pg heeft geen andere keuze dan de verantwoordelijkheid over de door u te plaatsen om het te melden wanneer een database is vuil. Als dit niet goed gebeurt, zal testen isolatie worden aangetast. Het is niet ideaal, maar het beste wat we kunnen doen.
Een uitzondering is als je consequent gebruik maken van de transactie pakket (http://pypi.python.org/pypi/transaction) te beheren databank begaat. In dit geval kunt u vragen om de bron te worden bevuild wanneer een transactie wordt gepleegd.
Integratie met testresources
De typische manier om deze armaturen te gebruiken is via testresources (http://pypi.python.org/pypi/testresources/):
& Nbsp; >>> van testresources importeren ResourcedTestCase
& Nbsp; >>> van van.pg import DatabaseManager
& Nbsp; >>> import psycopg2
& Nbsp; >>> def init_db (db):
& Nbsp; ... conn = psycopg2.connect (host = db.host, database = 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; ... hulpbronnen = [('db', DatabaseManager (initialize_sql = init_db))]
& Nbsp; ...
& Nbsp; ... def runtest (zelf):
& Nbsp; ... conn = psycopg2.connect (host = self.db.host, database = self.db.database)
& Nbsp; ... cur = conn.cursor ()
& Nbsp; ... cur.execute ("INSERT INTO foo WAARDEN (1);")
& Nbsp; ... conn.commit ()
& Nbsp; ... cur = conn.cursor ()
& Nbsp; ... cur.execute ("SELECT * FROM foo")
& Nbsp; ... self.assertEquals (cur.fetchall (), [(1)])
& Nbsp; ... # LET OP: moet verbindingen te sluiten of te laten vallen databases mislukt
& Nbsp; ... conn.close ()
& Nbsp; ... self.db.dirtied () # we veranderde de DB, dus het moet re-loading
In feite lopen de test:
& Nbsp; >>> van unittest import TextTestRunner
& Nbsp; >>> import sys
& Nbsp; >>> runner = TextTestRunner (stroom = sys.stdout)
& Nbsp; >>> runner.run (MyTest ()) # doctest: + Ellipsis
& Nbsp ;.
& Nbsp; ...
& Nbsp; OK
& Nbsp; ...
Met behulp van een sjabloon databases
Als u nodig hebt om dezelfde database vele malen opnieuw, kan het sneller te laten PostgreSQL kopiëren van de database van een sjabloon database. U kunt dit doen door het hebben van één DatabaseManager dienen als sjabloon voor een ander:
& Nbsp; >>> template_db = DatabaseManager (initialize_sql = init_db)
& Nbsp; >>> klasse MyTest2 (MyTest):
& Nbsp; ... hulpbronnen = [('db', DatabaseManager (template = template_db))]
& Nbsp; >>> runner.run (MyTest2 ()) # doctest: + Ellipsis
& Nbsp ;.
& Nbsp; ...
& Nbsp; OK
& Nbsp; ...
transactie integratie
Als het zoekwoord argumen dirty_on_commit Waar is, zal een DatabaseManager de database markeren als vervuild na elke succesvolle commit gemaakt door de transactie module. Dit betekent dat elke test die de database bevuilt hoeft niet handmatig te melden het.
& Nbsp; >>> man = DatabaseManager (dirty_on_commit = True)
Als u deze functie wilt gebruiken, moet u afhankelijk van de transactie (http://pypi.python.org/pypi/transaction) verpakken jezelf.
Met behulp van een bestaande database
Standaard van.pg creëert een nieuwe PostgreSQL cluster in een tijdelijke map en lanceert een PostgreSQL daemon. Dit werkt meestal, maar is niet erg snel.
Als u een reeds lopende PostgreSQL cluster, kan je vertellen van.pg om het te gebruiken bij het instellen van de omgevingsvariabele VAN_PG_HOST. Bijvoorbeeld, om tests van.pg's draaien tegen een lokale PostgreSQL server met zijn stopcontacten in / tmp / pgcluster doen:
VAN_PG_HOST = / tmp / pgcluster python setup.py-test
WAARSCHUWING: elke databases te beginnen met test_db in het doel databank zullen waarschijnlijk worden gedropt.
sluiting Aansluitingen
Wees voorzichtig om alle verbindingen goed dicht naar de database zodra uw test wordt gedaan met het. PostgreSQL is het niet mogelijk te laten vallen databases terwijl er open verbindingen. Dit zal ertoe leiden van.pg aan fout wanneer het proberen om te laten vallen van de test-database.
Programatically het creëren van een cluster
Op een lager niveau, dan kunt u ook programmatisch manipuleren uw eigen PostgreSQL cluster.
Initialiseren van de Cluster:
& Nbsp; >>> van van.pg import Cluster
& Nbsp; >>> cluster = Cluster ()
& Nbsp; >>> cluster.initdb ()
Die zorgt voor een database in een tijdelijke map:
& Nbsp; >>> import os
& Nbsp; >>> dbdir = cluster.dbdir
& Nbsp; >>> 'PG_VERSION' in os.listdir (dbdir)
& Nbsp; True
Starten:
& Nbsp; >>> cluster.start ()
Creëer / Test een database:
& Nbsp; >>> dbname = cluster.createdb ()
We kunnen verbinden met de database:
& Nbsp; >>> import psycopg2
& Nbsp; >>> conn = psycopg2.connect (database = dbname, gastheer = cluster.dbdir)
& Nbsp; >>> cur = conn.cursor ()
Twiddle de database om ervoor te zorgen kunnen we de basics te doen:
& Nbsp; >>> cur.execute ("CREATE TABLE x (y int)")
& Nbsp; >>> cur.execute ("INSERT INTO x-waarden (1)")
& Nbsp; >>> conn.commit ()
& Nbsp; >>> cur.execute ("SELECT * van x")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
Stop de cluster daemon:
& Nbsp; >>> conn.close ()
& Nbsp; >>> cluster.stop ()
Start het opnieuw:
& Nbsp; >>> cluster.start ()
& Nbsp; >>> conn = psycopg2.connect (database = dbname, gastheer = cluster.dbdir)
& Nbsp; >>> cur = conn.cursor ()
& Nbsp; >>> cur.execute ("SELECT * van x")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
En opruimen:
& Nbsp; >>> conn.close ()
& Nbsp; >>> cluster.cleanup ()
& Nbsp; >>> cluster.dbdir is None
& Nbsp; True
& Nbsp; >>> os.path.exists (dbdir)
& Nbsp; Valse
Ontwikkeling
Ontwikkeling vindt plaats op GitHub:
& Nbsp; http: //github.com/jinty/van.pg

Wat is nieuw in deze release:

  • Ondersteuning Python 3.2.
  • Drop Python 2.5 ondersteuning.
  • Voeg tox.ini voor het testen tegen meerdere python versies.
  • Uitvoeren PostgreSQL als een deelproces in plaats van als een daemon (via pg_ctl).
  • Reorganisatie code te hergebruiken en te testen dekking te verbeteren.

Eisen

  • Python

Vergelijkbare software

nose-cprof
nose-cprof

20 Feb 15

AceUnit
AceUnit

2 Jun 15

noselog
noselog

20 Feb 15

Andere software van ontwikkelaar Brian Sutherland

wesgi
wesgi

11 May 15

Reacties op van.pg

Reacties niet gevonden
Commentaar toe te voegen
Zet op de beelden!