メモリ:ユニットテストのためのウェブPYでデータベースSQLiteの使い方

StackOverflow https://stackoverflow.com/questions/1252422

質問

私のWebアプリケーションでのテストのためにDB

私は、メモリ内のSQLite(「:メモリ」)を使用します。私は、フレームワークとしてのテストのためのnosetests、およびwebpyを使用しています。

私は、セットアップ()関数内でDBを移入した後、すべての私のテストを実行したいです。私の問題はwebpyが各要求の後に開いているすべてのDB接続を閉じ、SQLiteのことです:メモリ:あなたが接続を閉じるまで、DBはこれだけ最初のテストは、実際に正しく実行され、他のすべてが失敗である、持続

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

私は、各リクエストの後にDB接続を閉じてからwebpyを防ぐことができますどのようにあなたは知っていますか? あなたはwebpyを使用して複数の要求のために持続するメモリ内のSQLite DBを取得する他の方法を考えることができますか?

役に立ちましたか?

解決

たぶん、あなたは/ <ディスクに保存されているDBでテストを実行しますが、 RAMディスクを使用できA>。 Windowsでは、<ここ(一部の命令RAMディスクを設定するためのドライバをインストールすることができます/ A>)。 Linuxでは、私はあなたが tmpfsのに設定したいと考えています。

RAMディスクが正確にハードディスクのように動作しますが、ハードディスクへ/からロードするファイルのオーバーヘッドの一部を失うことになるように、メモリから完全に動作します。

他のヒント

未テスト:

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

あなたが唯一のオペレーティングシステムプロセスを使用する方法で、web.pyを実行する場合にのみ働くことができることに注意してください。要求が複数のプロセス間で派遣されている場合は、それぞれが、まだ独自のデータベースを取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top