130 lines
4.5 KiB
Python
130 lines
4.5 KiB
Python
"""验证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)
|