工具助手添加
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
"""
|
||||
AI助手Web客户端测试
|
||||
测试Flask应用的各个端点
|
||||
"""
|
||||
|
||||
import unittest
|
||||
import json
|
||||
from app import app
|
||||
|
||||
|
||||
class TestWebClient(unittest.TestCase):
|
||||
"""Web客户端测试类"""
|
||||
|
||||
def setUp(self):
|
||||
"""测试前准备"""
|
||||
self.app = app
|
||||
self.app.config['TESTING'] = True
|
||||
self.client = self.app.test_client()
|
||||
|
||||
def test_index_page(self):
|
||||
"""测试主页面"""
|
||||
response = self.client.get('/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertIn(b'AI', response.data)
|
||||
|
||||
def test_health_check(self):
|
||||
"""测试健康检查端点"""
|
||||
response = self.client.get('/api/health')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
data = json.loads(response.data)
|
||||
self.assertEqual(data['code'], 200)
|
||||
self.assertEqual(data['message'], 'OK')
|
||||
self.assertIn('status', data['data'])
|
||||
self.assertEqual(data['data']['status'], 'healthy')
|
||||
|
||||
def test_get_applications(self):
|
||||
"""测试获取应用列表"""
|
||||
response = self.client.get('/api/applications')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
data = json.loads(response.data)
|
||||
self.assertEqual(data['code'], 200)
|
||||
self.assertIn('data', data)
|
||||
self.assertIsInstance(data['data'], list)
|
||||
|
||||
def test_send_message_without_content(self):
|
||||
"""测试发送空消息"""
|
||||
response = self.client.post(
|
||||
'/api/chat/send',
|
||||
data=json.dumps({
|
||||
'appId': 15,
|
||||
'message': '',
|
||||
'chatId': None,
|
||||
'stream': False
|
||||
}),
|
||||
content_type='application/json'
|
||||
)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
|
||||
data = json.loads(response.data)
|
||||
self.assertEqual(data['code'], 400)
|
||||
|
||||
def test_send_message_with_content(self):
|
||||
"""测试发送正常消息"""
|
||||
response = self.client.post(
|
||||
'/api/chat/send',
|
||||
data=json.dumps({
|
||||
'appId': 15,
|
||||
'message': '你好',
|
||||
'chatId': None,
|
||||
'stream': False
|
||||
}),
|
||||
content_type='application/json'
|
||||
)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
data = json.loads(response.data)
|
||||
self.assertEqual(data['code'], 200)
|
||||
self.assertIn('data', data)
|
||||
self.assertIn('answer', data['data'])
|
||||
|
||||
def test_cors_headers(self):
|
||||
"""测试CORS头"""
|
||||
response = self.client.get('/api/health')
|
||||
self.assertIn('Access-Control-Allow-Origin', response.headers)
|
||||
|
||||
def test_static_files(self):
|
||||
"""测试静态文件访问"""
|
||||
# 测试CSS文件
|
||||
response = self.client.get('/static/css/style.css')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# 测试JS文件
|
||||
response = self.client.get('/static/js/main.js')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
class TestAPIResponses(unittest.TestCase):
|
||||
"""API响应格式测试"""
|
||||
|
||||
def setUp(self):
|
||||
"""测试前准备"""
|
||||
self.app = app
|
||||
self.app.config['TESTING'] = True
|
||||
self.client = self.app.test_client()
|
||||
|
||||
def test_response_format(self):
|
||||
"""测试响应格式统一性"""
|
||||
response = self.client.get('/api/health')
|
||||
data = json.loads(response.data)
|
||||
|
||||
# 检查必需字段
|
||||
self.assertIn('code', data)
|
||||
self.assertIn('message', data)
|
||||
self.assertIn('data', data)
|
||||
|
||||
# 检查字段类型
|
||||
self.assertIsInstance(data['code'], int)
|
||||
self.assertIsInstance(data['message'], str)
|
||||
|
||||
def test_error_response_format(self):
|
||||
"""测试错误响应格式"""
|
||||
response = self.client.post(
|
||||
'/api/chat/send',
|
||||
data=json.dumps({'message': ''}),
|
||||
content_type='application/json'
|
||||
)
|
||||
data = json.loads(response.data)
|
||||
|
||||
# 错误响应也应该有统一格式
|
||||
self.assertIn('code', data)
|
||||
self.assertIn('message', data)
|
||||
self.assertEqual(data['code'], 400)
|
||||
|
||||
|
||||
def run_tests():
|
||||
"""运行所有测试"""
|
||||
# 创建测试套件
|
||||
loader = unittest.TestLoader()
|
||||
suite = unittest.TestSuite()
|
||||
|
||||
# 添加测试
|
||||
suite.addTests(loader.loadTestsFromTestCase(TestWebClient))
|
||||
suite.addTests(loader.loadTestsFromTestCase(TestAPIResponses))
|
||||
|
||||
# 运行测试
|
||||
runner = unittest.TextTestRunner(verbosity=2)
|
||||
result = runner.run(suite)
|
||||
|
||||
# 返回测试结果
|
||||
return result.wasSuccessful()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
success = run_tests()
|
||||
sys.exit(0 if success else 1)
|
||||
|
||||
Reference in New Issue
Block a user