Как использовать SQLite: memory: database в webpy для тестирования юнитов - PullRequest
0 голосов
/ 10 августа 2009

Я хочу использовать SQLite в памяти (": memory:") БД для тестов в моем веб-приложении. Я использую тесты носа для тестов, а webpy в качестве фреймворка.

Я хочу заполнить БД в функции setup (), а затем запустить все мои тесты. Моя проблема заключается в том, что webpy закрывает все открытые соединения с БД после каждого запроса, а SQLite: memory: DB работает только до тех пор, пока вы не закроете соединение, поэтому только первый тест на самом деле выполняется правильно, а все остальные не пройдены.

Мой выбор - запустить тесты на БД на диске или создать заново всю БД в памяти в начале каждого отдельного теста.

Знаете ли вы, как я могу запретить webpy закрывать соединения с БД после каждого запроса? Можете ли вы придумать какой-либо другой способ получить в памяти БД SQLite, которая будет работать более чем с одним запросом с использованием webpy?

Ответы [ 2 ]

2 голосов
/ 10 августа 2009

Непроверенные:

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 способом, который использует только один процесс операционной системы. Если запрос отправляется нескольким процессам, каждый из них все равно получит свою собственную базу данных.

2 голосов
/ 10 августа 2009

Возможно, вы могли бы запустить тесты на БД, хранящейся на диске, но используя RAM диск . В Windows вы можете установить драйвер для настройки RAM-диска (, некоторые инструкции здесь ). Я думаю, что в Linux вы хотите настроить tmpfs .

Оперативный диск будет действовать точно так же, как жесткий диск, но будет работать полностью из памяти, так что вы потеряете некоторые накладные расходы при загрузке файлов на / с жесткого диска.

...