van.pg

Screenshot Software:
van.pg
Szczegóły programowe:
Wersja: 2.0
Filmu: 14 Apr 15
Wywoływacz: Brian Sutherland
Licencja: Wolny
Popularność: 66

Rating: 5.0/5 (Total Votes: 1)

van.pg jest moduł Pythona, który zapewnia łatwe tworzenie baz danych PostgreSQL (i klastrów) dla testów jednostkowych.
Brudne Bazy danych
Bazy danych testowych zająć dużo czasu, aby stworzyć. Generalnie trzeba być trochę ostrożni, kiedy zdecydujesz się skasować / odtworzyć urządzenie bazy danych testowych.
Ponadto, nie wydaje się być solidny sposób w PostgreSQL od zastanawianie się, czy baza danych została zobowiązana do czy nie.
Więc van.pg nie ma wyboru, aby umieścić odpowiedzialność na ciebie, aby powiadomić go, gdy baza danych jest brudna. Jeśli nie zostanie to zrobione prawidłowo, izolacja Test będzie zagrożona. To nie jest idealne, ale najlepsze, co możemy zrobić.
Wyjątkiem jest jeśli konsekwentnie korzystać z pakietu transakcji (http://pypi.python.org/pypi/transaction) do zarządzania bazą danych zobowiązuje. W tym przypadku można poprosić o zasobie być zanieczyszczona, gdy transakcja zostanie zatwierdzona.
Integracja z testresources
Typowym sposobem korzystania z tych urządzeń jest poprzez testresources (http://pypi.python.org/pypi/testresources/):
& Nbsp; >>> z testresources importować ResourcedTestCase
& Nbsp; >>> z van.pg importu DatabaseManager
& Nbsp; >>> import psycopg2
& Nbsp; >>> def init_db (db):
& Nbsp; ... conn = psycopg2.connect (host = db.host, baza = db.database)
& Nbsp; ... bież = conn.cursor ()
& Nbsp; ... cur.execute ("CREATE TABLE foo (bar Integer);")
& Nbsp; ... conn.commit ()
& Nbsp; ... conn.Close ()
& Nbsp; >>> klasy MyTest (ResourcedTestCase):
& Nbsp; ...
& Nbsp; ... Zasoby = [('db', DatabaseManager (initialize_sql = init_db))]
& Nbsp; ...
& Nbsp; ... def runTest (self):
& Nbsp; ... conn = psycopg2.connect (host = self.db.host, baza = self.db.database)
& Nbsp; ... bież = conn.cursor ()
& Nbsp; ... cur.execute ("INSERT INTO VALUES foo (1);")
& Nbsp; ... conn.commit ()
& Nbsp; ... bież = conn.cursor ()
& Nbsp; ... cur.execute ("SELECT * FROM foo")
& Nbsp; ... self.assertEquals (cur.fetchall (), [(1)])
& Nbsp; ... # UWAGA: Należy zamknąć połączenia bazy danych nie powiedzie się lub upuszczenie
& Nbsp; ... conn.Close ()
& Nbsp; ... self.db.dirtied () # zmieniliśmy DB, więc potrzebuje ponownego ładowania
Właściwie uruchomić test:
& Nbsp; >>> unittest importu TextTestRunner z
& Nbsp; >>> import sys
& Nbsp; >>> biegacz = TextTestRunner (strumień = sys.stdout)
& Nbsp; >>> runner.run (MyTest ()) # doctest: + wielokropka
& Nbsp ;.
& Nbsp; ...
& Nbsp; OK
& Nbsp; ...
Bazy danych Używanie szablonów
Jeśli musisz odtworzyć tej samej bazie danych wiele razy, może to być szybciej pozwolić PostgreSQL skopiować bazę danych z bazy danych szablonu. Można to zrobić poprzez jedno DatabaseManager służyć jako szablon do drugiego:
& Nbsp; >>> template_db = DatabaseManager (initialize_sql = init_db)
& Nbsp; >>> klasy MyTest2 (MyTest):
& Nbsp; ... Zasoby = [('db', DatabaseManager (template = template_db))]
& Nbsp; >>> runner.run (MyTest2 ()) # doctest: + wielokropka
& Nbsp ;.
& Nbsp; ...
& Nbsp; OK
& Nbsp; ...
Integracja transakcji
Jeśli słowo kluczowe argumen dirty_on_commit jest prawda, DatabaseManager zaznaczy bazy danych, jak zanieczyszczona commit po każdej udanej wykonana przez moduł transakcji. Oznacza to, każdy test, który brudzi bazy nie trzeba ręcznie powiadomić go.
& Nbsp; >>> człowiek = DatabaseManager (dirty_on_commit = True)
Jeśli korzystasz z tej funkcji, musisz się zależeć od transakcji (http://pypi.python.org/pypi/transaction) pakować się.
Korzystanie z istniejącej bazy danych
Domyślnie van.pg tworzy nowy klaster PostgreSQL w katalogu tymczasowego i uruchamia demona PostgreSQL. Działa to w większości przypadków, ale nie jest zbyt szybko.
Jeśli masz już działa klaster PostgreSQL, można powiedzieć van.pg go używać, ustawiając zmienną środowiskową VAN_PG_HOST. Na przykład, aby uruchomić testy van.pg przeciwko lokalny serwer PostgreSQL z jego gniazda w / tmp / pgcluster zrobić:
VAN_PG_HOST Test setup.py = / tmp / pgcluster python
UWAGA: wszelkie bazy danych począwszy test_db w docelowej bazie danych mogą zostać pominięte.
Połączenia końcowe
Należy uważać, aby prawidłowo zamknąć wszystkie połączenia do bazy danych, gdy Twój test jest z nim zrobić. PostgreSQL nie pozwala usunięcia baz danych, gdy są otwarte połączenia. Spowoduje to van.pg błędu podczas próby usunąć bazę danych z badań.
Programowo tworzenia klastra
Na niższym poziomie, można również programowo manipulowania własną klaster PostgreSQL.
Zainicjować Cluster:
& Nbsp; >>> import z van.pg Klastra
& Nbsp; >>> klaster = Klaster ()
& Nbsp; >>> cluster.initdb ()
Który tworzy bazę danych w katalogu tymczasowego:
& Nbsp; >>> import os
& Nbsp; >>> dbdir = cluster.dbdir
& Nbsp; >>> "PG_VERSION" w os.listdir (dbdir)
& Nbsp; prawda
Zacznij go:
& Nbsp; >>> cluster.start ()
Tworzenie / Testowanie bazy danych:
& Nbsp; >>> nazwa_bd = cluster.createdb ()
Możemy połączyć się z bazą danych:
& Nbsp; >>> import psycopg2
& Nbsp; >>> conn = psycopg2.connect (baza = nazwa_bd, host = cluster.dbdir)
& Nbsp; >>> bież = conn.cursor ()
Twiddle bazy danych, aby upewnić się, co możemy zrobić, podstawy:
& Nbsp; >>> cur.execute ("CREATE TABLE x (y int)")
& Nbsp; >>> cur.execute ("INSERT INTO wartości x (1)")
& Nbsp; >>> conn.commit ()
& Nbsp; >>> cur.execute ("SELECT * od x")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
Zatrzymaj demona klastra:
& Nbsp; >>> conn.Close ()
& Nbsp; >>> cluster.stop ()
Uruchom go ponownie:
& Nbsp; >>> cluster.start ()
& Nbsp; >>> conn = psycopg2.connect (baza = nazwa_bd, host = cluster.dbdir)
& Nbsp; >>> bież = conn.cursor ()
& Nbsp; >>> cur.execute ("SELECT * od x")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
I czyszczenie:
& Nbsp; >>> conn.Close ()
& Nbsp; >>> cluster.cleanup ()
& Nbsp; >>> cluster.dbdir None
& Nbsp; prawda
& Nbsp; >>> os.path.exists (dbdir)
& Nbsp; Fałsz
Rozwoju
Rozwój odbywa się na GitHub:
& Nbsp; http: //github.com/jinty/van.pg

Co nowego w tym wydaniu:

  • Pomoc Python 3.2.
  • Spadek Python 2.5 wsparcie.
  • Dodaj tox.ini celu ich zbadania względem wielu wersjach Pythona.
  • Uruchom PostgreSQL jako podproces, a nie jako demon (poprzez pg_ctl).
  • Ponownie organizujemy kod poprawić ponownego wykorzystania i zasięg badania.

Wymagania :

  • Python

Podobne oprogramowanie

nose-regression
nose-regression

11 May 15

gprof2dot.py
gprof2dot.py

3 Jun 15

inFusion
inFusion

20 Feb 15

Inne programy z deweloperem Brian Sutherland

wesgi
wesgi

11 May 15

Komentarze do van.pg

Komentarze nie znaleziono
Dodaj komentarz
Włącz zdjęć!