van.pg

Tela Software:
van.pg
Detalhes de Software:
Versão: 2.0
Data de upload: 14 Apr 15
Revelador: Brian Sutherland
Licença: Livre
Popularidade: 5

Rating: nan/5 (Total Votes: 0)

van.pg é um módulo Python que fornece fácil criação de bancos de dados PostgreSQL (e agregados) para testes de unidade.
sujos Databases
Bancos de dados de teste levar um longo tempo para criar. Em geral, você precisa ser um pouco cuidadoso quando você decidir excluir / recriar um dispositivo elétrico do banco de dados de teste.
Além disso, parece haver nenhuma maneira robusta no PostgreSQL de descobrir se um banco de dados foi comprometida ou não.
Então van.pg não tem escolha a não ser colocar a responsabilidade sobre o que você notificá-lo quando um banco de dados está sujo. Se isso não for feito corretamente, o isolamento teste será comprometida. Não é o ideal, mas o melhor que podemos fazer.
Uma exceção é se você sempre usar o pacote de transação (http://pypi.python.org/pypi/transaction) para gerenciar banco de dados compromete. Neste caso, você pode pedir para o recurso a ser sujou sempre que uma transação seja confirmada.
Integração com testresources
A forma habitual de usar estes equipamentos é via testresources (http://pypi.python.org/pypi/testresources/):
& Nbsp; >>> from testresources importar ResourcedTestCase
& Nbsp; >>> from van.pg DatabaseManager importação
& Nbsp; >>> psycopg2 importação
& Nbsp; >>> def init_db (db):
& Nbsp; ... conn = psycopg2.connect (host = db.host, banco de dados = db.database)
& Nbsp; ... cur = conn.cursor ()
& Nbsp; ... cur.execute ("CREATE TABLE foo (bar INTEGER);")
& Nbsp; ... conn.commit ()
& Nbsp; ... conn.close ()
& Nbsp; >>> class MyTest (ResourcedTestCase):
& Nbsp; ...
& Nbsp; ... recursos = [('db', DatabaseManager (initialize_sql = init_db))]
& Nbsp; ...
& Nbsp; ... def runTest (self):
& Nbsp; ... conn = psycopg2.connect (host = self.db.host, banco de dados = self.db.database)
& Nbsp; ... cur = conn.cursor ()
& Nbsp; ... cur.execute ("INSERT INTO VALUES foo (1);")
& Nbsp; ... conn.commit ()
& Nbsp; ... cur = conn.cursor ()
& Nbsp; ... cur.execute ("SELECT * FROM foo")
& Nbsp; ... self.assertEquals (cur.fetchall (), [(1,)])
& Nbsp; ... # NOTA: deve fechar conexões ou deixar cair bancos de dados falhar
& Nbsp; ... conn.close ()
& Nbsp; ... self.db.dirtied () # mudamos a DB, por isso precisa re-loading
Na verdade executar o teste:
& Nbsp; >>> from unittest TextTestRunner importação
& Nbsp; >>> import sys
& Nbsp; >>> corredor = TextTestRunner (stream = sys.stdout)
& Nbsp; >>> runner.run (MeuTeste ()) # doctest: + ELLIPSIS
& Nbsp ;.
& Nbsp; ...
& Nbsp; OK
& Nbsp; ...
Bancos de dados usando o modelo
Se você precisar recriar o mesmo banco de dados, muitas vezes, pode ser mais rápida para deixar o banco de dados PostgreSQL copiar a partir de um banco de dados modelo. Você pode fazer isso por ter um DatabaseManager servir de modelo para o outro:
& Nbsp; >>> template_db = DatabaseManager (initialize_sql = init_db)
& Nbsp; >>> class MyTest2 (MeuTeste):
& Nbsp; ... recursos = [('db', DatabaseManager (template = template_db))]
& Nbsp; >>> runner.run (MyTest2 ()) # doctest: + ELLIPSIS
& Nbsp ;.
& Nbsp; ...
& Nbsp; OK
& Nbsp; ...
Integração transação
Se a palavra-chave argumen dirty_on_commit for True, um DatabaseManager marcará o banco de dados como sujou após cada commit bem sucedida feita através do módulo de transação. Isso significa que cada teste que suja o banco de dados não tem de notificá-la manualmente.
& Nbsp; >>> homem = DatabaseManager (dirty_on_commit = True)
Se você usar esse recurso, você precisa depender da transação (http://pypi.python.org/pypi/transaction) empacotá-se.
Usando um banco de dados existente
Por padrão, van.pg cria um novo cluster PostgreSQL em um diretório temporário e lança um daemon PostgreSQL. Isto funciona na maior parte do tempo, mas não é muito rápido.
Se você tiver um cluster do PostgreSQL já em execução, você pode dizer van.pg para usá-lo, definindo a variável de ambiente VAN_PG_HOST. Por exemplo, para executar testes de van.pg contra um servidor local com PostgreSQL é soquetes em / tmp / PGCluster fazer:
VAN_PG_HOST teste setup.py = / tmp / PGCluster python
ATENÇÃO: as bases de dados começando com test_db no banco de dados alvo são susceptíveis de ser abandonada.
Conexões fechamento
Tenha o cuidado de fechar corretamente todas as conexões ao banco de dados uma vez que seu teste é feito com ele. O PostgreSQL não permitir cair bases de dados enquanto há conexões abertas. Isto fará com que van.pg ao erro ao tentar soltar o banco de dados de teste.
criando Programatically um cluster
Em um nível mais baixo, você também pode manipular programaticamente o seu próprio cluster PostgreSQL.
Inicializar o Cluster:
& Nbsp; >>> from van.pg Cluster de importação
& Nbsp; >>> aglomerado = Cluster ()
& Nbsp; >>> cluster.initdb ()
O que cria um banco de dados em um diretório temporário:
& Nbsp; >>> import os
& Nbsp; >>> dbdir = cluster.dbdir
& Nbsp; >>> 'PG_VERSION' em os.listdir (dbdir)
& Nbsp; A verdadeira
Iniciá-lo:
& Nbsp; >>> cluster.start ()
Criar / testar um banco de dados:
& Nbsp; >>> dbname = cluster.createdb ()
Nós podemos conectar ao banco de dados:
& Nbsp; >>> psycopg2 importação
& Nbsp; >>> conn = psycopg2.connect (banco de dados = dbname, host = cluster.dbdir)
& Nbsp; >>> cur = conn.cursor ()
Giro do banco de dados para certificar-se de que podemos fazer o básico:
& Nbsp; >>> cur.execute ("CREATE TABLE x (y int)")
& Nbsp; >>> cur.execute ("INSERT INTO x VALUES (1)")
& Nbsp; >>> conn.commit ()
& Nbsp; >>> cur.execute ("SELECT * FROM x")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
Pare o daemon cluster:
& Nbsp; >>> conn.close ()
& Nbsp; >>> cluster.stop ()
Iniciá-lo novamente:
& Nbsp; >>> cluster.start ()
& Nbsp; >>> conn = psycopg2.connect (banco de dados = dbname, host = cluster.dbdir)
& Nbsp; >>> cur = conn.cursor ()
& Nbsp; >>> cur.execute ("SELECT * FROM x")
& Nbsp; >>> cur.fetchall () [0] [0]
& Nbsp; 1
E limpeza:
& Nbsp; >>> conn.close ()
& Nbsp; >>> cluster.cleanup ()
& Nbsp; >>> cluster.dbdir é None
& Nbsp; A verdadeira
& Nbsp; >>> os.path.exists (dbdir)
& Nbsp; False
Desenvolvimento
Desenvolvimento tem lugar no GitHub:
& Nbsp; http: //github.com/jinty/van.pg

O que é novo nesta versão:

  • Suporte Python 3.2.
  • 2,5 apoio Gota Python.
  • Adicionar tox.ini para testes contra várias versões do Python.
  • Run PostgreSQL como um sub-processo e não como um daemon (via pg_ctl).
  • Re-organizar o código para melhorar a reutilização e cobertura de teste.

Requisitos :

  • Python

Programas semelhantes

nose-sfd
nose-sfd

14 Apr 15

pyzombie
pyzombie

12 May 15

CppUnit
CppUnit

17 Feb 15

disable-docstring
disable-docstring

11 May 15

Outro software de desenvolvedor Brian Sutherland

wesgi
wesgi

11 May 15

Comentário para van.pg

Comentários não encontrado
Adicionar comentário
Ligue imagens!