当前位置: 首页 > news >正文

【自动化测试】UI自动化的分类、如何选择合适的自动化测试工具以及其中appium的设计理念、引擎和引擎如何工作

引言

UI自动化测试主要针对软件的用户界面进行测试,以确保用户界面元素的交互和功能符合预期

文章目录

  • 引言
  • 一、UI自动化的分类
    • 1.1 基于代码的自动化测试
    • 1.2 基于录制/回放的自动化测试
    • 1.3 基于框架的自动化测试
    • 1.4 按测试对象分类
    • 1.5 按测试层次分类
    • 1.6 按测试执行方式分类
    • 1.7 按测试目的分类
  • 二、如何选择合适的自动化测试工具
    • 2.1 项目需求分析
    • 2.2 工具特性评估
    • 2.3 成本考虑
    • 2.4 团队技能
    • 2.5 试用和评估
    • 2.6 兼容性和集成
    • 2.7 未来可扩展性
  • 三、appium的设计理念
    • 3.1 跨平台性
    • 3.2 不侵入性
    • 3.3. 基于标准
    • 3.4 开源和社区驱动
    • 3.5 Client/Server架构
    • 3.6 WebDriver协议
    • 3.7 Session概念
    • 3.8 JSON Wire Protocol
    • 3.9 插件和扩展性
    • 3.10 开源生态系统
    • 3.11 总结
  • 四、appium的引擎
    • 4.1 Bootstrap
    • 4.2 UIAutomator
    • 4.3 Espresso
    • 4.4 XCTest
    • 4.5 Windows Driver
  • 五、引擎如何工作
    • 5.1 客户端(Client)
    • 5.2 appium 服务器(Server)
    • 5.3 引擎(Driver)
    • 5.4 移动设备(Device)
    • 5.5 总结

在这里插入图片描述

一、UI自动化的分类

UI自动化测试主要针对软件的用户界面进行测试,以确保用户界面元素的交互和功能符合预期。根据测试的范围、目的和技术实现,UI自动化测试可以分为以下几类:

1.1 基于代码的自动化测试

  • 单元测试(Unit Testing):针对UI组件的最小单元进行测试,通常不涉及完整的用户界面
  • 集成测试(Integration Testing):测试UI组件之间的交互是否符合预期
  • 端到端测试(End-to-End Testing):模拟用户操作,测试整个应用从前端到后端的完整流程

1.2 基于录制/回放的自动化测试

  • 录制测试脚本:通过录制用户的操作来生成测试脚本
  • 回放测试脚本:使用录制的脚本来模拟用户操作,验证UI功能

1.3 基于框架的自动化测试

  • 开源框架:如Selenium、Appium、Cypress等,它们提供了丰富的API来支持自动化测试
  • 商业框架:如TestComplete、UFT(Unified Functional Testing,原QTP)等,它们通常提供更友好的图形界面和更高级的功能

1.4 按测试对象分类

  • Web应用测试:针对网页应用进行自动化测试
  • 桌面应用测试:针对Windows、macOS等桌面应用程序进行自动化测试
  • 移动应用测试:针对iOS、Android等移动平台的应用进行自动化测试

1.5 按测试层次分类

  • 界面元素测试:测试按钮、文本框、下拉菜单等界面元素是否按预期工作
  • 布局和样式测试:验证UI的布局和样式是否符合设计规范
  • 交互测试:测试用户与界面的交互是否符合预期,如鼠标点击、键盘输入等

1.6 按测试执行方式分类

  • 本地执行测试:在本地计算机上直接运行自动化测试脚本
  • 远程执行测试:通过远程服务器或云服务执行自动化测试脚本

1.7 按测试目的分类

  • 功能测试:验证UI功能是否正确
  • 兼容性测试:测试UI在不同浏览器、操作系统或设备上的兼容性
  • 性能测试:评估UI的性能,如加载时间、响应时间等

二、如何选择合适的自动化测试工具

选择合适的自动化测试工具是实施自动化测试的关键步骤

2.1 项目需求分析

  • 测试类型:确定你需要测试的是Web应用、移动应用还是桌面应用
  • 技术栈:考虑你的应用使用的技术栈,工具需要与你的技术栈兼容
  • 测试目的:功能测试、性能测试、兼容性测试等
  • 持续集成:是否需要与CI/CD工具集成

2.2 工具特性评估

  • 支持的平台:工具是否支持你需要测试的所有平台和操作系统
  • 脚本语言:工具支持的脚本语言是否符合团队的技能水平
  • 社区和文档:是否有强大的社区支持和详细的文档
  • 可扩展性:工具是否支持自定义插件和扩展
  • 易用性:工具是否易于学习和使用
  • 可维护性:测试脚本的维护是否简便
  • 报告功能:报告是否详尽,是否支持定制

2.3 成本考虑

  • 许可证费用:工具是否收费,费用是否在预算范围内
  • 总拥有成本(TCO):包括购买、部署、维护和培训的成本

2.4 团队技能

  • 现有技能:团队目前的技术能力和编程语言熟悉度
  • 培训需求:团队成员是否需要培训才能使用该工具

2.5 试用和评估

  • 试用版本:大多数工具都提供试用版本,实际操作可以帮助更好地了解工具的特性
  • 性能评估:在试用期间,评估工具的性能和稳定性
  • 社区反馈:查看社区对该工具的评价和反馈

2.6 兼容性和集成

  • 与其他工具的集成:工具是否能够与你现有的测试管理工具、缺陷跟踪系统等集成
  • API支持:工具是否提供API,以便与自定义应用程序或其他系统集成

2.7 未来可扩展性

  • 更新和支持:工具的更新频率和厂商的技术支持情况
  • 市场趋势:工具的市场趋势和未来发展方向

三、appium的设计理念

Appium是一个开源的自动化测试框架,用于测试原生应用、移动Web应用和混合应用

3.1 跨平台性

  • Appium的设计允许测试人员在不同的平台(iOS、Android、Windows等)上使用相同的API进行自动化测试,这意味着测试人员不需要为每个平台编写不同的测试脚本

3.2 不侵入性

  • Appium不需要测试人员对应用进行任何修改或重新编译。它使用原生应用的框架和控件进行测试,确保测试环境与实际用户使用环境的一致性

3.3. 基于标准

  • Appium基于通用的开源标准,如WebDriver,这是W3C的一个标准,用于Web应用的自动化测试。Appium扩展了WebDriver的协议,使其适用于移动应用的测试

3.4 开源和社区驱动

  • Appium是开源的,这意味着它的源代码可以被任何人查看、修改和分发。它的开发受到社区的支持和贡献,这有助于快速解决问题和添加新功能

3.5 Client/Server架构

  • Appium采用Client/Server架构,其中Client端发送自动化命令到Server端,Server端负责执行这些命令。这种设计允许使用不同的编程语言编写测试脚本,只要它们能够发送HTTP请求

3.6 WebDriver协议

  • Appium遵循WebDriver协议,这意味着它使用相同的命令和操作方式来控制不同的设备和平台上的应用

3.7 Session概念

  • 在Appium中,测试会话(Session)是自动化测试的核心概念。会话代表了一次自动化测试的完整生命周期,从开始到结束

3.8 JSON Wire Protocol

  • Appium使用JSON Wire Protocol作为Client和Server之间的通信协议,这是一个轻量级的、基于JSON的协议

3.9 插件和扩展性

  • Appium允许通过插件来扩展其功能,例如支持新的平台或添加额外的自动化能力

3.10 开源生态系统

  • Appium鼓励使用和贡献开源项目,它的生态系统包括了许多其他开源工具,如Appium Doctor、Appium Inspector等,这些工具可以帮助测试人员更有效地进行自动化测试

3.11 总结

Appium的设计理念使其成为一个强大、灵活且易于使用的自动化测试框架,适用于多种移动应用测试需求

四、appium的引擎

appium的核心是一个客户端-服务器架构,其引擎主要指的是服务器端,负责接收来自客户端的命令,并将其转化为在移动设备上执行的具体操作。appium支持多种引擎,以下是一些主要的引擎

4.1 Bootstrap

  • 对于Android设备,appium 使用一个名为 Bootstrap 的基于 Instrumentation 的框架。Bootstrap 是一个运行在设备上的后台服务,它负责接收来自 appium 服务器的命令,并通过 Android 的 Instrumentation API 执行这些命令

4.2 UIAutomator

  • UIAutomator 是 Android SDK 的一部分,它提供了一个框架用于在 Android 设备上执行 UI 测试。appium 可以使用 UIAutomator 作为其自动化引擎来执行测试

4.3 Espresso

  • Espresso 是一个专为 Android 设计的测试框架,它提供了简洁的 API 用于编写可靠的 UI 测试。appium 可以通过 Espresso Driver 与 Espresso 框架集成,从而在 Android 设备上执行测试

4.4 XCTest

  • 对于 iOS 设备,appium 使用 Apple 的 XCTest 框架。XCTest 是 Xcode 的一部分,用于编写和运行单元测试和 UI 测试。appium 通过 WebDriverAgent 项目与 XCTest 集成,该项目是一个开源的 WebDriver 服务器实现,它使用 XCTest 来驱动 iOS 应用

4.5 Windows Driver

  • 对于 Windows 应用,appium 使用 Windows Driver,这是微软提供的用于自动化 Windows 应用的 WebDriver 实现

五、引擎如何工作

这些引擎是如何工作的呢?以下是一个简化的流程

5.1 客户端(Client)

测试脚本通过 appium 客户端库(如 Python 的 appium 库)发送自动化命令

5.2 appium 服务器(Server)

appium 服务器接收来自客户端的命令,并根据目标平台和设备选择合适的引擎

5.3 引擎(Driver)

选定的引擎将 appium 服务器发送的命令转换为移动设备上可执行的操作。例如,如果是在 Android 设备上测试,Bootstrap 或 UIAutomator 会执行相应的操作

5.4 移动设备(Device)

在移动设备上,引擎通过原生框架(如 Android 的 Instrumentation 或 iOS 的 XCTest)执行操作,并返回结果

5.5 总结

appium 的这种设计允许它支持多种平台和设备,同时为测试人员提供一个统一的接口来编写自动化测试脚本。随着移动测试技术的发展,appium 还可能会支持更多的引擎

相关文章:

【自动化测试】UI自动化的分类、如何选择合适的自动化测试工具以及其中appium的设计理念、引擎和引擎如何工作

引言 UI自动化测试主要针对软件的用户界面进行测试,以确保用户界面元素的交互和功能符合预期 文章目录 引言一、UI自动化的分类1.1 基于代码的自动化测试1.2 基于录制/回放的自动化测试1.3 基于框架的自动化测试1.4 按测试对象分类1.5 按测试层次分类1.6 按测试执行…...

深入理解Python中的“_,”:一个实用的语法特性

在Python编程中,你可能经常会看到一个特殊的标识符“_”。这个符号在Python中有多种用途,其具体含义依上下文而定。本文将探讨其中一种常见用法——作为一个临时性的占位符——并解释它在实际编程中的实用性和应用场景。 1. “_”作为占位符 在Python中…...

Mac清理其他文件:释放存储空间的高效指南

每个Mac用户都可能遇到存储空间不足的问题,尤其是当“其他”文件积累到一定体积时。在Mac上,“其他”文件通常包括各种系统文件、缓存、文档以及不被归类为应用程序、照片、电影或音乐的其他类型的文件。这些文件往往不易被注意,但逐渐占用了…...

html+css+js网页设计 旅游 龙门石窟4个页面

htmlcssjs网页设计 旅游 龙门石窟4个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…...

CISSP一站通关

依托轻速云维护了一个专注于CISSP备考通关的在线学习平台,提供知识串讲视频,配合大量针对性的习题和重难点习题解析,帮助备考学习者高效学习和巩固知识点。已经帮助100考友顺利通过考试。 知识串讲视频是我主讲的5天直播课程的录屏&#xff0…...

Golang | Leetcode Golang题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; func reconstructQueue(people [][]int) (ans [][]int) {sort.Slice(people, func(i, j int) bool {a, b : people[i], people[j]return a[0] > b[0] || a[0] b[0] && a[1] < b[1]})for _, person : range people {idx : pe…...

【我的Android进阶之旅】解决CardView四个圆角有白边的问题

文章目录 一、问题描述二、分析CardView出现白边的原因三、如何解决这个问题?3.1 如何修复?3.2 为什么这样可以修复?3.3 示例代码3.4 总结一、问题描述 在实现一个RecycleView的Item时候,样式需要用到卡片式效果,于是想到用CardView来实现,但是最终发现运行出来的效果,…...

学习笔记JVM篇(四)

垃圾回收器 说完垃圾回收算法接下来就需要对应的垃圾回收器去回垃圾回收器。接下来介绍几种垃圾回收器 1、Serial 串行回收器&#xff0c;是单线程版本&#xff0c;暂停所有的应用。在单CPU的情况下效率是很高的&#xff0c;因为不涉及线程的上下文切换。适用于小型程序和客…...

828 华为云征文|华为 Flexus 云服务器搭建萤火商城 2.0

《828 华为云征文&#xff5c;华为 Flexus 云服务器搭建萤火商城 2.0》 在 2024 年 9 月 14 日这个特别的日子&#xff0c;我着手利用华为 Flexus 云服务器搭建轻量级、高性能、前后端分离的电商系统萤火商城 2.0&#xff0c;开启了一段充满挑战与惊喜的旅程。 华为 Flexus 云服…...

centos7安装MySQL5.7.44

下载压缩文件 命令&#xff1a; #放到在/usr/local目录下 cd /usr/local #上传命令选择安装包 rz #解压缩包 tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz #给包重命名为mysql mv mysql-5.7.44-linux-glibc2.12-x86_64 mysql #查看mysql目录下有什么东西 [rootlocal…...

HTTP 请求处理的完整流程到Servlet流程图

HTTP 请求处理的完整流程。从 TCP 三次握手开始&#xff0c;一直到 Servlet 处理请求并返回响应。 首先&#xff0c;让我解释一下 response.setContentType("text/html;charsetUTF-8"); 这行代码&#xff1a; 这行代码设置了 HTTP 响应的 Content-Type 头。它告诉浏…...

spingboot中创建简单的WebSocket服务和使用OKHttp创建socket客户端接收数据

背景 springboot 中使用okhttp3创建webSocket服务端 server1 和客户端 client1&#xff0c;客户端clinet1调用server1用于发送图片&#xff0c;创建客户端client2接收此图片. 在Spring Boot中使用OkHttp3创建WebSocket服务端和客户端&#xff0c;涉及到两个不同的操作&#xff…...

Redis入门2

在java中操作Redis Redis的Java客户端 Redis 的 Java 客户端很多&#xff0c;常用的几种: Jedis Lettuce Spring Data Redis Spring Data Redis 是 Spring 的一部分&#xff0c;对 Redis 底层开发包进行了高度封装。 在 Spring 项目中&#xff0c;可以使用Spring Data R…...

嵌入式Linux:信号是什么?

目录 1、信号的来源 2、信号的处理方式 3、信号的异步性 4、信号编号 信号是Linux系统中用于通知进程事件发生的一种机制&#xff0c;可以将其视为一种软件中断。信号类似于硬件中断&#xff0c;能够打断进程当前的执行流程&#xff0c;从而实现对中断机制的一种软件层面的…...

教你搭建一个wifi贴系统

大家好&#xff0c;我是鲸天科技千千&#xff0c;大家都知道我是做小程序开发的&#xff0c;平时会给大家分享一些互联网相关的创业项目&#xff0c;感兴趣的可以跟我关注一下。 搭建一个首先就是要搭建一个自己的wifi贴小程序&#xff0c;我们自己的工作就是把这个小程序推广…...

C#中的LINQ语句

LINQ&#xff08;Language Integrated Query&#xff09;是 .NET Framework 中的一个功能强大的查询语言&#xff0c;它允许开发者使用类似 SQL 的语法来查询和操作数据。在 C# 中&#xff0c;LINQ 可以用于查询数组、列表、集合、XML 文档、关系数据库等。以下是一些常见的 LI…...

【C++】——string(模拟实现)

文章目录 string类构造string类拷贝构造string类析构string类运算符重载string类部分常用接口的模拟实现 这篇博客中构造、拷贝构造、析构、还有一些短小频繁调用的函数就不用做函数和定义分离&#xff0c;因为在类中&#xff0c;这种函数会默认是内联函数 string类构造 构造函…...

c++20 std::format 格式化说明

在标头<format>定义 ()功能很强大&#xff0c;它把字符串当成一个模板&#xff0c;通过传入的参数进行格式化&#xff0c;并且使用大括号‘{}’作为特殊字符代替‘%’。 1、基本用法 &#xff08;1&#xff09;不带编号&#xff0c;即“{}”&#xff08;2&#xff09;带…...

HTB-Unified(log4j2漏洞、MongoDb替换管理员密码)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解Unified靶机 渗透过程 信息搜集 服务器开放了SSH服务&#xff0c;HTTP服务 访问网站 验证log4j2漏洞 8443端口&#xff1a;UniFi 网络 &#xff0c;访问查询 是否有Nday漏洞利用 可以观察到UniFi的版…...

每天五分钟深度学习PyTorch:不同的神经网络层设置不同的学习率

本文重点 我们前面学习了基本网络模型的搭建,获取网络模型的子结构,以及优化器optim,我们发现我们设置优化器的时候,是对整个模型设置的,也就是说整个模型的参数学习率是一样,本节课程我们学习如何给不同的网络层设置不同的学习率。主要还是通过优化器optim来实现的,本…...

【渗透测试】——DVWA靶场搭建

&#x1f4d6; 前言&#xff1a;DVWA&#xff08;Damn Vulnerable Web Application&#xff09;是一个用于安全漏洞测试的 PHP/MySQL 网络应用&#xff0c;旨在为安全专业人士提供一个合法的环境&#xff0c;以测试他们的技能和工具&#xff0c;同时帮助 Web 开发者更好地理解 …...

国内人工智能产业发展现状及对策研究

一、引言 人工智能作为新时代科技革命和产业变革的核心力量&#xff0c;正深刻改变着全球经济格局。我国政府高度重视人工智能产业发展&#xff0c;将其列为国家战略性新兴产业。在此背景下&#xff0c;本文旨在分析我国人工智能产业发展现状&#xff0c;探讨面临的挑战&#x…...

完整版订单超时自动取消功能

前几天对实习还是继续学习技术产生了抉择&#xff0c;问了一个前辈&#xff0c;他抛给我一个问题&#xff0c;怎么做15分钟订单自动取消&#xff0c;我说然后到时间之后&#xff0c;自动执行这个订单关闭业务&#xff0c;比如把锁了的库存给解开等等操作&#xff0c;然后在数据…...

算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组、1143. 最长公共子序列

300. 最长递增子序列 1.dp定义&#xff1a;dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较&#xff0c;而是我们要取dp[j] 1的最大值…...

go 笔记

数据结构与 方法&#xff08;增删改查&#xff09; 安装goland,注意版本是2024.1.1&#xff0c;不是2024.2.1&#xff0c;软件下载地址也在链接中提供了 ‘go’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 在 Windows 搜索栏中输入“环境变量”&#…...

路由等保测评

1.身份鉴别 应对登录的用户进行身份标识和鉴别&#xff0c; 身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换。 可以使用“ service password-encryption"命令对存储在配置文件中的所有口令和类似数据进行加密&#xff0c; 以避免攻击者通过读取配…...

C# 反射之动态生成dll/exe

这个可能应该属于反射的高级使用范围了&#xff0c;平常在项目中使用的人估计也不是很多。由于使用反射的话会降低性能&#xff0c;比如之前用到的GetValue、SetValue等之类&#xff0c;但是使用这种方式会大大提高效率&#xff0c;在这里我只想说&#xff0c;都直接写IL指令了…...

Rust 所有权 Slices

文章目录 发现宝藏1. Slice 的基础知识1.1 什么是 Slice&#xff1f;1.2 如何创建 Slice&#xff1f; 2. 处理字符串 Slice2.1 字符串的 Slice2.2 字符串的 Unicode 和切片 3. 在函数中使用 Slice3.1 传递 Slice 给函数3.2 可变 Slice 的函数 4. 复杂示例4.1 处理多维数组的 Sl…...

windows 安全与网络管理问题

问题&#xff1a;当编写的脚本或程序运行的时候&#xff0c;可能被windows阻止访问网络甚至被删除 避免被删除 wini 进入设置界面 -> 选择更新与安全 -> 选择windwos defender -> 点击添加排除项&#xff0c;将指定的文件或目录排除&#xff0c;避免被软件删除 允许…...

基于Python实现一个庆祝国庆节的小程序

功能&#xff1a; 添加互动功能&#xff1a;允许用户选择不同的祝福语或者查询不同的国庆节信息。动态背景音乐&#xff1a;播放国庆节相关的背景音乐。增加节日小测验&#xff1a;提供一些关于国庆节的趣味小测验&#xff0c;让用户参与。增强图形用户界面 (GUI)&#xff1a;…...