我想在内存中使用SQLite(“:memory:”)DB来进行webapp中的测试。我正在使用nosetests进行测试,将webpy用作框架。
我想在setup()函数中填充数据库,然后运行我的所有测试。我的问题是webpy在每个请求之后关闭所有打开的数据库连接,而SQLite:memory:DB只会持续到你关闭连接,所以只有第一个测试实际上正确运行而所有其他测试都失败了。
我的选择是在磁盘支持的数据库上运行测试,或者在每次测试开始时在内存中重新创建整个数据库。
您知道如何在每次请求后阻止webpy关闭数据库连接吗? 你能想到任何其他方法来获得内存中使用webpy持续多个请求的SQLite DB吗?
答案 0 :(得分:2)
也许您可以对存储在磁盘上的数据库运行测试,但使用RAM disk。在Windows中,您可以安装驱动程序来设置RAM磁盘(some instructions here)。在Linux中,我认为您要设置tmpfs。
ram磁盘的行为与硬盘完全相同,但它将完全从内存中运行,因此您将失去向/从硬盘加载文件的一些开销。
答案 1 :(得分: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时,此方法才有效。如果在多个进程中分派请求,则每个进程仍将获得自己的数据库。