1 Star 0 Fork 0

敏哥/flask-web

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
test_api.py 4.60 KB
一键复制 编辑 原始数据 按行查看 历史
敏哥 提交于 5个月前 . flask-shell
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()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/PatrickW/flask-web.git
git@gitee.com:PatrickW/flask-web.git
PatrickW
flask-web
flask-web
master

搜索帮助