初级面试题
请讲一下 appium 的原理?
面试题目
- 级别: L1
- 知识模块: App 自动化测试
请讲一下 appium 的原理?
公司
- 优酷外包
招聘类型
- 社招
- 校招
题目解析
首先,对 Appium 框架进行介绍,说明对应框架的特性;再画出通信原理图进行解释说明;说明一下常用操作的 API;最后进行整体的总结。
Appium 框架介绍
Appium 是什么?
首先,Appium 是一款开源框架,生态丰富,社区强大,一直在被开发者维护;
并且是一个灵活的跨平台的测试自动化工具,可以在 iOS、Android 或 Windows、Mac 设备上进行移动应用的自动化测试运行,并且能够使用相同的 API 编写多个平台的测试脚本;
Appium 与 Selenium 类似,是一个跨语言的自动化框架,并且可以和任何测试框架相结合;可以使用不同的编程语言编写测试脚本,包括 Java、JavaScript、PHP、Ruby、Python 和 C#。
Appium 通信-各个端介绍
Client
端发送自动化指令给 Appium Server ,Appium Server 接收到 Client 端发送的指令后,进行转换,转换为移动端能够识别的指令,然后发送给移动端设备,移动端设备根据指令进行操作。
如下图为自动化通信交互:
Client 端
Client 端 就是运行编写的自动化项目代码,使用 Appium-client 提供的 API 来进行用例的编写。
其中,声明DesiredCapabilities
对象,指定被测设备及 app 的相关信息;DesiredCapabilities
对象中指定automationName
的 value 值为UiAutomator2
,这样才可以通过 Appium Server
去创建一个 Android 的 session 会话
自动化项目代码中首先请求创建一个 AndroidDriver 实例,需要传入Appium Server
的 URL 及 DesiredCapabilities 对象
Appium Server
Appium Server 启动时默认的占用的端口号为 4723,主要作用就是进行 API 请求的监听。 接收 Client 端发送的命令,并进行转换,转为移动端可识别的指令,并发送给移动端设备进行操作,再等待移动设备返回操作结果。 Appium Server 端接收到移动设备返回的结果再将操作结果发送给 Client 端。
其中,Appium server 可以和自动化项目代码同时放在 Client 端,也可以放在云端。 如果与代码同时放在 Client 端上,Appium Server 的 IP 地址为 127.0.0.1; 如果放在云端,Appium Server 的 IP 地址为云端服务器的 IP 地址。
Android 移动端
Appium 基于 JSON Wire 协议,通过调用 UIAutomatior 命令,实现 APP 的自动化测试。 其中,UIAutomator 测试框架是 Android SDK 自带的 APP UI 自动化测试 Java 库。
总结
客户端发送请求给 Appium Server,Appium Server 转换请求给移动端,在移动端操作完成后返回响应内容给 Appium Server,Appium Server 再把结果返回给客户端。
Appium 通信-端与端之间
Client 端与 Appium Server
客户端请求创建 driver 会话,将声明的 capabilities 启动参数通过端口 4723 传递给 Appium Server;
Appium Server 基于 capabilities 中的 automationName 属性,重定向到相应的驱动模块。 如果 automationName 是 uiautomator2,Appium Server 重定向到 UIAutomator2 Driver,此时创建 session 会话并生成对应的 sessionID。
Appium Server 与 Android 移动端
APK 安装
- appium settings
为了在 Android 手机上运行应用程序,Appium 需要有一定的权限来控制系统设置。 Appium 安装了一个小应用程序 io.appium.settings,安装成功后,Appium Settings 在后台运行。
- uiautomator2 server
由于使用的是 UIAutomator2 Driver,所以要在 Android 手机上安装 Driver 相关的 apk,即 appium-uiautomator2-server-xx.apk。
安装完成后,Appium Server 的8200端口 和 Android 设备端的6790端口建立映射,通过该映射的链路进行通讯。
总结
-
Client
端发送操作指令给Appium Server
-
Appium Server
通过appium-uiautomator2-driver
发送JWP
协议的请求到Android
的appium-uiautomator2-server
-
appium-uiautomator2-server
调用Android
系统的Google UIAutomator2
去以执行自动化具体的操作 - 操作完成后返回结果对象
AppiumResponse
给appium-uiautomator2-driver
,AppiumServer
再返回给Client
端,Client
端得到最终执行操作的结果
注意
appium-uiautomator2
的driver
和server
之间的通信的协议是 JWP 协议- 创建
AndroidDriver
遵循的是W3C
协议进行创建
答案
Appium 的原理是利用 WebDriver 协议,通过将测试命令转换为特定平台(如 iOS 和 Android)的原生自动化框架(如 UIAutomator2、XCUITest 等)支持的命令,从而控制移动设备进行自动化测试。它作为一个 HTTP 服务器运行,接收客户端的请求,并将这些请求转换为设备能理解的命令,通过设备上的自动化引擎执行测试操作,并返回结果。
这使得 Appium 能够跨平台测试不同类型的移动应用(原生、混合和 Web 应用),而无需修改源代码,支持多种编程语言编写测试脚本。
app 自动化测试中控件定位方法有哪些?
面试题目
- 级别: L1
- 知识模块: App 自动化测试
app 自动化测试中控件定位方法有哪些?
公司
- 某金融公司
招聘类型
- 社招
- 校招
题目解析
在 Appium 中,控件定位是指通过一些标志性的特征来定位应用界面中的元素,以便进行自动化测试操作。Appium 支持多种控件定位方式,以下是一些常见的方法。
定位策略 | 描述 |
---|---|
Accessibility ID | 识别一个唯一的 UI 元素,对于 XCUITest 引擎,它对应的的属性名是 accessibility-id ,对于 Android 系统的页面元素,对应的属性名是 content-desc |
Class name | 对于 iOS 系统,它的 class 属性对应的属性值会以XCUIElementType 开头,对于 Android 系统,它对应的是 UIAutomator2 的 class 属性(e.g.: android.widget.TextView) |
ID | 原生元素的标识符,Android 系统对应的属性名为resource-id ,iOS 为name |
Name | 元素的名称 |
XPath | 使用 XPath 表达式查找页面所对应的 xml 的路径 |
Image | 通过匹配 base 64 编码的图像文件定位元素 |
Android UiAutomator (UiAutomator2 only) | 使用 UI Automator 提供的 API, 尤其是 UiSelector 类来定位元素,在 Appium 中,会发送 Java 代码作为字符串发送到服务器,服务器在应用程序的环境中执行这段代码,并返回一个或多个元素 |
Android View Tag (Espresso only) | 使用 view tag 定位元素 |
Android Data Matcher (Espresso only) | 使用 Espresso 数据匹配器定位元素 |
IOS UIAutomation | 在 iOS 应用程序自动化时,可以使用苹果的 instruments 框架查找元素 |
答案
App 自动化测试中控件定位方法包括:通过元素的 ID、Name、Class Name、Accessibility ID、XPath、CSS Selector(仅限 WebView)、UIAutomator(Android 特有)等方法进行定位,以便准确地找到并操作应用中的 UI 元素。
app 的类型以及如何根据不同的类型进行测试
面试题目
- app 的类型以及如何根据不同的类型进行测试
公司
- 大众外包
招聘类型
- 社招
- 校招
题目解析
考察对于 app 应用基本概念以及对于主流移动端系统的熟悉程度。
- 原生应用(Native App):
- 定义:原生应用是为特定移动操作系统(如 Android 或 iOS)开发的应用程序。它们使用该操作系统的原生编程语言(如 Java 或 Kotlin 对于 Android,Objective-C 或 Swift 对于 iOS)进行开发。
- 测试策略:针对原生应用的测试通常包括功能测试、性能测试、兼容性测试等。
- Android 自动化框架:常用的 Android 自动化测试框架包括 UI Automator、Espresso 等。
- iOS 自动化框架:iOS 自动化测试框架包括 XCUITest 和 Appium 等。
- 混合应用(Hybrid App):
- 定义:混合应用结合了 Web 应用和原生应用的特性,使用 Web 技术(如 HTML、CSS、JavaScript)开发,并通过封装工具(如 Cordova、React Native)转化为原生应用。
- 测试策略:混合应用需要针对 UI、性能以及 Web 视图与原生功能交互的测试。
- 自动化框架:常用的混合应用自动化测试框架包括 Appium、Selendroid 等。
- Web 应用(Web App):
- 定义:Web 应用是在浏览器中运行的应用程序,通常使用 Web 技术(如 HTML、CSS、JavaScript)开发。
- 测试策略:Web 应用的测试重点通常包括功能测试、跨浏览器兼容性测试、性能测试等。
- 自动化框架:常用的 Web 应用自动化测试框架包括 Selenium、Cypress 等。
- Android 和 iOS 原生应用的框架区别:
- Android:Android 应用通常使用 Java 或 Kotlin 编程语言开发,主要使用的测试框架包括 UI Automator 和 Espresso。
- iOS:iOS 应用通常使用 Objective-C 或 Swift 编程语言开发,主要使用的测试框架包括 XCUITest 和 Appium。
- Android 底层自动化测试框架
- UIAutomator2:
- UIAutomator2 是 Android 平台的自动化测试框架,由 Google 开发和维护。它可以用于执行 UI 级别的黑盒自动化测试,并且可以跨应用程序执行操作。
- 特点:UIAutomator2 支持跨应用程序测试,可以通过 UI 界面对应用进行操作,能够与设备进行交互(如模拟点击、滑动、输入等),并且具有较高的性能。
- UIAutomator2:
- iOS 底层自动化测试框架
- XCUITest:
- XCUITest 是苹果公司推出的 iOS 应用自动化测试框架,用于编写和执行 iOS 原生应用的 UI 自动化测试。
- 特点:XCUITest 采用 Xcode 测试框架,支持 Objective-C 和 Swift 语言,可以对 iOS 应用的 UI 进行测试,并且具有稳定性和性能优势。 在 Android 和 iOS 原生应用的自动化测试中,UIAutomator2 和 XCUITest 是两种主要的底层框架,用于实现对应用 UI 界面的操作和验证。这些框架通过模拟用户操作和检测应用界面元素来实现自动化测试,提高测试效率和覆盖范围。
- XCUITest:
答案
原生应用使用特定操作系统的语言开发,测试包括功能、性能和兼容性,使用框架如 UI Automator(Android)和 XCUITest(iOS);
混合应用结合 Web 和原生技术开发,测试 UI、性能和交互,使用框架如 Appium;
Web 应用在浏览器中运行,测试功能、兼容性和性能,使用框架如 Selenium;Android 和 iOS 应用的主要测试框架分别为 UI Automator2 和 XCUITest。
如何判断一个页面上元素是否存在
面试题目
- 级别: L1
- 知识模块: App自动化测试
如何判断一个页面上元素是否存在?
公司
- 优酷外包
招聘类型
- 社招
- 校招
题目解析
判断一个页面上元素是否存在是自动化测试中的常见需求,主要用于验证某个UI元素是否加载成功,确保页面功能的正常显示。
答案
判断一个页面上元素是否存在,可以通过尝试使用特定定位方法(如ID、Name、XPath等)查找该元素,并捕获可能的异常或检查返回的元素集合是否为空,如果元素被成功找到且不为空,则表示该元素存在。
或者可以通过获取当前页面 page_source,搜索该元素是否存在。