以下是一个基于企业级标准的App UI自动化测试项目结构示例,结合持续集成(CI/CD)流程设计,代码框架和模块职责说明如下:
项目结构说明
app_ui_auto/
├── configs/ # 配置管理
│ ├── devices.yaml # 设备配置(UDID、系统版本等)
│ ├── app_config.py # App包路径、启动参数
│ └── ci_config.json # CI/CD流水线配置
├── test_cases/ # 测试用例
│ ├── login/ # 按功能模块划分
│ │ ├── test_login.py # 登录功能测试用例
│ │ └── data/ # 测试数据(JSON/CSV)
│ └── order/
│ └── test_order.py # 订单功能测试用例
├── page_objects/ # 页面对象模型(POM)
│ ├── base_page.py # 基础页面类(封装公共方法)
│ ├── login_page.py # 登录页面元素和操作
│ └── home_page.py # 首页元素和操作
├── utils/ # 工具类
│ ├── driver_manager.py # Appium驱动管理(单例模式)
│ ├── report_utils.py # Allure报告生成
│ ├── permission_handler.py # 权限弹窗处理[2,6](@ref)
│ └── adb_utils.py # ADB命令封装
├── reports/ # 测试报告
│ ├── allure/ # Allure原始数据
│ └── html_report/ # 最终HTML报告
├── ci_cd/ # CI/CD脚本
│ ├── Jenkinsfile # Jenkins流水线定义
│ └── gitlab-ci.yml # GitLab CI配置
└── requirements.txt # 依赖库清单
核心模块功能说明
1. Configs(配置管理)
- devices.yaml:定义多设备参数(如UDID、平台版本),支持多设备并行测试。
- app_config.py:动态加载App安装包路径、启动Activity及Capabilities配置。
- ci_config.json:定义CI/CD触发条件(如分支合并后自动执行回归测试)。
2. Test Cases(测试用例)
# page_objects/login_page.py
from appium.webdriver.common.mobileby import MobileBy
from .base_page import BasePage
class LoginPage(BasePage):
USERNAME_FIELD = (MobileBy.ID, "com.example:id/username")
PASSWORD_FIELD = (MobileBy.ACCESSIBILITY_ID, "密码输入框")
def enter_credentials(self, username, password):
self.find_element(self.USERNAME_FIELD).send_keys(username)
self.find_element(self.PASSWORD_FIELD).send_keys(password)
4. Utils(工具类)
5. CI/CD(持续集成)
groovy
pipeline {
agent any
stages {
stage('Checkout') {
steps { git 'https://github.com/your-repo' }
}
stage('Run Tests') {
steps {
sh 'pytest test_cases/ --alluredir=reports/allure'
}
}
stage('Generate Report') {
steps {
allure includeProperties: false, jdk: '', results: [[path: 'reports/allure']]
}
}
}
}
引用说明
- 采用
pytest
框架编写,结合@pytest.mark.parametrize
实现数据驱动测试。 - 示例代码片段:
# test_cases/login/test_login.py import pytest from page_objects.login_page import LoginPage class TestLogin: @pytest.mark.ci_smoke # 标记为CI流水线的冒烟测试 def test_valid_login(self, appium_driver): login_page = LoginPage(appium_driver) login_page.enter_credentials("user@example.com", "Pass123") login_page.click_submit() assert login_page.is_welcome_displayed(), "登录成功提示未显示"
3. Page Objects(页面对象模型)
- 封装元素定位和操作,降低代码冗余。
- 示例代码:
- Driver Manager:实现Appium驱动的动态创建与销毁,支持多线程安全。
- Permission Handler:处理系统弹窗(如相机权限请求),结合图像识别或XPath定位。
- ADB Utils:封装设备操作命令(如安装/卸载App、截图)。
- Jenkinsfile:定义多阶段流水线(构建→测试→部署→通知)。
- GitLab CI:与SonarQube集成实现代码质量门禁。
-
分层架构设计
- 数据层:YAML/JSON管理测试数据,与代码分离。
- 业务层:Page Object模式隔离UI变化风险。
- 执行层:CI/CD工具自动化触发测试。
-
安全与性能优化
- 使用Vault或KMS加密敏感数据(如账号密码)。
- 通过Appium Grid实现分布式测试,提升执行效率。
-
报告与监控
- Allure报告集成错误截图和日志追踪。
- Prometheus + Grafana监控测试执行成功率。
- 设备管理参考了Appium多设备策略;
- 分层设计借鉴了Selenium企业级项目结构;
- CI/CD流程融合了Jenkins和GitLab最佳实践。