软件测试|App自动化之Appium工作原理

简介: 软件测试|App自动化之Appium工作原理

问题

在工作中,使用什么进行的App端自动化?

有没有用到Appium 这个框架?

对Appium熟悉吗?

Appium底层原理是怎样驱动手机进行操作的?

考察点

面试官想了解:

  • 是否用过Appium框架
  • 对Appium框架的常用API是否熟悉
  • 移动端端特殊控件、特殊操作是否有解决方案
  • 是否看过Appium的源码
  • 是否了解Appium框架的底层工作原理

技术点

涉及的技术点:

  • Appium API
  • Appium 底层通讯协议
  • 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端口建立映射,通过该映射的链路进行通讯。

总结

在这里插入图片描述

  1. Client端发送操作指令给Appium Server
  2. Appium Server通过appium-uiautomator2-driver发送JWP协议的请求到Androidappium-uiautomator2-server
  3. appium-uiautomator2-server调用Android系统的 Google UIAutomator2 去以执行自动化具体的操作
  4. 操作完成后返回结果对象AppiumResponseappium-uiautomator2-driverAppiumServer再返回给Client端,Client端得到最终执行操作的结果

注意

  • appium-uiautomator2driverserver之间的通信的协议是JWP协议
  • 创建AndroidDriver遵循的是W3C协议进行创建
相关文章
|
9月前
|
前端开发 测试技术 API
测试金字塔:别再只盯着UI自动化了
测试金字塔:别再只盯着UI自动化了
769 116
|
9月前
|
敏捷开发 测试技术 API
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
663 116
|
9月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
9月前
|
人工智能 自然语言处理 JavaScript
利用MCP Server革新软件测试:更智能、更高效的自动化
MCP Server革新软件测试:通过标准化协议让AI实时感知页面结构,实现自然语言驱动、自适应维护的自动化测试,大幅提升效率,降低脚本开发与维护成本,推动测试左移与持续测试落地。
|
9月前
|
测试技术 API 数据库
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
668 114
|
11月前
|
存储 人工智能 算法
AI测试平台实战:深入解析自动化评分和多模型对比评测
在AI技术迅猛发展的今天,测试工程师面临着如何高效评估大模型性能的全新挑战。本文将深入探讨AI测试平台中自动化评分与多模型对比评测的关键技术与实践方法,为测试工程师提供可落地的解决方案。
|
JSON JavaScript 测试技术
用Postman玩转电商API:一键测试+自动化请求教程
Postman 是电商 API 测试的高效工具,涵盖基础配置、自动化测试、环境管理与请求自动化,助你快速提升开发效率。
|
jenkins 测试技术 Shell
利用Apipost轻松实现用户充值系统的API自动化测试
API在现代软件开发中扮演着连接不同系统与模块的关键角色,其测试的重要性日益凸显。传统API测试面临效率低、覆盖率不足及难以融入自动化工作流等问题。Apipost提供了一站式API自动化测试解决方案,支持零代码拖拽编排、全场景覆盖,并可无缝集成CI/CD流程。通过可视化界面,研发与测试人员可基于同一数据源协作,大幅提升效率。同时,Apipost支持动态数据提取、性能压测等功能,满足复杂测试需求。文档还以用户充值系统为例,详细介绍了从创建测试用例到生成报告的全流程,帮助用户快速上手并提升测试质量。
1371 18
|
测试技术 Python
Python接口自动化测试中Mock服务的实施。
总结一下,Mock服务在接口自动化测试中的应用,可以让我们拥有更高的灵活度。而Python的 `unittest.mock`库为我们提供强大的支持。只要我们正确使用Mock服务,那么在任何情况下,无论是接口是否可用,都可以进行准确有效的测试。这样,就大大提高了自动化测试的稳定性和可靠性。
479 0
|
机器学习/深度学习 人工智能 jenkins
探索软件测试中的自动化与持续集成
【10月更文挑战第21天】 在软件开发的生命周期中,软件测试扮演着至关重要的角色。随着技术的进步和开发模式的转变,自动化测试和持续集成已经成为提高软件质量和效率的关键手段。本文将深入探讨自动化测试和持续集成的概念、实施策略以及它们如何相互配合以优化软件开发流程。我们将通过分析实际案例,展示这些技术如何在实际项目中发挥作用,以及面临的挑战和解决方案。此外,文章还将讨论未来趋势,包括人工智能在测试领域的应用前景。
404 17