0

webapp のテストに SQLite in memory (":memory:") DB を使用したいと考えています。テストにはnosetestsを使用し、フレームワークとしてwebpyを使用しています。

setup() 関数で DB にデータを入力し、すべてのテストを実行したいと考えています。私の問題は、webpy が各要求の後に開いているすべての DB 接続を閉じ、接続を閉じるまで SQLite :memory: DB しか持続しないため、最初のテストのみが実際に正しく実行され、他のすべてが失敗することです。

私の選択は、ディスクでバックアップされた DB でテストを実行するか、個々のテストの開始時にメモリ内に DB 全体を再作成するかのいずれかです。

各リクエストの後にwebpyがDB接続を閉じるのを防ぐ方法を知っていますか? webpy を使用して、複数のリクエストに対して持続するインメモリ SQLite DB を取得する他の方法を考えられますか?

4

2 に答える 2

2

おそらく、ディスクに保存された DB でテストを実行できますが、RAM ディスクを使用します。Windows では、ドライバをインストールして RAM ディスクをセットアップできます (手順はこちら)。Linux では、 tmpfsを設定したいと思います。

RAM ディスクはハードディスクとまったく同じように動作しますが、完全にメモリから動作するため、ハードディスクとの間でファイルをロードするオーバーヘッドの一部が失われます。

于 2009-08-09T22:55:36.767 に答える
2

未テスト:

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

これは、1 つのオペレーティング システム プロセスのみを使用する方法で web.py を実行する場合にのみ機能することに注意してください。リクエストが複数のプロセスにディスパッチされた場合でも、それぞれが独自のデータベースを取得します。

于 2009-08-10T00:14:33.607 に答える