如何在Flask应用程序中使用pytest清除/删除数据库

时间:2020-09-01 13:17:05

标签: database flask pytest

我知道这似乎是重复的,我在此主题上也找到了类似的问题,但没有一个对我真正有用。我只需要在每次测试后清除(或删除)数据库,以便每个测试都使用一个新的空数据库。

我正在使用灯具,我的代码如下:

@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还是陌生的,从我学到的知识来看,在yield之前发生的一切都像是“设置”,而在发生之后所做的一切都像是“拆解”。但是,当我运行多个测试时,每个测试的数据库都不清晰,数据库之间保存着数据。

为什么会这样?这个装置有什么问题?我想念什么?

1 个答案:

答案 0 :(得分:0)

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

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

请参见https://docs.pytest.org/en/stable/fixture.html#fixture-scopes