优化交互式测试验证脚本,针对场景4修改提示词以及代码
This commit is contained in:
87
tools/test_validate/modules/interactive_test.py
Normal file
87
tools/test_validate/modules/interactive_test.py
Normal file
@@ -0,0 +1,87 @@
|
||||
import os
|
||||
import json
|
||||
import logging
|
||||
from .api_client import APIClient
|
||||
from .visualizer import generate_visualization, sanitize_filename
|
||||
|
||||
# 配置日志
|
||||
logging.basicConfig(level=logging.INFO, format='%(message)s')
|
||||
|
||||
def run_interactive_test():
|
||||
client = APIClient()
|
||||
print("\n🚀 进入交互式测试模式 (输入 'exit' 或 'q' 退出)")
|
||||
|
||||
while True:
|
||||
try:
|
||||
prompt = input("\n请输入测试指令: ").strip()
|
||||
if prompt.lower() in ['exit', 'q']:
|
||||
break
|
||||
if not prompt:
|
||||
continue
|
||||
|
||||
print("⏳ 正在请求后端 API...")
|
||||
result = client.send_request(prompt)
|
||||
|
||||
if result['success']:
|
||||
print(f"✅ 请求成功 (耗时: {result['latency']:.2f}s)")
|
||||
|
||||
# 创建输出目录
|
||||
sanitized_name = sanitize_filename(prompt)
|
||||
output_dir = os.path.join(
|
||||
os.path.dirname(os.path.dirname(__file__)),
|
||||
"validation",
|
||||
"temporary",
|
||||
sanitized_name
|
||||
)
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
# 保存 JSON
|
||||
json_path = os.path.join(output_dir, "response.json")
|
||||
with open(json_path, 'w', encoding='utf-8') as f:
|
||||
json.dump(result['data'], f, indent=2, ensure_ascii=False)
|
||||
|
||||
# 保存日志
|
||||
log_path = os.path.join(output_dir, "process.log")
|
||||
with open(log_path, 'w', encoding='utf-8') as f:
|
||||
f.write(f"Prompt: {prompt}\n")
|
||||
f.write(f"Status: {result['http_status']}\n")
|
||||
f.write(f"Latency: {result['latency']}\n")
|
||||
f.write(f"Response: {json.dumps(result['data'], ensure_ascii=False)}\n")
|
||||
|
||||
# 生成图片
|
||||
if result['data'] and 'root' in result['data']:
|
||||
png_path = os.path.join(output_dir, "plan.png")
|
||||
if generate_visualization(result['data']['root'], png_path):
|
||||
print(f"🖼️ 可视化图已生成: {png_path}")
|
||||
else:
|
||||
print("⚠️ 可视化生成失败")
|
||||
|
||||
print(f"📂 结果已保存至: {output_dir}")
|
||||
else:
|
||||
print(f"❌ 请求失败: {result['error']}")
|
||||
|
||||
# 即使失败也保存日志,以便排查
|
||||
sanitized_name = sanitize_filename(prompt)
|
||||
output_dir = os.path.join(
|
||||
os.path.dirname(os.path.dirname(__file__)),
|
||||
"validation",
|
||||
"temporary",
|
||||
sanitized_name
|
||||
)
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
log_path = os.path.join(output_dir, "process.log")
|
||||
with open(log_path, 'w', encoding='utf-8') as f:
|
||||
f.write(f"Prompt: {prompt}\n")
|
||||
f.write(f"Status: {result['http_status']}\n")
|
||||
f.write(f"Latency: {result['latency']}\n")
|
||||
f.write(f"Error: {result['error']}\n")
|
||||
# 如果有部分数据,也记录下来
|
||||
if result['data']:
|
||||
f.write(f"Partial Response: {json.dumps(result['data'], ensure_ascii=False)}\n")
|
||||
print(f"⚠️ 错误日志已保存至: {log_path}")
|
||||
|
||||
except KeyboardInterrupt:
|
||||
print("\n已取消")
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user