Pergunta

Eu quero usar um SQLite na memória ( ": memória:") DB para os testes no meu webapp. Estou usando nosetests para os testes, e webpy como quadro.

Quero preencher o DB na função setup (), e depois executar todos os meus testes. Meu problema é que webpy fecha todas as conexões abertas DB após cada pedido, eo SQLite: memória:. DB só dura até que você fechar a ligação, portanto, apenas o primeiro teste é realmente executado corretamente e todos os outros falham

As minhas escolhas são ou para executar os testes em um disco apoiado DB, ou recriar todo o DB na memória no início de cada teste individual.

Você sabe como posso evitar webpy de fechar conexões de banco de dados depois de cada pedido? Você pode pensar em qualquer outra forma de obter um na memória SQLite DB que dura mais de uma solicitação usando webpy?

Foi útil?

Solução

Talvez você possa executar os testes em um DB armazenados no disco, mas usando um RAM disco . No Windows, você pode instalar um driver para configurar um disco RAM ( algumas instruções aqui ). No Linux, eu acredito que você deseja configurar tmpfs .

Um disco de RAM vai agir exatamente como um disco rígido, mas vai operar completamente de memória, de modo que você vai perder alguma da sobrecarga de carregamento de arquivos de / para o disco rígido.

Outras dicas

Não testado:

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

Observe que isso só pode funcionar se você executar web.py de uma forma que usa apenas processo de um sistema operacional. Se um pedido é enviado através de múltiplos processos, cada um ainda vai ter o seu próprio banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top