工具助手添加

This commit is contained in:
2025-12-25 18:04:10 +08:00
parent f4bc9f6dab
commit 98081456b7
31 changed files with 4306 additions and 0 deletions
+159
View File
@@ -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)