一、自动化框架散装思路
🔖 代码结构如下所示
🗂️ UIAutomationTools:UI自动化操作工具
📁 app: 业务功能代码
📁 case: 测试用例
📁 config: 配置文件
📁 login: 登录相关的ICON图标路径
📁 runner: 运行器
📁 utils: 基础方法
三、设计思路
目标是设计一个模块化、灵活且易于维护的UI自动化测试框架,通过配置文件驱动测试执行,减少硬编码,提升测试的复用性和可配置性。
完整设计思路如下:
模块化设计
将框架划分为多个独立模块,确保代码结构清晰、职责分明,便于维护和扩展:
app模块:包含ui_automation.py,封装Android设备的UI自动化操作,如设备连接、截图、点击、滑动等。
**case模块:**管理测试用例,包含case_template.csv,定义测试步骤。
**config模块:**管理配置文件,包括config.ini(运行参数)和icon_config.yaml(图片路径)。
**runner模块:**包含runner.py和config.py,作为测试执行的入口,负责加载配置并运行测试。
**utils模块:**提供基础工具,包括ui_tools.py(UI操作方法)、ocr.py(OCR识别)和match(图像匹配算法)。
配置文件驱动
使用config.ini管理测试环境(如操作系统、语言)、测试用例路径和执行次数等参数。
通过icon_config.yaml定义图片路径,支持图像识别操作。
这种设计允许用户通过修改配置文件快速调整测试行为,无需更改代码。
UI操作封装
ui_automation.py:基于uiautomator2实现Android设备的UI交互,提供基础操作工具类。
ui_tools.py:封装高级UI操作,如基于文本点击(结合OCR)和基于图片点击(结合图像匹配)。
测试用例管理
测试用例存储在case_template.csv中,采用CSV格式定义操作步骤(如类型、动作、值),便于编写和维护。
runner.py读取CSV文件并按步骤执行测试,确保测试逻辑与数据分离。
OCR与图像识别支持
ocr.py:提供OCR功能,支持多语言文本识别,增强动态UI元素的定位能力。
match:实现图像匹配算法,用于识别和操作UI中的图片元素。
灵活的执行控制
main.py:程序执行入口,通过Runner类控制测试的启动和执行次数。
支持通过配置文件或参数调整测试执行次数,适用于重复测试场景。
以下是 AI(Grok 3)模型给出的:优缺点评价
📝 **优点**
1. 模块化与可维护性
- 框架采用模块化设计,代码结构清晰,各模块职责明确,便于团队协作和功能扩展。
- 模块间低耦合,易于独立开发、调试和维护。
1. 灵活的配置管理
- 通过config.ini和icon_config.yaml管理配置,用户可快速调整测试环境和参数,无需修改代码。
- 这种设计提升了框架的适应性和使用便捷性。
1. 多语言与OCR支持
- OCR功能支持多语言文本识别,适用于国际化应用的测试。
- 图像匹配技术弥补了传统UI自动化工具在动态UI元素上的不足。
1. 测试用例与数据分离
- 测试用例以CSV格式存储,非技术人员也能轻松编写和维护。
- 执行逻辑与测试数据分离,增强了测试的灵活性和可复用性。
1. 可扩展性
- 框架设计开放,易于集成新的UI操作方法或识别技术。
- 支持未来扩展到其他平台(如iOS、Web),只需添加相应驱动和配置。
**缺点**
1. 部分功能未实现
- ui_automation.py中的核心功能(如设备驱动和动作执行)可能尚未完全实现,可能仅停留在打印信息阶段。
- ui_tools.py和相关操作方法需进一步完善,以支持完整的UI自动化操作。
1. 错误处理不足
- 框架缺少对异常和失败操作的详细处理,可能导致测试执行不稳定。
- 建议增加日志记录和错误恢复机制,提升健壮性。
1. 文档和注释不完整
- 代码注释和文档(如接口说明)可能不够详尽,新用户上手难度较大。
- 建议为每个模块和方法提供详细的使用说明和示例。
1. 性能考虑
- 频繁的截图和图像处理可能降低测试执行效率,尤其在长时间运行的测试中。
- 建议优化图像处理逻辑,减少不必要的计算开销。
1. 单一操作系统支持
- 当前仅支持Android,限制了框架的应用范围。
- 建议扩展到iOS、Web等平台,提升通用性。
**总结**
作者设计的UI自动化测试框架思路清晰,注重模块化、灵活性和可维护性。通过配置文件驱动、多语言OCR支持和图像识别技术,框架在UI自动化测试中展现了较强的适应性。然而,部分功能未实现、错误处理不足和文档不完整等问题限制了其实际应用。未来可通过完善功能、增强错误处理和扩展平台支持,进一步提升框架的实用性和竞争力。
四、运行方法
以下是基于 UIAutomationTools 框架的使用指导,包含详细的操作步骤,帮助用户快速上手并运行自动化测试。这假设框架已经实现基本功能,并结合上下文中的代码和设计思路进行描述。
使用 UIAutomationTools 框架的详细操作步骤
前提条件
环境准备:
已安装 Python 3.x。
已安装必要的依赖库(如 uiautomator2、opencv-python、pandas、pyyaml 等)。
Android 设备已连接到电脑,并启用 USB 调试模式。
框架文件:
确保所有模块文件(main.py、runner/、utils/ 等)已正确放置在项目目录中。
配置好 config.ini、case_template.csv 和 icon_config.yaml 文件。
步骤 1:配置运行环境
编辑 config.ini 文件:
**文件路径:**项目根目录下的 config.ini。
示例内容:
[operating_system] system = android [language] language = ch [test_case] path = case\case_template.csv count = 1 [icon_config] path = config\icon_config.yaml
说明:
system:
设置为 android,表示测试目标为 Android 设备。language:
设置为 ch(中文),用于 OCR 识别中文文本。path:
指向测试用例文件路径。count:
设置测试执行次数。icon_config:
指向图片路径配置文件。
检查配置:
- 确保路径(如 case\case_template.csv 和 config\icon_config.yaml)与实际文件位置一致。
步骤 2:编写测试用例
创建或编辑 case_template.csv 文件:
**文件路径:**case\case_template.csv。
示例内容:
type,action,value 文本,点击,用户名 文本,点击,密码 图片,点击,登录
说明:
type:
识别类型(文本 或 图片)。action:
操作动作(目前支持 点击)。value:
目标元素(文本内容或图片关键字)。
验证格式:
- 确保 CSV 文件无多余空格或空行,字段顺序正确。
步骤 3:配置图片路径
创建或编辑 icon_config.yaml 文件:
**文件路径:**config\icon_config.yaml。
示例内容:
登录: "config\login\login_button.png"
说明:
键(如 登录)对应
case_template.csv
中的value。
值
(如 "config\login\login_button.png")
是图片文件的实际路径。
准备图片文件:
将
login_button.png
等图片文件放置在config\login\
目录下。确保图片与设备屏幕上的目标元素一致。
步骤 4:连接设备
连接 Android 设备:
使用 USB 线连接 Android 设备到电脑。
在设备上启用“开发者选项”和“USB 调试”。
验证连接:
运行命令 adb devices 检查设备是否被识别。
示例输出:
List of devices attached emulator-5554 device
如果未显示设备,检查 ADB 配置或 USB 连接。
步骤 5:运行测试
启动脚本:
打开终端,进入项目根目录。
运行主脚本:
python main.py
说明:
main.py 默认执行 main(count=1),加载 config.ini 并运行测试一次。
若需更改执行次数,可修改 main.py 中的 main(count=1),例如 main(count=3)。
观察输出:
框架将根据 case_template.csv 执行测试步骤,例如:
点击屏幕上的“用户名”文本。
点击屏幕上的“密码”文本。
点击屏幕上的“登录”按钮(通过图片匹配)。
输出类似:
成功连接设备: {'serial': 'emulator-5554', ...} text: 用户名 text: 密码 image: 登录
步骤 6:查看结果与调试
检查执行结果:
观察设备屏幕,确认操作是否按预期执行。
如果保存了截图(需启用相关功能),检查截图文件(如 screenshot.png)。
调试问题:
如果识别失败:
检查 language 设置是否与屏幕文本语言匹配。
确认图片路径和实际图片是否正确。
如果点击失败:
- 检查设备分辨率和坐标范围是否匹配。
完整流程示例: 通过以下步骤,用户可以轻松配置并运行自动化测试,利用框架的灵活性和模块化设计完成UI自动化任务。
文件准备
config.ini:
[operating_system] system = android [language] language = ch [test_case] path = case\case_template.csv count = 1 [icon_config] path = config\icon_config.yaml
case\case_template.csv:
type,action,value 文本,点击,用户名 文本,点击,密码 图片,点击,登录
config\icon_config.yaml:
登录: "config\login\login_button.png"
执行
确保设备已连接。
运行
python main.py。
观察设备屏幕,依次点击“用户名”、“密码”和“登录”按钮。