一个功能全面的多平台自动化测试框架,支持Android、iOS、WebView和计算机视觉操作。
- 多平台支持: Android、iOS、WebView、计算机视觉
- 统一接口: 提供一致的API接口,简化跨平台开发
- 智能识别: 集成YOLOv5目标检测和EasyOCR文字识别
- 跨平台兼容: 支持macOS、Windows、Linux系统
- 插件系统: 支持自定义插件扩展
- 工作流引擎: 支持复杂的工作流自动化
- 多设备管理: 支持多设备并行测试
- 丰富的工具: 提供CLI工具和丰富的辅助功能
- 完整文档: 详细的API文档和使用指南
- 容器化部署: 支持Docker和Kubernetes部署
- Python 3.8+
- Android SDK (用于Android测试)
- Xcode (用于iOS测试)
- Chrome浏览器 (用于WebView测试)
# 克隆项目
git clone git@github.com:carlslin/autotesttools.git
cd autotesttools
# 安装Python依赖
pip install -r requirements.txt
# 或者使用开发模式安装
pip install -e .
# 构建Docker镜像
docker build -t automation-framework .
# 运行容器
docker run -it --rm automation-framework
from automation_framework import AutomationFramework
# 初始化框架
framework = AutomationFramework()
# 获取Android驱动
android_driver = framework.get_driver('android')
# 连接设备
android_driver.connect("emulator-5554")
# 启动应用
android_driver.start_app("com.example.app")
# 截图
android_driver.take_screenshot("screenshot.png")
# 关闭框架
framework.close()
# 获取CV驱动
cv_driver = framework.get_driver('cv')
# 图像识别
element = cv_driver.find_element('button.png')
if element:
element.click()
# 文字识别
text = cv_driver.extract_text('screenshot.png')
print(f"识别到的文字: {text}")
from automation_framework.core.utils.mouse_control import click, move, drag
# 鼠标操作(自动适配不同操作系统)
click(100, 100) # 点击坐标
move(200, 200) # 移动鼠标
drag(100, 100, 300, 300, 0.5) # 拖拽操作
# 查看帮助
python main.py --help
# 连接Android设备
python main.py connect -t android -d emulator-5554
# 图像检测
python main.py detect -i image.jpg -t template.jpg
# 文字识别
python main.py ocr -i image.jpg
# Web操作
python main.py web -u https://www.example.com
# 查看状态
python main.py status
# 运行工作流
python main.py run -f workflow.yaml
- 基于uiautomator2
- 支持设备连接、应用操作、元素交互
- 支持截图、坐标操作、文本输入
- 基于tidevice和WebDriverAgent
- 支持设备连接、应用操作
- 需要配置WebDriverAgent
- 集成YOLOv5目标检测
- 集成EasyOCR文字识别
- 支持模板匹配、图像预处理
- 基于Selenium WebDriver
- 支持页面导航、元素操作
- 支持JavaScript执行
框架提供了统一的元素操作接口:
# 创建元素
element = framework.create_android_element({
"type": "id",
"value": "button_id"
})
# 查找元素
if element.find_element():
# 点击元素
element.click()
# 获取文本
text = element.get_text()
# 检查状态
is_displayed = element.is_displayed()
is_enabled = element.is_enabled()
支持YAML格式的工作流配置:
name: "示例工作流"
steps:
- name: "连接设备"
type: "connect_device"
config:
device_type: "android"
device_id: "emulator-5554"
- name: "启动应用"
type: "start_app"
config:
device_type: "android"
package_name: "com.example.app"
- name: "截图"
type: "screenshot"
config:
device_type: "android"
save_path: "screenshot.png"
框架使用YAML配置文件:
# config/framework.yaml
logging:
level: INFO
file: "logs/automation.log"
drivers:
android:
enabled: true
timeout: 10
screenshot_dir: "screenshots/android"
cv:
enabled: true
confidence_threshold: 0.5
ocr_languages: ["en", "ch_sim"]
autotesttools/
├── src/automation_framework/ # 源代码
│ ├── core/ # 核心模块
│ │ ├── drivers/ # 驱动实现
│ │ ├── elements/ # 元素操作
│ │ ├── services/ # 服务组件
│ │ └── utils/ # 工具类
│ ├── plugins/ # 插件系统
│ ├── scaffold/ # 脚手架
│ └── cli/ # 命令行工具
├── tests/ # 测试代码
├── config/ # 配置文件
├── examples/ # 示例代码
├── docs/ # 文档
├── k8s/ # Kubernetes部署配置
├── scripts/ # 部署脚本
├── .github/workflows/ # CI/CD流水线
├── requirements.txt # 依赖列表
├── Dockerfile # Docker配置
└── main.py # 主入口文件
- 继承
BaseDriver
类 - 实现必要的抽象方法
- 在
AutomationFramework
中注册
class CustomDriver(BaseDriver):
def initialize(self) -> bool:
# 实现初始化逻辑
pass
def connect(self, device_id: str) -> bool:
# 实现连接逻辑
pass
# 实现其他必要方法...
- 继承
BaseElement
类 - 实现元素操作方法
- 在框架中注册
class CustomElement(BaseElement):
def find_element(self, timeout: int = None) -> bool:
# 实现元素查找逻辑
pass
def click(self) -> bool:
# 实现点击逻辑
pass
# 实现其他必要方法...
# 运行所有测试
pytest
# 运行特定测试
pytest tests/unit/test_drivers.py
# 生成覆盖率报告
pytest --cov=src/automation_framework --cov-report=html
框架内置性能监控功能:
- 内存使用监控
- CPU使用监控
- 响应时间统计
- 错误率统计
-
Android设备连接失败
- 检查ADB连接
- 确认设备已启用USB调试
- 检查uiautomator2服务
-
iOS设备连接失败
- 检查WebDriverAgent配置
- 确认设备已信任开发者证书
- 检查tidevice连接
-
图像识别准确率低
- 调整置信度阈值
- 优化图像质量
- 更新AI模型
# 启用详细日志
framework = AutomationFramework()
framework.set_config("logging.level", "DEBUG")
欢迎贡献代码!请遵循以下步骤:
- Fork项目
- 创建特性分支
- 提交更改
- 推送到分支
- 创建Pull Request
本项目采用MIT许可证。详见LICENSE文件。
- 问题反馈: GitHub Issues
- 文档: API参考 | 用户指南
- 仓库: GitHub
感谢以下开源项目的支持:
版本: 1.0.0
最后更新: 2024年1月
维护者: carlslin
仓库: carlslin/autotesttools