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)
|