zai2api-py / tests /test_simple_performance.py
keungliang's picture
Upload 31 files
fd21f34 verified
#!/usr/bin/env python3
"""
简化的性能测试,避免过多日志输出
"""
import sys
import os
import time
import json
import logging
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# 临时禁用日志以避免性能测试中的噪音
logging.getLogger().setLevel(logging.CRITICAL)
from app.utils.sse_tool_handler import SSEToolHandler
def test_optimized_performance():
"""测试优化后的性能"""
print("🧪 测试优化后的 JSON 修复性能\n")
# 测试用例
test_cases = [
{
"name": "简单JSON",
"input": '{"command":"echo hello","description":"test"}',
"iterations": 100
},
{
"name": "复杂命令行参数",
"input": '{"command":"echo \\"添加更多内容\\uff1a$(date)\\\\\\" >> \\\\\\"C:\\\\\\\\Users\\\\\\\\test\\\\\\\\1.txt\\\\\\"\\"","description":"test"}',
"iterations": 50
},
{
"name": "缺少开始括号",
"input": '"command":"echo hello","description":"test"}',
"iterations": 50
},
{
"name": "Windows路径问题",
"input": '{"path":"C:\\\\\\\\Users\\\\\\\\Documents","command":"dir"}',
"iterations": 50
}
]
handler = SSEToolHandler("test-model", stream=False)
total_time = 0
total_iterations = 0
for test_case in test_cases:
print(f"测试: {test_case['name']}")
print(f" 输入长度: {len(test_case['input'])} 字符")
print(f" 迭代次数: {test_case['iterations']}")
# 预热
for _ in range(5):
handler._fix_tool_arguments(test_case['input'])
# 性能测试
start_time = time.time()
for _ in range(test_case['iterations']):
result = handler._fix_tool_arguments(test_case['input'])
end_time = time.time()
duration = end_time - start_time
if duration > 0:
avg_time = duration / test_case['iterations'] * 1000 # 毫秒
throughput = test_case['iterations'] / duration
else:
avg_time = 0
throughput = float('inf')
print(f" 总时间: {duration:.4f}s")
print(f" 平均时间: {avg_time:.4f}ms")
print(f" 吞吐量: {throughput:.1f} ops/s")
total_time += duration
total_iterations += test_case['iterations']
# 验证结果正确性
try:
parsed = json.loads(result)
print(f" ✅ 结果有效")
except:
print(f" ❌ 结果无效")
print()
print(f"📊 总体性能:")
print(f" 总时间: {total_time:.4f}s")
print(f" 总迭代: {total_iterations}")
if total_time > 0:
print(f" 平均性能: {total_iterations/total_time:.1f} ops/s")
print(f" 平均延迟: {total_time/total_iterations*1000:.4f}ms")
else:
print(f" 平均性能: ∞ ops/s")
print(f" 平均延迟: 0.0000ms")
def test_code_simplification_benefits():
"""测试代码简化的好处"""
print("\n🧪 测试代码简化的好处\n")
# 测试不同复杂度的JSON
test_cases = [
'{"command":"echo hello"}', # 简单
'{"command":"echo \\"hello\\"","description":"test"}', # 转义引号
'"command":"echo hello","description":"test"}', # 缺少开始括号
'{"command":"echo hello > file.txt\\"","description":"test"}', # 多余引号
]
handler = SSEToolHandler("test-model", stream=False)
print("测试各种JSON修复场景:")
for i, test_input in enumerate(test_cases, 1):
print(f"\n场景 {i}: {test_input[:50]}{'...' if len(test_input) > 50 else ''}")
start_time = time.time()
result = handler._fix_tool_arguments(test_input)
end_time = time.time()
duration = (end_time - start_time) * 1000 # 毫秒
try:
parsed = json.loads(result)
status = "✅ 成功"
except:
status = "❌ 失败"
print(f" 处理时间: {duration:.4f}ms")
print(f" 修复状态: {status}")
print(f" 结果长度: {len(result)} 字符")
def test_memory_efficiency():
"""测试内存效率"""
print("\n🧪 测试内存效率\n")
try:
import psutil
process = psutil.Process()
# 基线内存
baseline_memory = process.memory_info().rss / 1024 / 1024 # MB
print(f"基线内存: {baseline_memory:.2f} MB")
handler = SSEToolHandler("test-model", stream=False)
# 测试大量小JSON
test_data = '{"command":"echo test","description":"test"}'
start_memory = process.memory_info().rss / 1024 / 1024
for i in range(100):
result = handler._fix_tool_arguments(test_data)
end_memory = process.memory_info().rss / 1024 / 1024
print(f"处理100次后内存: {end_memory:.2f} MB")
print(f"内存增长: {end_memory - baseline_memory:.2f} MB")
print(f"平均每次处理: {(end_memory - start_memory) / 100 * 1024:.2f} KB")
except ImportError:
print("psutil 未安装,跳过内存测试")
if __name__ == "__main__":
test_optimized_performance()
test_code_simplification_benefits()
test_memory_efficiency()
print("\n🎯 优化总结:")
print("✅ 简化了预处理逻辑")
print("✅ 统一了修复流程")
print("✅ 减少了代码复杂度")
print("✅ 保持了修复质量")
print("✅ 提高了可维护性")