我正试图对我的数据库集成测试进行并列化,但是我没有成功。我正在使用樱桃,peewee,postgres和nosetest。
我的基本模型(每个实体都来自这个):
class BaseModel(Model):
class Meta:
database = manager.get_db() # Link this to the loaded database.
我的经理类看起来像那样(经理(小写)是DbManager的单例实例)):
class DbManager(object):
db = None
def initialize_db(self):
return PooledPostgresqlExtDatabase(None, max_connections=10, threadlocals=True, register_hstore=False)
def get_db(self):
if not self.db:
self.db = self.initialize_db()
return self.db
我的基础数据库测试(修补是指前面提到的单例管理器实例):
class BaseServiceTest(unittest.TestCase):
_multiprocess_shared_ = True
def setUp(self):
self.begin_patch = patch('manager.db.begin')
self.begin_mock = self.begin_patch.start()
self.commit_patch = patch('manager.db.commit')
self.commit_mock = self.commit_patch.start()
self.rollback_patch = patch('manager.db.rollback')
self.rollback_mock = self.rollback_patch.start()
def tearDown(self):
self.rollback_patch.stop()
self.commit_patch.stop()
self.begin_patch.stop()
manager.get_db().rollback()
在测试顶级 init .py文件中我正在设置数据库:
def set_up_database():
settings = {
"host": "127.0.0.1",
"port": 5432,
"name": "product_test",
"user": "product_test",
"password": None,
'sslmode': 'disable'
}
load_db_only(settings)
reset_db_only()
load_db_only使用指定的参数调用数据库初始化,reset_db创建必要的关系
问题是 - 数据是在测试之间共享的,所以当我运行并行测试时,我会遇到失败的约束(这封电子邮件已经存在等)。 我想要实现的只是在事务中使用数据(通常我的目标是让测试并行运行 - 所以任何其他建议都非常受欢迎):
所以最后我的问题是: 有谁知道如何实现这一目标?