Appium是如何工作的

Appium是由node.js开发的开源自动化测试工具,可用来测试移动端的Native、Hybrid和移动Web应用,被测平台包括Android和iOS(最近宣称已支持Windows)。

Native apps – 使用Android、iOS和Windows SDK开发的应用。

Mobile web apps – 是用移动设备上的浏览器访问的Web应用。

Hybrid apps – 也就是Web和native混合的应用,通常是既有native view,也有web view。外观看起来是一个native应用,但实则用 web view来访问展示Web内容。

Appium的简单架构如下:

  • Testcase – 用来测试特定功能和场景的测试代码,可以使用Java, C#, Python, Ruby, JavaScript等编程语言编写。
  • Appium server – Node.js开发的HTTP服务器,运行在本地或云端。启动后可用来接受Appium client通过JSON Wire Protocol发送的请求,并调用相应驱动连接相应的自动化测试框架、实现在移动设备上的操作。
  • Appium client – 与测试代码同开发语言的Appium库,用来和Appium Sever建立连接,可通过JSON Wire Protocol向Appium Sever发送http request,并接受JSON格式的response数据。
  • Bootstrap.jar – Appium初始化时推送到Android设备上的一个UIAutomator测试脚本(中间件)。主要用来监听和执行Appium Server发送的Appium Command。
  • Bootstrap.js – Appium初始化时推送到iOS设备上的一个UIAutomation测试脚本。主要用来监听和执行Appium Server发送的Appium Command。

需要指出的是,由于Appium技术栈的复杂性,以及版本的不断更新迭代,我无法保证该架构的绝对正确。

一些零散的补充:

1. Appium server如何判定目标设备?

测试代码需要通过Desired capabilities来初始化Appium client,然后才和server建立session,建立session后会返回一个sessionID。每次client向server发送HTTP API请求时,会在API URL里带上这个sessionID,所以,server可以通过sessionID获取到目标设备。

2. 这里使用的JSON Wire Protocol和Web driver有关系吗?

Appium在client和server端的交互上同样依靠Webdriver API。也就是说Appium集成了Selenium。

3. UIAutomator和UIAutomator2的区别?

UIAutomator是Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架。

UIAutomator2(UiAutomator V2)是对UIAutomator的更新,比如新增了AccessibilityService服务,可以实现Toast的获取。

UIAutomator2的原理也和UIAutomator不同,UIAutomator2会在移动设备上安装两个应用(摆脱了bootstrap.jar)来实现监听和执行Appium Command的目的,如图:

总结一下Appium的工作流程:

1. 在本地或云端的特定端口启动Appium Server。

2. 测试代码定义Desired capabilities,Desired capabilities包括但不仅限于以下信息:

· 是启用Android还是iOS,

· 是启动相应浏览器还是特定Activity的App,

· App安装文件的地址,

· 测试设备的唯一标识符,

· 测试设备的平台版本号,

· 自动化测试框架的名称。

更多信息:
https://appium.io/docs/en/writing-running-appium/caps/

3. 测试代码通过Desired capabilities创建一个Appium Client实例,并和Appium Server建立Session(POST请求)。Appium Server通过对Desired capabilities的分析,确定调用相应的自动化测试框架(
UIAutomator/UIAutomator2/XCUITEST/UIAutomation等)和测试目标设备,根据当前所采用的自动化测试框架,向目标设备推送中间件文件(Bootstrap.jar/Bootstrap.js)或者其它安装文件。

4. 测试设备通过推送过来的中间件或者App启动对Appium Command的监听。

5. Appium Server向Appium Client返回SessionID,表明Session已经建立成功。

6. 测试代码通过Appium Client向Appium Server发送测试步骤所需要的Appium Command。

7. Appium Server接受request,通过当前的自动化测试框架,向测试设备发送Appium Command。

8. 测试设备上的中间件或者Appium安装的辅助App接受Appium Command,并在测试设备执行Appium Command规定的操作。并返回操作结果

9. Appium Sever接受 Appium Command的执行结果,并返回给Appium Client。

10.测试代码根据返回的结果,继续执行其它测试步骤,直到测试结束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lemon2050

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值