我知道这似乎是重复的,我在此主题上也找到了类似的问题,但没有一个对我真正有用。我只需要在每次测试后清除(或删除)数据库,以便每个测试都使用一个新的空数据库。
我正在使用灯具,我的代码如下:
@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之前发生的一切都像是“设置”,而在发生之后所做的一切都像是“拆解”。但是,当我运行多个测试时,每个测试的数据库都不清晰,数据库之间保存着数据。
为什么会这样?这个装置有什么问题?我想念什么?
答案 0 :(得分:0)
您已将范围设置为module
-这意味着仅在运行模块中的所有测试之后,才会重置灯具。
将范围设置为function
或完全保留它,因为默认为function
。
请参见https://docs.pytest.org/en/stable/fixture.html#fixture-scopes