本周六上课:重磅消息 | 2022年最新全栈测试开发技能实战指南(第3期)

一、前言

项目闲置下来了,终于抽空有时间搞自动化了,看了下网上的教程基本通篇都是android自动化的介绍 ,ios自动化方面的内容网上简介的少之可怜。由于本人对ios自动化也是第一次做,甚至对苹果电脑的使用都不太熟悉,花了大概一周时间粗略的看下ios开发知识,网上随手下载的来源于这两本《iOS开发从入门到精通.pdf》、《iOS开发指南:从零基础到App上架.pdf 》、至于Mac笔记本的学习完全是边使用边查询操作 ;本文完全秉着指导小白操作的流程带你一步一步搭建IOS自动化测试环境

以下内容参考了如下网站:

  • appium英文官方:https://appium.io/docs/en/drivers/ios-xcuitest/index.html

  • appium使用问题集锦:https://discuss.appium.io/  (需要:科学上网)

  • facebook-wda源码:https://github.com/kwmgenius/facebook-wda

  • WebDriverAgent for ios:  https://docs.katalon.com/katalon-studio/docs/installing-webdriveragent-for-ios-devices.html (需要:科学上网)

二、iOS 自动化相关框架介绍

自动化测试类工具 随着移动互联网的兴起,APP 测试的越来越被重视!Android 系统因为自己的开源性,测试工具和测试方法比较广为流传,但是 iOS 系统的私密性,导致很多测试的执行都有点麻烦。

为了帮助大家更好的执行 iOS APP 的测试,以下为大家收集了非常全面的 iOS 测试工具,涵盖各大领域,希望各位能有所认识

三、自动化测试类工具

1. UIAutomation

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

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

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

这个工具在 iOS UI 自动化测试中使用非常广泛。

具体参考资料:https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.html

2.XCTest

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

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

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

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

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

具体参考资料:

https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/01-introduction.html

3. KIF

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

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

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

具体参考资料:https://github.com/kif-framework/KIF

4. Frank

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

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

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

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

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

具体参考资料:https://www.testingwithfrank.com/

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,对其他语言不友好

具体资料获取路径:https://github.com/calabash/calabash-ios

6. Subliminal

Subliminal 是另一款与 XCTest 集成的框架,也是个不错 iOS 集成测试框架。

与 KIF 不同的是,它基于 UIAutomation 编写,对开发者隐藏 UIAutomation 中一些复杂的细节。可惜近几年没有更新了,若能支持 swift 就好了。

具体资料获取路径:https://github.com/Diaoul/subliminal

7.  Kiwi

Kiwi 是对 XCTest 的一个完整替代,使用 xSpec 风格编写测试。Kiwi 带有自己的一套工具集,包括 expectations、mocks、stubs,甚至还支持异步测试。

它是一个适用于 iOS 开发的 Behavior Driven Development(BDD)库,有着非常漂亮的语法。

优点在于其简洁的接口和可用性,易于设置和使用,可以写出结构性强易读测试,非常适合新手开发者

Kiwi 也是使用 Objective-C 语言编写,易于 iOS 开发人员上手。

具体资料获取路径:https://github.com/kiwi-bdd/Kiwi 8. Appium

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

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

它是通过驱动苹果的 UIAutomation 框架来实现的 iOS 平台支持。

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

具体资料获取路径:http://appium.io/

内测发布工具

1. fir.im

为开发者提供测试应用极速发布,应用崩溃实时分析、用户反馈收集等一系列开发测试效率工具服务,帮助开发者将更多精力放在产品的开发与应用的优化上。

2. 蒲公英

『蒲公英』是专为 iOS、Android 开发者提供的免费用应用内测、托管的平台,旨在解决开发者将应用分发给内测用户时的繁杂、低效的问题。

3. TestFlight

TestFlight 是苹果提供的应用测试工具,允许开发者邀请用户对应用的预发布版本进行测试,从而在应用正式发布至 App Store 前收集用户反馈。

以上常用框架介绍完了,本篇幅主要以appium进行实践讲解

Appium驱动IOS测试原理

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


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

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


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

Appium 自动化架构模式可以用一个抽象的架构表示,就是下面这样的:


从图中可以看出:

  • Client 端是 Appium 之前本身提供的;

  • Server 端是:WebDriverAgent 和 Instruments;( Appium 直接把 WebDriverAgent 整个集成进来,Instruments 是为了支持 iOS 9.3 之前的系统)

  • 最右边是一个手机

  • 之前 Server 是和 bootstrap.jar 通信,这里 WebDriverAgent 提供了 WebDriverAgentRunner (类似 bootstrap.jar 的功能),WebDriverAgent与之通信;

  • WebDriverAgentRunner 是一个应用,Client 和 server 运行了之后,WebDriverAgentRunner 会被装到手机上,这个应用会接收来自 Server 的指令,并连接底层的 XCTest.framwork,并告诉 XCTest.framwork 操作手机进行自动化。

关于 WebDriverAgent

FaceBook 出品:

  • 实现了一个 server,通过 server 可以远程控制 iOS 设备:启动应用、关闭应用、点击、滚动等操作;

  • 通过连接 XCTest.framework 调用苹果的 API 执行动作;

  • 支持多个设备同时进行自动化;

  • Appium、Macaca 已经集成。

  • 但是 WebDriverAgent 仅仅只提供了一个 server(和 inspect 进行元素定位),并没有像 Appium 一样提供 java 或 python 的 Client 端去写脚本,脚本执行的时候发送指令给 server,然后去运行。WebDriverAgent 要求你自己去实现 Client 端,即拿 Java/ Python 的 WebDriver 库进行封装,然后发送指令。所以 WebDriverAgent 其实就类似于 Appium server,就只是一个 server。

基础环境搭建

基础环境:一台苹果笔记本、一个iphone手机

基础环境

  • MacBook Pro: 10.15.7

Macbook Pro(做 iOS 测试,Mac 是绕不开的,我们依赖的软件环境需要运行在 Mac 上,必须要有一台 Mac 本(很贵),得攒银子咬牙买一台

Appium +iOS 自动化测试全网最全教程(实践、总结 、踩坑)相关推荐

  1. 快速上手docker-java,示例全网最全,带你踩坑,带你飞

    提前踩坑 刚入项目组,就开始用dokcer-java去干活了,由于之前没接触过,所以就开始全网找资料,于是乎,找了一堆博客,好像都差不多,虽然都能跑起来,但是我的需求并没有得以实现: ​ 无法连接远程 ...

  2. node npm 下载,安装,使用 全网最全教程

    node npm 下载,安装,使用 全网最全教程 1.前段时间 使用到vue的时候 需要下载node.js 废话不多说看步骤, 到node.js官网下载 最新的下载地址:[https://nodejs ...

  3. Windows实现appium+iOS自动化测试

    在前面的文章介绍了Windows上安装配置tidevice,环境搭建好后就实现了在Windows运行iOS自动化的第一步,接下来本文重点介绍在Windows上如何运行iOS自动化测试. 如果没有安装好 ...

  4. loki日志收集全网最全教程

    全网最全loki全流程描述,网上有很多教程都是不对的哈!这个是生产环境校验过的哈! 相关匹配及字段转换规则我已经给大家写好了. 部署架构: loki_service: 使用docker_compose ...

  5. 【Kali Linux 2020.1b】 全网 最新 安装 教程 ——你会踩到的坑,遇到的问题,难以哭诉的崩溃

    新kali 配置安装 pip + python 库模块 -- 亲测可行!!! https://editor.csdn.net/md/?articleId=107963768 有很人多说:本人擅长Ai. ...

  6. 从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)

    背景:SLAM小白,因为项目需要花了两天时间编译代码+连接雷达实现了交互. 踩了很多坑,简单记录一下,让后面感兴趣的朋友少走点弯路~ 肯定有很多不专业的.错误的地方,还请大家不吝赐教(噗通) 也可以见 ...

  7. python包发布到pypi或私有仓库 实践及踩坑 ModuleNotFoundError: No module named 'keyring.util.escape' 等

    0.写在开头: 封装我们自己写好的python包然后分享到网络提供给大家使用, 这本来是一个基本操作. 但是之前个人没有主动上传过自己封装的库到pypi, 正好趁这次自己封装简单包提供给大家用的机会, ...

  8. Python自动化测试 软件测试最全教程(附笔记),看完可就业

    最近看到很多粉丝在后台私信我,叫我做一期Python自动化测试的教程,其实关于这个问题,我也早就在着手准备了,我录制了一整套完整的Python自动化测试的教程,都上传在B站上面,大家有兴趣的可以去看一 ...

  9. python自动测试相机_Python + Appium+ IOS自动化测试

    1)搭建好Appium环境 2)拿到iOS开发APP项目文档(含***.xcodeproject文档) 3)cmd进入含.xcodeproject文档目标下利用:xcodebuild -sdk iph ...

  10. 抓包工具?我只选Fiddler,全网最全教程!

    目录 一.Fiddler原理与下载 二.Fiddler设置代理 2.1 谷歌.IE浏览器 2.2 火狐浏览器 2.3 Android客户端 2.4 IOS客户端 三.Fiddler界面及功能 3.1 ...

最新文章

  1. php的环境怎么配置文件,php环境下所有的配置文件以及作用
  2. import pymysql 没有模块_小白详细的 python 模块的运用
  3. hbase的HA模式配置和维护
  4. Android—Binder+AIDL
  5. 贷款,别相信这些人!
  6. int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”
  7. 【推荐】HTML5 Word Cloud——中文词云
  8. 深度系统优化工具_HiBit Uninstaller卸载工具【win版】
  9. c语言从入门到精通 PPT,C语言从入门到精通第1章讲述.ppt
  10. 通用印刷体文字识别_腾讯云通用文字识别GeneralOCR-图片文字识别 印刷体文字识别...
  11. 自然电位测井 基本原理、测量方法、曲线规律、曲线用途
  12. ps ui html,【ps制作网页页面】ps图像如何生成html?如何将PS制作的网页效果图变成可用的网页?PC端UI设计尺寸规范?...
  13. python绘制每日的时序图_GitHub - wavous/Python-100-Days: Python - 100天从新手到大师
  14. 海关179接口终极解决方案
  15. 用Enterprise Architect画类图和顺序图(一)
  16. 独家-县域统计年鉴Excel版(2000-2021年)-包含县市及乡镇卷
  17. 明星为啥选嫁官家富家?
  18. 搭建自己的 CDN 的乐趣和好处
  19. would dispatch back to the current handler URL [/student] again. Check your ViewResolver setup
  20. 钟汉良日记:多看电视剧也可以提升写作能力

热门文章

  1. java连接redis设置密码_jedis设置密码连接Redis
  2. JAVA图形化界面设计
  3. React Native入门-实战解析(上)
  4. MySql:学生表、教师表、课程表、分数表 练习
  5. 2022CVPR云分享 | 清华大学刘烨斌老师实验室四位讲者带你走进计算机视觉领域顶会...
  6. Swagger使用方法
  7. pvs-stdio ue4_PVS-Studio –用于C,C ++,C#和Java的静态代码分析器
  8. Qt读写Excel--QXlsx设置字体格式、样式8
  9. 航芯技术分享 | 了解汽车上的OBD
  10. STM32 USB_SPI_FLASH 简易U盘设计