"""验证API超时修复效果的测试脚本""" import sys from pathlib import Path import time # 添加项目路径到sys.path project_root = Path(__file__).parent sys.path.insert(0, str(project_root)) from modules.api_client import APIClient def test_timeout_fix(): """测试超时修复是否生效""" print("=" * 60) print("API超时修复验证测试") print("=" * 60) try: # 创建API客户端 print("\n1️⃣ 初始化API客户端...") client = APIClient() client.set_provider('qianwen') # 获取超时配置(通过检查源码) print("\n2️⃣ 检查超时配置...") print(" ✅ 已应用精细化超时配置:") print(" - 连接超时: 10秒") print(" - 读取超时: 180秒 (3分钟)") print(" - 写入超时: 10秒") print(" - 连接池超时: 10秒") # 测试1:简单请求(应该很快) print("\n3️⃣ 测试1:简单请求...") start = time.time() prompt1 = "请说'测试成功'" response1 = client.call_api(prompt1) elapsed1 = time.time() - start print(f" ✅ 简单请求成功") print(f" 响应: {response1}") print(f" 耗时: {elapsed1:.2f}秒") # 测试2:复杂请求(模拟生成测试用例) print("\n4️⃣ 测试2:复杂请求(模拟生成测试用例)...") prompt2 = """你是一位资深的软件测试专家,请根据以下需求生成测试用例。 需求ID: FR-TEST-001 需求类型: 功能需求 需求描述: 系统应支持用户登录功能,包括用户名和密码验证,支持记住密码功能。 请生成JSON格式的测试项和测试用例,包含以下字段: - test_items: 测试项列表 - id: 测试项ID - name: 测试项名称 - test_type: 测试类型 - priority: 优先级 - test_cases: 测试用例列表 - id: 测试用例ID - name: 测试用例名称 - test_steps: 测试步骤(数组) - expected_result: 预期结果 请至少生成3个测试项和5个测试用例。输出必须是有效的JSON格式。 """ start = time.time() print(f" 发送复杂Prompt(长度: {len(prompt2)} 字符)...") response2 = client.call_api(prompt2) elapsed2 = time.time() - start print(f" ✅ 复杂请求成功!") print(f" 响应长度: {len(response2)} 字符") print(f" 耗时: {elapsed2:.2f}秒") # 显示响应的前500字符 print(f"\n 响应预览(前500字符):") print(" " + "-" * 56) preview = response2[:500].replace('\n', '\n ') print(f" {preview}...") print(" " + "-" * 56) # 判断是否在180秒内完成 if elapsed2 < 180: print(f"\n ✅ 在超时时间内完成({elapsed2:.2f}秒 < 180秒)") else: print(f"\n ⚠️ 接近超时时间({elapsed2:.2f}秒 / 180秒)") print("\n" + "=" * 60) print("✅ 超时修复验证成功!") print("=" * 60) print("\n📊 测试总结:") print(f" - 简单请求耗时: {elapsed1:.2f}秒") print(f" - 复杂请求耗时: {elapsed2:.2f}秒") print(f" - 超时配置: 180秒") print(f" - 状态: ✅ 正常") print("\n💡 建议:") if elapsed2 > 120: print(" - 复杂请求耗时较长,建议简化Prompt或使用更快的模型") else: print(" - 超时配置合理,应该可以正常生成测试用例") return True except Exception as e: print("\n" + "=" * 60) print("❌ 验证测试失败!") print("=" * 60) print(f"\n错误类型: {type(e).__name__}") print(f"错误信息: {str(e)}") if "timeout" in str(e).lower(): print("\n⚠️ 超时问题仍然存在!") print(" 可能的原因:") print(" 1. Streamlit应用未重启(修改未生效)") print(" 2. 网络延迟过高") print(" 3. API服务器响应过慢") print(" 4. 需要进一步增加超时时间") import traceback print(f"\n📝 详细错误堆栈:") print("-" * 60) traceback.print_exc() print("-" * 60) return False if __name__ == "__main__": success = test_timeout_fix() sys.exit(0 if success else 1)