代码拉取完成,页面将自动刷新
import unittest
import json
from app import app, db, User
class FlaskApiTestCase(unittest.TestCase):
def setUp(self):
app.config['TESTING'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
app.config['WTF_CSRF_ENABLED'] = False
self.client = app.test_client()
self.app_context = app.app_context()
self.app_context.push()
db.create_all()
# 创建测试用户
self.admin = User(username='admin', password='admin123', is_admin=True)
self.user = User(username='test', password='test123')
db.session.add_all([self.admin, self.user])
db.session.commit()
def tearDown(self):
db.session.remove()
db.drop_all()
self.app_context.pop()
def login(self, username, password):
return self.client.post('/login', data={
'username': username,
'password': password
})
def test_get_users(self):
"""测试获取用户列表"""
# 未登录时访问
response = self.client.get('/api/users')
self.assertEqual(response.status_code, 302) # 重定向到登录页面
# 普通用户登录后访问
self.login('test', 'test123')
response = self.client.get('/api/users')
self.assertEqual(response.status_code, 200)
data = json.loads(response.get_data(as_text=True))
self.assertEqual(len(data['users']), 2)
def test_get_user(self):
"""测试获取单个用户信息"""
self.login('test', 'test123')
response = self.client.get(f'/api/users/{self.user.id}')
self.assertEqual(response.status_code, 200)
data = json.loads(response.get_data(as_text=True))
self.assertEqual(data['username'], 'test')
def test_create_user(self):
"""测试创建用户"""
# 普通用户尝试创建
self.login('test', 'test123')
response = self.client.post('/api/users',
json={'username': 'new_user', 'password': 'password123'}
)
self.assertEqual(response.status_code, 403) # 权限不足
# 管理员创建用户
self.login('admin', 'admin123')
response = self.client.post('/api/users',
json={
'username': 'new_user',
'password': 'password123',
'is_admin': False
}
)
self.assertEqual(response.status_code, 201)
data = json.loads(response.get_data(as_text=True))
self.assertEqual(data['username'], 'new_user')
# 测试重复用户名
response = self.client.post('/api/users',
json={
'username': 'new_user',
'password': 'password123'
}
)
self.assertEqual(response.status_code, 400)
def test_update_user(self):
"""测试更新用户信息"""
# 管理员更新用户
self.login('admin', 'admin123')
response = self.client.put(f'/api/users/{self.user.id}',
json={
'username': 'updated_user',
'password': 'new_password'
}
)
self.assertEqual(response.status_code, 200)
data = json.loads(response.get_data(as_text=True))
self.assertEqual(data['username'], 'updated_user')
# 测试更新为已存在的用户名
response = self.client.put(f'/api/users/{self.user.id}',
json={'username': 'admin'}
)
self.assertEqual(response.status_code, 400)
def test_delete_user(self):
"""测试删除用户"""
# 普通用户尝试删除
self.login('test', 'test123')
response = self.client.delete(f'/api/users/{self.user.id}')
self.assertEqual(response.status_code, 403)
# 管理员删除用户
self.login('admin', 'admin123')
response = self.client.delete(f'/api/users/{self.user.id}')
self.assertEqual(response.status_code, 200)
# 验证用户已被删除
response = self.client.get(f'/api/users/{self.user.id}')
self.assertEqual(response.status_code, 404)
def test_invalid_requests(self):
"""测试无效请求"""
self.login('admin', 'admin123')
# 测试创建用户时缺少必要字段
response = self.client.post('/api/users',
json={'username': 'incomplete_user'}
)
self.assertEqual(response.status_code, 400)
# 测试访问不存在的用户
response = self.client.get('/api/users/999')
self.assertEqual(response.status_code, 404)
if __name__ == '__main__':
unittest.main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。