基于AI的智能自动化测试系统:从Excel到全平台测试的完整解决方案
前言
最近在网上找相关的AI测试工具,有的只适合纯web用例执行,但是我司又是传统硬件需要web+android设备仪器测试,找了好久没找到合适的,干脆自己结合市面上比较好用的browser-use和Droidrun自己写一个。
项目概述
🎯 核心特性
- Excel驱动:直接读取Excel文件中的测试用例,降低使用门槛** AI智能解析**:使用大模型解析自然语言测试步骤** 智能代理选择**:根据测试用例内容自动选择最适合的执行引擎** 多平台支持**:同时支持Web端(browser-use)和Android端(droidrun)** 结果回写**:执行结果自动写回Excel文件** 实时日志**:详细的执行日志和状态跟踪
🏗️ 技术架构
智能AI自动化测试系统├── 核心层 (Core)│ ├── 配置管理 (Config)│ ├── Excel处理 (Excel Handler)│ ├── AI解析器 (AI Parser)│ └── 智能执行器 (Smart Executor)├── 代理层 (Agents)│ ├── Browser-Use代理 (Web自动化)│ ├── DroidRun代理 (Android自动化)│ └── 智能选择器 (Agent Selector)└── 工具层 (Utils) ├── 日志系统 (Logging) ├── 测试用例模型 (Test Case) └── 结果处理 (Result Handler)
核心技术实现
1. AI解析器:自然语言到结构化步骤
AI解析器是系统的核心组件,负责将Excel中的自然语言测试用例转换为结构化的测试步骤。
class AIParser: """AI解析器""" def __init__(self, config: Config): self.config = config self.api_key = config.ai.api_key self.base_url = config.ai.base_url async def parse_test_case(self, test_case: dict) -> ParsedTestCase: """解析测试用例""" prompt = self._build_prompt(test_case) # 调用FastGPT API response = await self._call_ai_api(prompt) # 解析AI响应 return self._parse_ai_response(response, test_case)
2. 智能代理选择器:自动选择最佳执行引擎
代理选择器通过关键词分析和平台识别,自动选择最适合的执行引擎。
class AgentSelector: """智能代理选择器""" def __init__(self): self.platform_keywords = { "browser-use": [ "web", "网页", "浏览器", "登录", "搜索", "点击" ], "droidrun": [ "android", "手机", "app", "应用", "滑动", "长按" ] } def select_agent(self, test_case: TestCase) -> Tuple[str, float]: """选择代理""" scores = {"browser-use": 0.0, "droidrun": 0.0} # 平台直接匹配 if test_case.platform.lower() in ["pc", "web"]: scores["browser-use"] += 0.5 elif test_case.platform.lower() in ["android", "mobile"]: scores["droidrun"] += 0.5 # 关键词匹配 content = f"{test_case.name} {test_case.steps} {test_case.expected}" for agent, keywords in self.platform_keywords.items(): for keyword in keywords: if keyword in content: scores[agent] += 0.1 # 选择得分最高的代理 selected_agent = max(scores, key=scores.get) confidence = scores[selected_agent] return selected_agent, confidence
核心挑战与解决方案
1. FastGPT与browser-use的兼容性问题
问题描述:FastGPT返回的JSON格式与browser-use期望的Action模型结构不匹配。如果是用browser-use直接传递gpt的key和指定模型的话,这个问题其实并没有,但是调用频率太恐怖了,用自己跑的模型能省不少钱。
FastGPT返回: {"go_to_url": {"url": "https://example.com"}}browser-use期望: {"go_to_url": "https://example.com"}
解决方案:
- 详细的系统提示词:指导FastGPT返回正确格式(最好是迁移原始的模型适配文件SchemaOptimizer类和提示词迁移,官网已经提了issue,后续有进展会在评论区同步)响应格式验证:在执行前验证响应格式模拟模式降级:当API不可用时自动切换到模拟执行
项目亮点
1. 零代码测试编写
用户只需在Excel中用自然语言描述测试步骤,系统自动解析并执行。
示例:
测试用例名称: 百度搜索测试执行平台: PC测试步骤: 1. 打开百度首页 https://www.baidu.com2. 在搜索框中输入'AI自动化测试'3. 点击搜索按钮4. 验证搜索结果页面显示预期结果: 搜索结果正常显示
2. 智能代理选择
系统根据测试用例内容自动选择最适合的执行引擎:
- Web相关关键词 → Browser-Use代理Android相关关键词 → DroidRun代理置信度评分 → 帮助用户了解选择可靠性
3. 完整的结果追踪
- 实时日志:详细的执行过程记录截图支持:关键步骤自动截图结果回写:执行结果自动写回Excel错误处理:友好的错误信息和恢复机制
技术栈
核心技术
- Python 3.8+:主要开发语言FastGPT:AI服务提供商browser-use:先进的Web自动化库droidrun:Android自动化库asyncio:异步编程支持Ollama:丰富的模型库以及一键部署(跑在服务端,让fastgpt调用然后暴露api)
依赖库
# requirements.txtloguru>=0.6.0 # 日志系统pydantic>=1.10.0 # 数据验证openpyxl>=3.0.0 # Excel处理aiohttp>=3.8.0 # HTTP客户端browser-use>=0.4.2 # Web自动化droidrun>=1.0.0 # Android自动化
使用示例
1. 基本使用
from core.smart_executor import SmartTestExecutorfrom utils.config import Config# 加载配置config = Config()# 创建执行器executor = SmartTestExecutor(config)# 执行测试await executor.run_tests("test_cases.xlsx")
2. 自定义测试用例
from core.test_case import TestCase# 创建测试用例test_case = TestCase( name="登录测试", platform="PC", steps="1. 访问登录页面\n2. 输入用户名\n3. 输入密码\n4. 点击登录", expected="登录成功")# 执行单个测试用例result = await executor.execute_test_case(test_case)
总结
测试用例步骤清晰的情况下,可以节省测试80%的回归时间,但是在使用中会有奇奇怪怪的问题,建议是添加测试平台或者安卓的知识库给模型调用。
唉,一个前端现在卷的奇奇怪怪的,真想做一只无忧无虑的三角洲鼠鼠。其实想拓展平台也可以,现在windows和ios也有类似工具,原理是相通的,主要是ai分析图像然后解析步骤,各平台的调用其实之前都有。