python中peewee和postgres的并行数据库测试

2024-05-29 03:56:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对我的数据库集成测试进行并行测试,但没有成功。我用的是切里皮,皮威,博士后和鼻子测试。在

我的基本模型(每个实体都来自于此模型):

 class BaseModel(Model):
    class Meta:
        database = manager.get_db()  # Link this to the loaded database.

我的manager类看起来像这样(manager(小写)是DbManager的单例实例):

^{pr2}$

我的基本数据库测试(补丁是指前面提到的singleton manager实例):

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()

在test top levelinit.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()

加载数据库只调用指定参数的数据库初始化,重置数据库创建必要的关系

问题是-数据是在测试之间共享的,所以当我运行并行测试时,我得到了失败的约束(这封电子邮件已经存在等等)。 我试图实现的是只在事务中使用数据(一般来说,我的目标是让测试并行运行—因此,任何其他建议都是非常受欢迎的):

  • 事务开始
  • 我把一些测试数据放到交易中
  • 测试运行(从事务处理、更新等获取数据)
  • 事务已回滚
  • 看起来我的测试从来没有发生过

最后我的问题是: 有人知道如何做到这一点吗?在


Tags: testself数据库dbdefmanagermockstart

热门问题