Question

Je veux utiliser une SQLite en mémoire ( « : mémoire: ») DB pour les tests dans mon webapp. J'utilise nosetests pour les tests et webpy comme cadre.

Je veux remplir la base de données dans la fonction setup (), puis exécutez tous mes tests. Mon problème est que webpy ferme toutes les connexions DB ouvertes après chaque demande, et SQLite: mémoire:. DB ne dure que jusqu'à la fermeture de la connexion, de sorte que le premier test est exécuté en fait correctement et que toutes les autres échouent

Mes choix sont soit pour exécuter les tests sur un disque soutenu DB, ou de recréer l'ensemble DB en mémoire au début de chaque test.

Savez-vous comment puis-je empêcher webpy de fermer les connexions DB après chaque demande? Pouvez-vous penser à une autre façon d'obtenir une mémoire SQLite DB qui dure plus d'une demande à l'aide webpy?

Était-ce utile?

La solution

Peut-être que vous pouvez exécuter les tests sur un DB stockés sur le disque, mais en utilisant un . Sous Windows, vous pouvez installer un pilote pour mettre en place un disque RAM ( quelques instructions ici ). Sous Linux, je crois que vous voulez mettre en place tmpfs .

Un disque de RAM va agir exactement comme un disque dur, mais fonctionnera complètement de la mémoire, de sorte que vous perdrez une partie des frais généraux de chargement des fichiers vers / à partir du disque dur.

Autres conseils

Untested:

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

Notez que cela ne peut fonctionner que si vous exécutez web.py d'une manière qui utilise un seul processus de système d'exploitation. Si une demande est envoyée sur plusieurs processus, chacun sera toujours obtenir sa propre base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top