怎么设计一个好的Selenium/Appium 自动化框架? 需要考虑哪些问题

news/2025/11/5 0:25:54/文章来源:https://www.cnblogs.com/jovic/p/19191736

架构原则:分层(Test / PageObjects / Services/API / Utils / Drivers / Data),单一职责,易扩展、易维护。
测试用例组织:小而独立、幂等、可重跑。按功能/模块/标签分组,支持并行与分布式执行。
抽象驱动层:统一封装 WebDriver 与 AppiumDriver 初始化、Capabilities、会话复用、能力开关(local/cloud)。
页面对象(POM)或 Screenplay:页面/屏幕复用定位与操作,避免在测试中出现 UI 选择器。
等待与稳定性:优先使用显式等待、避免 Thread.sleep;封装通用等待与重试策略。
数据驱动与配置:把环境、设备、用户、测试数据外部化(YAML/JSON/DB),使用 DataProvider 驱动用例。
报告与日志:集成 Allure/ExtentReport,保留截图、视频、日志、网络抓包(必要时)。
CI/CD:在 pom.xml 中配置测试、并行、构建后利用 Jenkins/GitHub Actions 触发,多环境部署。
设备管理:本地 device farm + 云服务(BrowserStack/Sauce/阿里/腾讯)的能力封装,支持 UDID、模拟器/真机切换。
失败处理:失败截图、重试策略、用例分级(smoke/regression/critical)。
接口与Mock:结合接口层测试,必要时 Mock 后端或使用测试数据服务以保证可控性。
性能/安全测试接入点:与 JMeter / Gatling /安全扫描集成入口。
可观测性与度量:记录执行时间、失败率、失败原因、环境差异。
安全与合规:不要在测试代码或日志里写明敏感凭据;使用密钥管理。

多线程支持,每个线程专享一个Driver,一个Driver输出一个测试报告并发送到相关邮件。


移动(Appium)考虑
Capabilities 必须可配置(platformName, automationName, deviceName, platformVersion, udid, appPackage, appActivity, bundleId, noReset, fullReset)。
网络环境、权限弹窗、系统弹窗处理、系统键事件、应用 install/uninstall 策略、模拟器与真机差异。
边界场景:横竖屏、推送/通知、后台/前台切换、权限弹窗、键盘显示/隐藏。
元素定位策略:ID > accessibilityId > xpath(谨慎使用),稳定的自定义属性或注入测试ID。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/956164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIChatManager 应用功能总结

AIChatManager 应用功能总结 概述Qoder生成的应用,浏览器打开html即可使用,无服务无后台,部分功能不太完善,欢迎自行补充完善AIChatManager 是一个功能完整的AI聊天应用,采用纯前端架构,支持多种AI模型提供商(O…

[Doris] 度言软件:复杂查询响应速度提升10+倍,基于 Apache Doris 实时数仓建设实践 [转]

0 序原始作者 | 杭州度言软件大数据团队 发布时间 | 2022.12.27杭州度言软件有限公司(度言软件)成立于2014年,是信贷不良资产处置技术服务供应商,以“智能科技赋能不良资产处置,推动贷后行业合规高效发展”为使命…

第15天(中等题 滑动窗口)

打卡第十五天 2道中等题恰好型滑动窗口:耗时≈一小时 明天继续

Rust-闭包

一、Rust 闭包基础 1. 什么是闭包 闭包是能捕获其定义环境中变量的匿名函数。 // 基本语法 let closure = |x: i32| x + 1; let result = closure(5); // 6// 多参数 let add = |x, y| x + y; let sum = add(3, 4); //…

[docker note]

# ==== Docker 傻瓜式笔记 ==== # 一句话总结:Docker 是用来"装程序的盒子",让程序在任何电脑上都能一模一样地运行 # 核心概念: # 1. 镜像(Image):"盒子的模板",包含程序和运行环境(比如一…

数据加工1

一、数据连接 1. 数据库连接 2. 上传数据文件 3. 管理数据源:左上角项目名 → 右键 → 返回项目列表 → 数据源 二、数据导入(将数据库下的物理表导入为数据模型) 新建 → 数据库表模型 → 搜索 → 导入目录 → 连接…

异常介绍

如果代码没有语法问题,可以运行,但会出运行时的错误,例如除零错误,下标越界等问题,这种在运行期间检测到的错误被称为异常。 出现了异常必须处理,否则程序会终止执行,用户体验会很差。 Phthon 支持程序员自己处…

AE学习

AE学习 1. 音乐时间调整 合成设置再把图层向右拖拽即可

微服务的挑战与优势,什么时候上微服务?

我不排除微服务,但是我想说不要为微服务而微服务。曾经在一个公司做一个物流系统,每天的单都不到100 200单,直接上微服务,除了高大上和给公司带来更大的支出外,别无好处,这个量直接单体应用都撑得住。有时候简单…

利用 chrome-devtools MCP 让 AI 操作便携版浏览器(可指定 Data)

利用 chrome-devtools MCP 让 AI 操作便携版浏览器(可指定 Data)说明:文中出现的具体视频链接、演示路径、用户名、端口号等均为示例,读者需按需替换。 1. 需求 (1)使用 chrome-devtools-mcp 打开 https://www.b…

[OLAP] 技术选型对比:Clickhouse vs Doris

0 序Doris和ClickHouse是两款热门的OLAP数据库,它们在架构、功能、性能和易用性等方面存在差异1 架构设计Doris:采用MPP架构,分为Frontend(FE)和Backend(BE)节点。FE 负责元数据管理和查询规划,BE 负责数据存储…

计算天数

程序示例: # date = input(Enter a date: ) # 2024-12-21 # year = int(date[0:4]) # month = int(date[5:7]) # day = int(date[8:]) date = input(Enter a date: ).split("-") year = int(date[0]) month…

「学习笔记」正则表达式

正则表达式 正则表达式(Regular Expression,简称 Regex 或 RegExp)是一种用来匹配字符串中字符组合的模式。 正则表达式是一种用于模式匹配和搜索文本的工具。 正则表达式提供了一种灵活且强大的方式来查找、替换、…

11月4日日记

1.今天工程实训学习了铁道的基本知识 2.明天先学习离散数学,然后是马哲 3.数据库连接如何通过 Java Bean 封装实现 “配置与代码分离”?

三、字符设备驱动(基于北京迅为电子)

一、概述 字符设备的驱动包括设备号、字符设备结构体、自动创建设备节点、fops结构体 二、知识点设备号:一个32bit的数据,高12bit表示主设备号,低20bit表示次设备号 宏定义:MAJOR(dev),MINOR(dev),MKDEV(ma,mi) 分…

使用1panel一键建站

摘要 文章最初发布于:使用1panel一键建站 使用宝塔建站时,因为测试用的SSL证书迟迟无法申请成功。偶然发现1Panel可以丝滑申请泛域名证书,并且能自动续签。果断尝试以下,以下是一些踩坑记录。 坑1、SSL。宝塔泛域名…

React 中 useCallback 的基本使用和原理解析

React 中 useCallback 的基本使用方法 useCallback 是 React 的一个核心 Hook,用于​缓存函数定义​,避免组件重新渲染时重复创建函数实例。以下是其基本使用方法: 1. 基本语法 const memoizedCallback = useCallba…

SpringCloud和K8s实现的微服务各有什么优缺点

Spring Cloud 强调应用层解决方案,开发友好,适合 JVM 业务逻辑集中的团队;Kubernetes 原生(配合 Service/Ingress、Envoy/istio 等)倾向平台化、基础设施侧解决,适合容器化、跨语言、大规模生产环境。1. 核心理念…

Zabbix告警:value cache working in low memory mode

随着监测主机的增加,Zabbix 在使用一段时间后告警提示 value cache working in low memory mode(值缓存处于低内存模式下运行)。Value cache(值缓存) 是用于存储监控项最近取值的内存区域,它能加快趋势计算、触发…