【发布时间】:2021-01-09 16:27:07
【问题描述】:
当我使用 SQLite 作为测试数据库时,以下测试运行良好。但是,该应用程序现在需要 Postgresql,这会“导致”测试挂起。在运行时,当我通过select * from pg_stat_activity 进行检查时,teardown 或 db.drop_all() 进程正在尝试删除表(有些已被删除),而 test_login_logout 中的第二个查询仍在运行。
如果我删除db.drop_all(),测试运行良好,但显然数据库没有被清除。我究竟做错了什么?谢谢!
@pytest.fixture(scope='module')
def test_client():
app = create_app('testing')
with app.test_client() as testing_client:
with app.app_context():
yield testing_client
@pytest.fixture(scope='module')
def init_database(test_client):
db.create_all()
admin_role = Role(name='admin')
db.session.add(admin_role)
user = User(username='testuser', password='password', role=admin_role)
db.session.add(user)
db.session.commit()
yield
db.drop_all()
class TestPublic:
def test_login_logout(self, test_client, init_database):
response = test_client.post('/login', data=dict(
username='testuser', password='password'), follow_redirects=True)
assert response.status_code == 200
assert b"Login successful." in response.data
response = test_client.post('/login', data=dict(
username='x', password='x'), follow_redirects=True)
assert response.status_code == 200
assert b"Invalid username or password." in response.data
response = test_client.get('/logout', follow_redirects=True)
assert response.status_code == 200
assert b"You have been logged out." in response.data
【问题讨论】:
标签: python postgresql flask pytest