• 0
  • 0
分享
  • App自动化之Appium工作原理!——软件测试圈
  • 小丸子🍡 2024-05-28 16:43:56 字数 2284 阅读 605 收藏 0

  Appium框架介绍

  Appium是什么?

  首先,Appium 是一款开源框架,生态丰富,社区强大,一直在被开发者维护;

  并且是一个灵活的跨平台的测试自动化工具,可以在iOS、Android 或 Windows、Mac 设备上进行移动应用的自动化测试运行,并且能够使用相同的 API 编写多个平台的测试脚本;

  Appium与Selenium类似,是一个跨语言的自动化框架,并且可以和任何测试框架相结合;可以使用不同的编程语言编写测试脚本,包括 Java、JavaScript、PHP、Ruby、Python 和 C#。

  Appium通信-各个端介绍

  Client端发送自动化指令给 Appium Server ,Appium Server 接收到 Client端发送的指令后,进行转换,转换为移动端能够识别的指令,然后发送给移动端设备,移动端设备根据指令进行操作。

  如下图为自动化通信交互:

1-1.jpg

  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通信-端与端之间

1-2.jpg

  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-3.jpg

  1. Client端发送操作指令给Appium Server

  2. Appium Server通过appium-uiautomator2-driver发送JWP协议的请求到Android的appium-uiautomator2-server

  3. appium-uiautomator2-server调用Android系统的 Google UIAutomator2 去以执行自动化具体的操作

  4. 操作完成后返回结果对象AppiumResponse给appium-uiautomator2-driver,AppiumServer再返回给Client端,Client端得到最终执行操作的结果

  注意

  · appium-uiautomator2的driver和server之间的通信的协议是JWP协议

  · 创建AndroidDriver遵循的是W3C协议进行创建


作者:程序员小濠    

来源:http://www.51testing.com/html/11/n-7798011.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、Jmeter简介Jmeter是由Apache公司开发的一个纯Java的开源项目,即可以用于做接口测试也可以用于做性能测试。Jmeter具备高移植性,可以实现跨平台运行。Jmeter可以实现分布式负载。Jmeter采用多线程,允许通过多个线程并发取样或通过独立的线程对不同的功能同时取样。Jmeter具有较高扩展性。二、Jmeter安装1、安装JDK,必须JDK1.7以上的版本,推荐1.8的版本2、进入官网:http://jmeter.apache.org/download_jmeter.cgi下载最新的Jmeter版本,下载后解压到非中文目录,如:D:\3、配置Jmeter的环境变量。新增变...
            16 15 3010
            分享
          •   微软正在完善必应聊天,将单次会话提高到 10 条,每日上限 120 条之外,正在应用户需求添加新的功能和特性。  微软广告和网络服务主管 Mikhail Parakhin 会回复用户的推文中表示,现在用户呼声最高、要求最多的一个需求就是,保存和必应的聊天记录。从推文信息来看,微软内部正在推进该功能。  另一位用户咨询 Parakhin 是否会在语言方面有进一步的改进。IT之家翻译他的回复内容如下:“我们改进了匈牙利语等一些流行度不高的语言,接下来我们会不断改进本地化,下一个重点目标是希腊语”。作者:故渊原文链接:IT之家(ithome.com)
            0 0 642
            分享
          • 作为软件开发从业者,API 调试是必不可少的一项技能,在这方面 Postman 做的非常出色。但是在整个软件开发过程中,API 调试只是其中的一部分,还有很多事情 Postman 无法完成,或者无法高效完成,比如:API 文档定义、API Mock、API 自动化测试等等。Apifox 就是为了解决这个问题而生的。接口管理现状一、常用解决方案使用 Swagger 管理 API 文档使用 Postman 调试 API使用 MockJs 等工具 Mock API 数据使用 JMeter 做 API 自动化测试二、存在的问题1、维护不同工具之间数据一致性非常困难、低效。并且这里不仅仅是工作量的问题,...
            12 11 672
            分享
          •   一、 越权  越权,指攻击者绕过权限认证对功能或敏感内容进行非授权访问,例如:使用用户A的权限去操作用户B的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞的产生源于系统对用户提交信息缺少必要的权限校验,导致其他用户的信息或用户数据被非法篡改或查询。该漏洞导致的直接结果是信息泄露,严重程度取决于信息的敏感程度。  一般越权漏洞容易出现在权限页面(如查询类操作、账号修改、转账交易)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,服务端需对请求报文中的身份校验参数进行合法性校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越...
            13 13 1315
            分享
          •   前言  Unittest是Python自带的自动化测试框架,提供了基本的控制结构和模型概念。  由于Unittest功能较为基础,因此在实际框架实战中往往需要对其功能进行扩充。  比如:  ·生成HTML报告  ·多线程并发(并且报告不混乱)  ·自动重试出错用例  ·为用例提供tags标签和level等级等,往往需要我们对Unittest框架进行二次开发和扩展,由于Unittest框架清晰的API,扩展和定制也非常方便。  unittest.TestResult类简介  TestResult类一般在TestRunner类中实例化,并穿梭于每个执行的测试套件和测试用例中用于记录结果。  T...
            1 1 883
            分享
      • 51testing软件测试圈微信