【iOS自动化测试】第一章:方案调研

这篇具有很好参考价值的文章主要介绍了【iOS自动化测试】第一章:方案调研。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

目前Android端已完成了相应的框架搭建,并实际落地产出了,由于Android使用的是Unittest+HtmlTestRunner产出报告,需要增加新功能的话需要改动到底层框架,所以目前在负责的iOS端打算采用Pytest+Allure方式来进行,优点是更好的插件支持,报告也会更好看(装逼)点

PS:Android端自动化运行相比iOS自动化确实会稳定很多
【iOS自动化测试】第一章:方案调研

一 iOS自动化框架及工具介绍

1.UIAutomation
UIAutomation 是苹果提供的 UI 自动化测试框架,使用 JavaScript 编写。

基于 UIAutomation 有扩展型的工具框架和驱动型的框架。扩展型框架以 JavaScript 扩展库方法提供了很多好用 js 工具,注入式的框架通常会提供一些 Lib 或者是 Framework,要求测试人员在待测应用的代码工程中导入这些内容,框架可以通过他们完成对 app 的驱动。

驱动型 UI Automation 在自动化测试底层使用了 UI Automation 库,通过 TCP 通信的方式驱动 UI Automation 来完成自动化测试,通过这种方式,编辑脚本的语言不再局限于 JavaScript。这个工具在 iOS UI 自动化测试中使用非常广泛

2.XCTest
XCTest 是苹果在 iOS 7 和 Xcode5 引入的一个简单而强大的测试框架,集成在 Xcode 中,用来编写测试代码。它提供了各个层次的测试。

XCTest 测试编写起来非常简单,并且遵循 xUnit 风格。

Xcode 在创建工程时,会默认使用 XCTest,并且默认创建了 Unit Test(单元测试)和 UI Test(界面测试)两个 Target,其中 Unit Test 主要用于测试代码的大部分基本功能,比如绝大多数 Model 的类和方法测试,业务逻辑测试,网络接口调用测试等等。

UI Test 一般会考虑到用户的交互流程,模拟用户的交互操作,利用 XCTest 的 UI 记录特性来获取界面上的一些列视图元素和操作事件,然后在测试方法中触发事件。

所以这是一个可以提供各个层次的测试的框架,比如单元测试,自动化测试,性能测试等
XCTest参考资料

3.KIF
KIF 是 Keep It Functional 项目的缩写,是一款 iOS app 功能性测试框架,来自 Square,该测试框架只支持 iOS。

所有测试使用 Objective-C 语言编写,对测试人员来讲,需要熟练的掌握 Objective-C 语言 , 对苹果开发者来说非常容易上手,更是一款开发者广为推荐的测试工具。

KIF 使用未公开的 Apple API(私有 API),这对于测试目的而言是安全的,基于第三方 iOS UI 的单元测试框架,所以可以做项目的单元测试,也可以做 UI 集成测试。但缺点是运行较慢。

KIF参考资料

4.Frank

Frank 是 iOS 开发环境下一款实现自动测试的工具,Xcode 环境下开发完成后,通过 Frank 实现结构化的测试用例,其底层语言为 Ruby,作为一款开源的 iOS 测试工具,在国外已经有广泛的应用。

但是国内相关资料却比较少。其最大的优点是允许我们用熟悉的自然语言实现实际的操作逻辑。

它提供了针对 iOS 平台的功能测试能力,可以模拟用户的操作对应用程序进行黑盒测试,并且使用 Cucumber 编写测试用例,使测试用例如同自然语言一样描述功能需求,让测试以“可执行的文档”的形式成为业务客户与交付团队之间的桥梁。

  • 优点

测试场景是在 Cucumber 的帮助下,用可理解的英语句子写的,还有活跃的社区支持,以及不断扩大中的库。

  • 缺点

对手势的支持有限,所以在设备上运行测试有点难。

5.Calabash-iOS
Calabash 是一个适用于 iOS 和 Android 开发者的跨平台 app 测试框架,可用来测试屏幕截图、手势和实际功能代码。

Calabash 开源免费并支持 Cucumber 语言,Cucumber 能让你用自然的英语语言表述 app 的行为,实现 BDD(Behavior Driven Development,行为驱动开发)。

而 Calabash-iOS 就是一个基于 Calabash 的 iOS 的功能、自动化测试框架。

  • 优点:

有大型社区支持;
列表项简单,类似英语表述的测试语句支持在屏幕上的所有动作,如滑动,缩放,旋转,敲击等。

  • 缺点:

测试步骤失败后,将跳过所有的后续步骤,这可能会导致错过更严重的产品问题。
测试耗费时间,因为它总是默认先安装 app,需要 Calabash 框架安装在 iOS 的 ipa
文件中, 因此测试人员必须要有 iOS 的 app 源码。

除了 Ruby,对其他语言不友好

Calabash参考资料

6.Appium
Appium 是一个开源的、跨平台的自动化测试工具,支持 iOS、Android 和 FirefoxOS 平台。

通过 Appium,开发者无需重新编译 app 或者做任何调整,就可以测试移动应用,可以使测试代码访问后端 API 和数据库。

它是通过驱动苹果的 UIAutomation 框架来实现的 iOS 平台支持,底层使用的是WEBDriverAgent来进行驱动

开发者可以使用 WebDriver 兼容的任何语言编写测试脚本,如 Ruby,C#,Java, JS,OC, PHP,Python,Perl 和 Clojure 语言。

今日主角:Appium

7.AirTest
Airtest是由网易游戏推出的UI自动化测试解决方案,是一个跨平台的、 基于图像识别的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS。并且提供了基于UI控件识别的Poco框架,目前也支持Android原生、iOS原生、Unity3D、cocos2dx、UE4和Egret等平台。为了让测试人员更好上手,网易还贴心地提供了AirtestIDE工具,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写 Airtest 和 Poco 代码

相比于Appium,POCOUI最大的亮点是其内部集成了自研的图像识别进行点击,代码编写的语法会更为精炼
PocoUi 参考资料

结合以上7种方案,如果能使用Object-C进行XCTest用例编写其实是最优选择,但是由于本人对Object-C不熟悉,学习一门语言只用于做iOS自动化相关成本较大,所以综合考量决定在Appium和Airtest之间做对比
Appium做自动化测试的都应该熟悉,Airtest作为网易开源的项目也是很不错的,那么接下来看下两者有何区别

二 Appium与Airtest的iOS自动化测试对比

对比项 Appium Airtest
安装配置 中等:需要前置的一些依赖环境和填写启动的参数 简单 IDE可直连
语言支持 涵盖主流大部分语言 python为主
上手难易 中等 容易
市场占有率 TOP1 逐渐增加
支持平台 Android,iOS,H5 Android,iOS,H5
集成框架 UiAutomator、UiAutomation框架 Poco元素识别、Airtest图像识别
多设备并行 支持 支持
相关资料 较少
社区支持与维护 有专门的社区支持维护,交流讨论较多 有Q群进行交流
后续升级 有保证 取决于网易团队后续维护
测试报告 HtmlTestRunner、Allure 有自己带的报告模板
CI持续集成 支持 支持
元素定位 部分页面无法获取元素 个人感觉元素定位不好用
执行效率 文本定位较快,其余定位较慢 文本定位较快,其余定位较慢
稳定性 一般,主要取决于WDA 一般,主要取决于WDA
编写效率 取决于对Appium-Api的熟悉程度 取决于对Airtest和PocoUI的Api熟悉程度
适用场景 适用于自研,原生的App应用 多用于快速构建图形脚本和游戏自动化

对比结论:

1.关于执行效率上,Appium与Airtest相差不大,主要还是通过元素的文本方式进行定位,脱离了文本想对元素进行定位速度都比较慢

2.关于代码编写效率上,本人使用Appium会好于Airtest(由于Android项目),Airtest的Api是新的,与appium的有所不同,对Api的熟悉需要一定过程,前期可能会较慢,后期熟练了会较快,Airtest对api的封装会更多一些,初始用者需要自己对Appium的Api进行封装

3.关于稳定性,Appium-wda和iOS-tagent都是基于facebook-wda(facebook未维护了,appium团队对其进行改造有在维护,airtest目前也有在改造维护中)进行封装改造的,试用时稳定性差不多,暂未出现掉线情况,iOS-tagent据说简化了内部的一些逻辑调用,不过总体体验下来差不多,对于高版本的iOS,Airtest官方好像还是推荐Appium的wda

4.关于适用场景,Appium主要是通过元素定位来进行自动化运行,适用于原生App下没有特殊强调对某种类型的app会更好用,属于兼容性较强的场景使用性Airtest由于背靠网易,所以在场景使用方面更受游戏公司的自动化运行,尤其是他的图像识别点击,能够更好的识别游戏自动化中的场景,不过Airtest也可以通过PocoUI进行元素点击,涉及图形多的,如游戏类的可以使用Airtest

5.对于特定场景的元素定位,部分App流下,Appium与Airtest均无法获取到其中的元素信息,从而导致无法对该部分内容进行校验,Appium每次切换页面需要手动刷新页面
Airtest可以实时显示界面,Airtest的连接方式相对于Appium会稍简单

6.关于后续版本维护方面,Appium目前社区维护稳定,几天一更新,Airtest目前看最新的维护时间是在3个月前,相比之下Appium的维护工作会更好

7.关于多设备并行,Appium与Airtest都可以运行多设备,目前我这都是根据Tidevice启动多个wda服务开启多个端口号进行,使用情况差不多

8.相对于其他方面的比较基本都差不多

由于公司的App是原生+H5相关的,对Appium的使用也比较了解,两者区别不是很大的情况下,还是选择使用Appium做iOS自动化测试

三 Appium驱动原理

驱动原理

XCUITest是苹果开发的一个做IOS自动化测试的框架,需要了解些Swift等iOS编程知识
WebDriverAgent是Facebook开发的一个iOS自动化测试工具,先来看下面的这张原理图:

【iOS自动化测试】第一章:方案调研
WDA在Client创建了一个Server,在手机端安装了一个叫作WebDriverAgentRunner 的一个应用;这个应用会接收来自 Server 的指令,并连接底层的XCTest.framwork,让 XCTest.framwork 调用苹果API来操作手机进行自动化

而appium是把WebDriverAgentRunner 给集成进去了,因此实现了appium的跨平台能力

【iOS自动化测试】第一章:方案调研
通过上图我们了解到 Appium 很粗暴的把整个 WebDriverAgent 直接集成到自己的项目里,然后通信机制就走 WebDriverAgent,Appium 其实就提供了一个 Client 端的作用。所以 iOS 9.3 系统之后自动化测试核心是 WebDriverAgent,Appium 就提供了一个 Client 端来写脚本和发送指令。

Appium 自动化架构模式可以用一个抽象的架构表示,如下图所示:

【iOS自动化测试】第一章:方案调研
从图中可以看出:

  1. Client 端是 Appium 之前本身提供的;
  2. Server 端是:WebDriverAgent 和 Instruments;( Appium 直接把 WebDriverAgent 整个集成进来,Instruments 是为了支持 iOS 9.3 之前的系统)
  3. 之前 Server 是和 bootstrap.jar 通信,这里 WebDriverAgent提供了WebDriverAgentRunner (类似 jar 的功能),WebDriverAgent与之通信;
  4. WebDriverAgentRunner 是一个应用,Client 和 server 运行了之后,WebDriverAgentRunner 会被装到手机上,这个应用会接收来自 Server 的指令,并连接底层的framwork,并告诉XCTest.framwork操作手机进行自动化
关于WebDriverAgent

FaceBook 出品:

  1. 实现了一个 server,通过 server 可以远程控制 iOS 设备:启动应用、关闭应用、点击、滚动等操作;
  2. 通过连接 framework 调用苹果的 API 执行动作;
  3. 支持多个设备同时进行自动化;
  4. Appium、Macaca 已经集成。
  5. 但是 WebDriverAgent仅仅只提供了一个 server(和 inspect 进行元素定位),并没有像Appium 一样提供 java 或 python 的 Client 端去写脚本,脚本执行的时候发送指令给server,然后去运行。WebDriverAgent 要求你自己去实现 Client 端,即拿 Java/ Python 的WebDriver 库进行封装,然后发送指令。所以 WebDriverAgent 其实就类似于 Appium server,就只是一个server。
Appium简介
Appium原理
  • Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的jsonwire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar’s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。
  • Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。
  • appium选择了client-server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及webdriver如何做到支持多语言的;
Appium优点
  1. 开源
  2. 跨架构:Native App、Hybird App、Web App
  3. 跨设备:Android、iOS、Firefox OS
  4. 不依赖源码
  5. 使用任何 WebDriver 兼容的语言来编写测试用例。比如 Java, Objective-C, JavaScript with
    Node.js (in both callback and yield-based flavours), PHP, Python,
    Ruby, C#, Clojure, 或者 Perl.
  6. 不需要重新编译APP
  7. 支持IOS手机录制视频
Appium理念
  • 你无需为了自动化,而重新编译或者修改你的应用。
  • 你不必局限于某种语言或者框架来写和运行测试脚本。
  • 一个移动自动化的框架不应该在接口上重复造轮子。(移动自动化的接口应该统一)
  • 无论是精神上,还是名义上,都必须开源。
Appium 在 iOS 下工具的变革
  • iOS 9 之前一直以 instruments 下的 UIAutomation为驱动底层技术(弊端由于 instruments
    的限制,单台 mac 只能对应单台设备);
  • iOS 9.3 时代推出 XCUITest 工具,用以替代 UIAutomation;
  • iOS 10 时代苹果直接废弃了 UIAutomation、Facebook 推出 WebDriverAgent(实现的 server
    能够支持单台 mac 对应多个设备);
  • Appium 在iOS 9.3 后全面采用 WebDriverAgent 的方案。

下一章内容:

【iOS自动化测试】第二章:环境搭建文章来源地址https://www.toymoban.com/news/detail-487780.html

到了这里,关于【iOS自动化测试】第一章:方案调研的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python从小白到大师-第一章Python应用(八)应用领域与常见包-自动化办公word

    目录 一.python-docx 二.pypiwin32 Python-docx是一个用于创建、修改和读取Microsoft Word文件(.docx)的Python库。它提供了一组丰富的功能,使开发人员能够使用Python生成自定义的Word文档。 以下是python-docx库的一些主要特点和功能: 创建和编辑Word文档:可以使用python-docx库创建新的Wor

    2024年02月21日
    浏览(43)
  • python从小白到大师-第一章Python应用(七)应用领域与常见包-自动化办公PPT

    目录 一.pywin32com 二.pptx Pywin32com是一个Python库,它提供了与Microsoft Windows操作系统交互的能力。它基于COM(Component Object Model)技术,允许开发人员使用Python操作Windows应用程序、文件系统、注册表和其他Windows组件。 Pywin32com提供了广泛的功能,包括: 控制Microsoft Office套件中的

    2024年02月21日
    浏览(41)
  • 【Rust】Rust学习 第十一章编写自动化测试

    Rust 是一个相当注重正确性的编程语言,不过正确性是一个难以证明的复杂主题。Rust 的类型系统在此问题上下了很大的功夫,不过它不可能捕获所有种类的错误。为此,Rust 也在语言本身包含了编写软件测试的支持。 编写一个叫做  add_two  的将传递给它的值加二的函数。它

    2024年02月13日
    浏览(40)
  • b站第一,Python自动化测试实战详细教学,3天教你学会自动化测试

    目录 简介 Python自动化测试概述 Python自动化测试目标 Python自动化测试流程 1. 测试计划和设计 2. 测试脚本开发 3. 测试执行和管理 4. 测试维护和优化 Python自动化测试最佳实践 Python自动化测试工具和框架 结论 自动化测试是软件开发过程中一个必不可少的环节。而Python作为一门

    2024年02月03日
    浏览(43)
  • iOS非越狱自动化脚本的方案

    因为苹果审核过于严格,私有 API 是不允许上架 appstore,但是自动化脚本是很多手游外挂的刚需,为了绕过苹果的限制,采用现有的合法规则的办法,实现 iPhone 的自动化操作,类似按键精灵的功能,我查询了很多资料,做了一下尝试: 首先放弃了PTFakeTouch、appuim、xctest、ui

    2024年02月11日
    浏览(40)
  • IOS自动化测试元素定位

    一、元素属性介绍   1、元素属性   2、查看各定位方式执行效率 二、iOS常用定位方法   1、accessibility_id   2、class_name   3、Xpath   4、ios_class_chain(类型链)   5、ios_predicate(谓词) 一个页面最基本组成单元是元素,想要定位一个元素,我们需要特定的信息来说明这个元素的唯一特

    2024年01月18日
    浏览(44)
  • IOS自动化测试环境搭建教程

    目录 一、前言 二、环境依赖 1、环境依赖项 2、环境需求与支持 三、环境配置 1、xcode安装 2、Git安装 3、Homebrew安装(用brew来安装依赖) 4、npm和nodejs安装 5、libimobiledevice安装 6、idevicesinstaller安装 7、ios-deploy安装 8、Carthage安装 9、Appium安装 【我安装的appium版本:1.21.0】 10、

    2024年02月15日
    浏览(56)
  • 【Python 自动化】自媒体剪辑第一版·思路简述与技术方案

    大家都知道我主业是个运维开发(或者算法工程师),每天时间不多,但我又想做自媒体。然后呢,我就想了个方案,每天起来之后写个短视频的脚本,包含一系列图片和文字,然后上班的时候给它提交到流水线上跑,下班之前就能拿到视频,然后往各大平台上一传,是不是

    2024年02月09日
    浏览(40)
  • iOS自动化测试工具-tidevice

    在iOS测试过程中,经常会需要查看设备udid、查看包名,安装和卸载应用,获取设备截图,获取性能数据等操作,Android有丰富的adb命令可以使用,iOS的tidevice工具就类似于Android的adb,可以提供这些功能; 一直以来也没有能够直接获取iOS性能数据的工具,tidevice可以方便的获取

    2024年01月22日
    浏览(51)
  • 从0开始的ios自动化测试

    最近由于工作内容调整,需要开始弄ios自动化了。网上信息有点杂乱,这边我就按我的实际情况,顺便记录下来,看是否能帮到有需要的人。 安装tidevice 它的作用是,帮你绕开ios必须用mac的xcode启动wda,直接在windows上使用tidevice启动wda就行了(windows电脑需要先安装iTunes)。

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包