Files
ai-web-tester/tests/auto_test.py
empty 1f1cc4db9a
Some checks failed
AI Web Tester CI / test (push) Has been cancelled
feat: 增强测试框架功能
主要改进:
- 新增统一测试器 (universal_tester.py) 支持多种测试模式
- 优化测试报告生成器,支持汇总报告和操作截图
- 增强探索器 DFS 算法和状态指纹识别
- 新增智能测试配置 (smart_test.yaml)
- 改进 AI 模型集成 (GLM/Gemini 支持)
- 添加开发调试工具和文档
2026-01-05 20:23:02 +08:00

150 lines
5.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()