0

我想在我的 webapp 中使用内存中的 SQLite (":memory:") DB 进行测试。我使用nosetests 进行测试,并使用webpy 作为框架。

我想在 setup() 函数中填充数据库,然后运行我所有的测试。我的问题是 webpy 会在每次请求后关闭所有打开的数据库连接,并且 SQLite :memory: DB 只会持续到您关闭连接,所以只有第一个测试实际运行正确,而其他所有测试都失败了。

我的选择是在磁盘支持的数据库上运行测试,或者在每个单独测试开始时在内存中重新创建整个数据库。

您知道如何防止 webpy 在每次请求后关闭数据库连接吗?你能想出任何其他方法来获得一个使用 webpy 持续多个请求的内存 SQLite DB 吗?

4

2 回答 2

2

也许您可以在存储在磁盘上的数据库上运行测试,但使用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

请注意,这只有在您以仅使用一个操作系统进程的方式运行 web.py 时才有效。如果一个请求跨多个进程分派,每个进程仍将获得自己的数据库。

于 2009-08-10T00:14:33.607 回答