增加接口日志输出
This commit is contained in:
@@ -340,6 +340,72 @@ class TestAITalkCallback:
|
||||
# 验证新字段存在(可能为None,因为测试环境)
|
||||
assert hasattr(call_args, 'remote_address')
|
||||
assert hasattr(call_args, 'server_ip')
|
||||
|
||||
# 验证JSON格式数据结构
|
||||
assert isinstance(call_args.request_headers, dict)
|
||||
assert isinstance(call_args.request_body, dict)
|
||||
assert 'count' in call_args.request_body
|
||||
assert 'data' in call_args.request_body
|
||||
|
||||
@patch('app.routes.get_db')
|
||||
@patch('app.routes.redis_manager')
|
||||
def test_json_format_logging(
|
||||
self,
|
||||
mock_redis_manager,
|
||||
mock_get_db,
|
||||
sample_callback_request
|
||||
):
|
||||
"""测试JSON格式日志记录功能"""
|
||||
from app.database import CallbackLog
|
||||
|
||||
# 设置模拟对象
|
||||
mock_db = AsyncMock()
|
||||
mock_get_db.return_value = mock_db
|
||||
|
||||
# 模拟Redis锁
|
||||
mock_lock = AsyncMock()
|
||||
mock_lock.__aenter__ = AsyncMock(return_value=None)
|
||||
mock_lock.__aexit__ = AsyncMock(return_value=None)
|
||||
mock_redis_manager.create_lock.return_value = mock_lock
|
||||
|
||||
# 模拟外部API调用成功
|
||||
with patch('app.routes.call_external_api_with_retry') as mock_api_call:
|
||||
mock_api_call.return_value = (True, 0)
|
||||
|
||||
response = client.post(
|
||||
"/ai-talk/callback/test-site-json/failure",
|
||||
json=sample_callback_request.model_dump()
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
|
||||
# 验证log_callback_request被调用
|
||||
assert mock_db.add.called
|
||||
|
||||
# 获取传递给add的CallbackLog对象
|
||||
call_args = mock_db.add.call_args[0][0]
|
||||
assert isinstance(call_args, CallbackLog)
|
||||
|
||||
# 验证数据结构适合JSON序列化
|
||||
import json
|
||||
|
||||
# 验证请求头可以JSON序列化
|
||||
try:
|
||||
headers_json = json.dumps(call_args.request_headers, ensure_ascii=False)
|
||||
assert isinstance(headers_json, str)
|
||||
except (TypeError, ValueError) as e:
|
||||
pytest.fail(f"请求头无法JSON序列化: {e}")
|
||||
|
||||
# 验证请求体可以JSON序列化
|
||||
try:
|
||||
body_json = json.dumps(call_args.request_body, ensure_ascii=False)
|
||||
assert isinstance(body_json, str)
|
||||
except (TypeError, ValueError) as e:
|
||||
pytest.fail(f"请求体无法JSON序列化: {e}")
|
||||
|
||||
# 验证关键字段存在
|
||||
assert call_args.site_id == "test-site-json"
|
||||
assert call_args.request_body['count'] == sample_callback_request.count
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user