如何使用SQLite:内存:数据库在网络PY进行单元测试
-
12-09-2019 - |
题
我想用存储器(“:记忆:”)一个SQLite数据库在Web应用程序我的测试。我使用为测试nosetests,和webpy作为骨架。
我要填充数据库的建立()函数,然后运行了所有的考试。我的问题是webpy关闭所有的每个请求后开放数据库连接,和SQLite的:内存:DB只持续,直到关闭连接,所以才有了第一个测试实际上是正确运行和所有其它的失败
我的选择是要么运行备份DB磁盘上的测试中,或在每个单独的测试开始重新创建整个DB在存储器中。
你知道我怎么能防止webpy从每个请求后关闭数据库连接? 你能想到的任何其他方式获得的在内存中的SQLite数据库已经持续了超过一个请求使用webpy?
解决方案
也许你可以运行存储在磁盘上一个数据库的测试,但使用 RAM磁盘一>。在Windows中,您可以在这里安装驱动程序建立一个RAM磁盘(一些指令一>)。在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才能做到这一点。如果请求跨多个进程出动,每个人仍然会得到自己的数据库。
不隶属于 StackOverflow