一、自动化框架散装思路
🔖 代码结构如下所示
🗂️ UIAutomationTools:UI自动化操作工具
-
📁 app: 业务功能代码
ui_automation.py:为 Android 设备提供 UI 自动化操作的工具类
-
📁 case: 测试用例
case_template.csv:UI测试用例步骤
-
📁 config: 配置文件
📁 login: 登录相关的ICON图标路径
icon_config.yaml:图片路径配置文件
-
📁 runner: 运行器
config.py:配置文件处理模块
runner.py: 程序运行入口
-
📁 utils: 基础方法
ui_tools.py:UI 操作方法
ocr.py:图片文字识别方法
match:图像识别算法
config.ini: 运行配置文件
main.py:程序执行入口
三、设计思路
目标是设计一个模块化、灵活且易于维护的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。
-
观察设备屏幕,依次点击“用户名”、“密码”和“登录”按钮。
-