gpt4 book ai didi

flask - 在 Flask 中的测试之间回滚许多事务

转载 作者:行者123 更新时间:2023-12-03 15:26:32 25 4
gpt4 key购买 nike

我的测试需要很长时间才能运行,我试图在测试之间回滚事务,而不是在测试之间删除和创建表。

问题是在某些测试中我做了多次提交。

编辑:如何在测试之间回滚事务,以便测试运行得更快

这是用于测试的基类。

import unittest
from app import create_app
from app.core import db
from test_client import TestClient, TestResponse


class TestBase(unittest.TestCase):
def setUp(self):
self.app = create_app('testing')
self.app_context = self.app.app_context()
self.app_context.push()
self.app.response_class = TestResponse
self.app.test_client_class = TestClient
db.create_all()

def tearDown(self):
db.session.remove()
db.drop_all()
db.get_engine(self.app).dispose()
self.app_context.pop()

这是我回滚事务的尝试。
class TestBase(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.app = create_app('testing')
cls.app_context = cls.app.app_context()
cls.app_context.push()
cls.app.response_class = TestResponse
cls.app.test_client_class = TestClient

db.create_all()

@classmethod
def tearDown(cls):
db.session.remove()
db.drop_all()
db.get_engine(cls.app).dispose()

def setUp(self):
self.app_content = self.app.app_context()
self.app_content.push()
db.session.begin(subtransactions=True)

def tearDown(self):
db.session.rollback()
db.session.close()

self.app_context.pop()

最佳答案

您可以使用 Session.begin_nested .只要您的所有测试都正确调用 commit关闭他们的子交易,我认为你可以简单地做

session.begin_nested()
run_test(session)
session.rollback()

在我看来,这似乎应该更快。但是,可能在某种程度上取决于您的数据库。

关于flask - 在 Flask 中的测试之间回滚许多事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26224624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com