Database 如何在Flask应用程序中使用pytest清除/拆除db

Database 如何在Flask应用程序中使用pytest清除/拆除db,database,flask,pytest,Database,Flask,Pytest,我知道这看起来像是重复,我在这个话题上也发现了类似的问题,但没有一个对我有效。我只需要在每次测试后清除(或拆卸)数据库,这样每次测试都会使用一个新的空数据库 我正在使用fixture,我的代码如下所示: @pytest.fixture(scope="module", autouse=True) def test_client_db(): # set up app.config["SQLALCHEMY_DATABASE_URI"] = &q

我知道这看起来像是重复,我在这个话题上也发现了类似的问题,但没有一个对我有效。我只需要在每次测试后清除(或拆卸)数据库,这样每次测试都会使用一个新的空数据库

我正在使用fixture,我的代码如下所示:

@pytest.fixture(scope="module", autouse=True)
def test_client_db():

    # set up
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///"
    with app.app_context():
        db.init_app(app)
        db.create_all()
    testing_client = app.test_client() 
    ctx = app.app_context()
    ctx.push()

    # do the testing
    yield testing_client

    # tear down
    with app.app_context():
        db.session.remove()
        db.drop_all()

    ctx.pop()
我是pytest的新手,从我所学到的,在屈服之前的任何东西都是一种“设置”,在屈服之后的任何东西都是“拆卸”。然而,当我运行几个测试时,每个测试的数据库并不清晰,它在它们之间保存数据


为什么会这样?这个固定装置怎么了?我遗漏了什么?

您已将范围设置为
模块
-这意味着只有在模块中的所有测试运行后,才会重置夹具

将范围设置为
function
或完全保留,因为
function
是默认值


请参见

您有一个模块级夹具,这意味着在每个测试模块中只执行一次拆卸。如果你想在每次测试后使用函数作用域(如果你没有设置作用域,这是默认值)。哦,谢谢。它起作用了!