优化交互式测试验证脚本,针对场景4修改提示词以及代码

This commit is contained in:
2026-01-02 16:28:58 +08:00
parent c08cdfb339
commit 6f990e645d
31 changed files with 71855 additions and 184 deletions

View 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