feat: 增强测试框架功能
Some checks failed
AI Web Tester CI / test (push) Has been cancelled

主要改进:
- 新增统一测试器 (universal_tester.py) 支持多种测试模式
- 优化测试报告生成器,支持汇总报告和操作截图
- 增强探索器 DFS 算法和状态指纹识别
- 新增智能测试配置 (smart_test.yaml)
- 改进 AI 模型集成 (GLM/Gemini 支持)
- 添加开发调试工具和文档
This commit is contained in:
empty
2026-01-05 20:23:02 +08:00
parent 3447ea340a
commit 1f1cc4db9a
31 changed files with 4631 additions and 770 deletions

149
tests/auto_test.py Normal file
View File

@@ -0,0 +1,149 @@
#!/usr/bin/env python3
"""
零配置智能测试 - 无需预先了解系统功能
"""
import sys
sys.path.insert(0, ".")
from src import WebTester
def auto_discover_and_test(url: str, model: str = "glm", headless: bool = False):
"""
自动发现并测试系统功能
适合完全未知的系统
"""
print("=" * 60)
print("🤖 零配置智能测试")
print("=" * 60)
print(f"🌐 目标URL: {url}")
print(f"🤖 AI模型: {model}")
print(f"🖥️ 无头模式: {'' if headless else ''}")
print("-" * 60)
tester = WebTester(model=model, headless=headless)
try:
# 启动并导航
tester.start()
tester.goto(url)
# 步骤1: 智能登录(如果需要)
print("\n📝 步骤1: 检测登录状态")
current_url = tester.browser.page.url
# 简单判断是否在登录页
if "login" in current_url.lower() or tester.browser.page.locator("input[type='password']").count() > 0:
print(" 检测到登录页面,尝试智能登录...")
# 尝试常见的用户名密码
login_goals = [
"输入用户名admin和密码password点击登录",
"输入admin/admin点击登录",
"输入test/123456点击登录"
]
login_success = False
for goal in login_goals:
try:
result = tester.test(goal)
tester.browser.wait(2000)
new_url = tester.browser.page.url
if new_url != current_url and "login" not in new_url.lower():
print(f" ✅ 登录成功: {goal}")
login_success = True
break
except:
continue
if not login_success:
print(" ⚠️ 自动登录失败,继续探索...")
# 步骤2: 全面探索
print("\n🔍 步骤2: 开始智能探索")
explore_config = {
"max_depth": 3, # 适中的深度
"max_clicks": 100, # 充足的点击
"focus_patterns": [], # 不设限制让AI自由发现
"dangerous_patterns": ["删除", "退出", "注销", "delete", "logout", "exit"]
}
explore_result = tester.explore(explore_config)
# 步骤3: 分析发现的功能
print("\n📊 步骤3: 分析测试结果")
action_log = explore_result.get("action_log", [])
# 统计功能类型
clicked_elements = []
forms_filled = []
pages_visited = set()
for action in action_log:
if action.get("action_taken"):
element_name = action.get("element_name", "")
clicked_elements.append(element_name)
if action.get("action_type") == "form_input":
forms_filled.append(element_name)
if action.get("url_changed"):
pages_visited.add(action.get("after_url", ""))
# 输出发现的功能
print(f"\n✅ 测试完成!发现的功能:")
print(f" 🖱️ 点击的元素: {len(clicked_elements)}")
print(f" 📝 填写的表单: {len(forms_filled)}")
print(f" 📄 访问的页面: {len(pages_visited)}")
# 显示主要功能模块
if clicked_elements:
print(f"\n🎯 主要功能模块:")
unique_elements = list(set(clicked_elements))[:10] # 显示前10个
for i, elem in enumerate(unique_elements, 1):
print(f" {i}. {elem}")
# 生成简化报告
report = {
"url": url,
"total_clicks": len(clicked_elements),
"forms_filled": len(forms_filled),
"pages_visited": len(pages_visited),
"discovered_elements": unique_elements,
"success": True
}
return report
except Exception as e:
print(f"\n❌ 测试失败: {e}")
return {"success": False, "error": str(e)}
finally:
tester.stop()
def main():
import argparse
parser = argparse.ArgumentParser(description="零配置智能测试工具")
parser.add_argument("url", help="要测试的网站URL")
parser.add_argument("--model", default="glm",
choices=["claude", "openai", "glm", "mimo"],
help="AI模型")
parser.add_argument("--headless", action="store_true",
help="无头模式")
parser.add_argument("--output", "-o", help="保存报告到文件")
args = parser.parse_args()
# 运行测试
result = auto_discover_and_test(args.url, args.model, args.headless)
# 保存报告
if args.output and result.get("success"):
import json
with open(args.output, 'w', encoding='utf-8') as f:
json.dump(result, f, ensure_ascii=False, indent=2)
print(f"\n📄 报告已保存到: {args.output}")
if __name__ == "__main__":
main()