iOS 自动化测试踩坑(一): 技术方案、环境配置与落地实践

news2024/12/22 20:40:39

移动端的自动化测试,最常见的是 Android 自动化测试,我个人觉得 Android 的测试优先级会更高,也更开放,更容易测试;而 iOS 相较于 Android 要安全稳定的多,但也是一个必须测试的方向,这个系列文章记录了 iOS 自动化测试的一些实践。

Xcode 下载地址:Sign In - Apple
下载安装好的图标如下 :

先来看目前主流的 iOS 移动测试框架

  • Appium:目前最常用的 App 自动化测试框架,具备跨平台性
  • Calabash-IOS :BDD 模式,没有过多的了解使用
  • KIF:KIF 使用 XCTest 框架,需要对 Objective—C 、Swift 和 XCTest 掌握程度较高,这个对测试工程师来说学习成本太大
  • XCTest:苹果官方提供的 iOS 测试框架,要求同 KIF 一致
  • WebDriverAgent:由 Facebook 推出的一款 iOS 移动测试框架,也是 Appium 跨平台的底层驱动;WDA 本身也是一个完整的基于 webdriver 协议的框架
  • Uiautomation :在 Xcode8 后废弃

之前的 Android 自动化我们选择的是 Appium 框架作为底层的驱动框架,当时就介绍说 Appium 的优点之一就是跨平台性,其实也就是因为其底层封装了 WebDriverAgent,而我们期望的是:

  • 做一套可以跨平台支持的 App 测试方案,可以在公司的 Android 和 iOS 版本间自由切换测试
  • 并且在编程语言上要是测试工程师常用的 Java 或 Python,降低学习成本
    综上原因,那么最终的选择依然是 Appium。

Appium 官方提供了一个演练的 iOS App,以此为例进行演示。

Appium 演练 example 地址:
https://github.com/appium/ios-uicatalog 3

将项目 clone 到本地后用 Xcode 打开,注意打开 iOS 项目要打开以 .xcodeproj 结尾的文件 。

插入真机,Xcode 上选择真机,在Singing 中添加 AppleID 作为 account,生成一个本地的 Provisioning Profile 和设备上的证书

873×276 43.2 KB

踩坑:你可能会遇到如下的错误信息

1080×93 18.7 KB

1080×574 49.6 KB

这是因为你的 bundle identifier 不唯一导致,将其修改自定义为一个唯一的 bundle identifier 再尝试即可

834×419 35.5 KB

Xcode 中选中 Build,Success 后在手机中我们可以看到 UICatalog 已经被成功安装,尝试打开:

踩坑: 苹果对未在 AppStore 中上架的 App 做了限制,默认不受信任,所以我们需要手动将其设置为信任: 设置-通用-描述文件与设备管理

这个时候再打开 App,就可以正常操作运行了

上面介绍了这里是选中 Appium 作为移动测试框架,因此 Appium 相关环境的安装必不可少,具体安装细节可参考另一篇文章:Windows(Win10)、Mac下安装 Appium

另外还需要几个辅助测试工具和命令,依赖工具包安装:

1080×94 20.3 KB

查看模拟器列表:instruments -s devices 运行结果如下,可以看到最前面两行显示的其实是本机的 Mac 和连接的 iPhone 真机,剩下的是模拟器。

1080×568 129 KB

查看真机列表:idevice_id -l

1080×79 15.1 KB

安装 App:ideviceinstaller -i demo.app
命令行编译(在做持续集成时候可能会用到):

1080×85 27.3 KB

虽然 Appium 使用WDA作为底层的 iOS 自动化框架,但是由于版本的更新等原因,可能造成 Appium 本身自带的 WDA 会有 bug,因此为了保险起见,先手动下载 facebook 的 WebDriverAgent facebook WebDriverAgengithub

地址:https://github.com/facebookarchive/WebDriverAgent 2

1080×195 65.1 KB

然后我们进入 WebDriverAgent 进行编译,在 Scripts 下有一个 bootstrap.sh 脚本,执行它即可。

小技巧: 使用 bash -x 命令可以输出更详细的执行过程

1080×682 134 KB

踩坑: 安装最后我们可以看到部分依赖安装需要安装 Carthage 这个东西,如果没注意的话就会造成 RoutingHTTPServer 部分文件缺失,后面 build 就会报错 。

1080×254 36.2 KB

通过命令 brew install carthage 安装后再执行 ./Scripts/bootstrap.sh 即可。

根据 WebDriverAgent 官网提供的步骤,将参数替换为我们真机的参数后在真机上尝试build 。

1080×137 29.3 KB

踩坑: 执行完命令后可能会出现如下报错

1080×388 47 KB

从报错信息来看,缺少 development team,那么我们回到 Xcode,将 Automatically manage signing 进行勾选后选择一个 Team,注意要进入 WebDriverAgentRunner 中进行设置 。

设置好之后又会出现报错,如下:

这个报错信息就和我们之前提到的一样,bundle indentifler 不唯一,保险起见,这里将项目中所有的 Targets 都进行了修改

修改好之后我们再次 build,之前的问题解决了,不幸的是 build 又 fail 了,又出现了新的报错:

幸运的是在 Google 上一位外国友人轻描淡写的一句话解决了我的问题(感谢外国友人~)

没错,我们在报错出双击,进入到报错代码处,将 assign 改为 strong 后再次 build :

Build succeeded!!!老泪纵横…

最终,再执行

1080×123 25.6 KB

终于在 iOS 真机上看到了 WDA 的身影

上面是我所经历的各种坑,也都是我实测过一步步填平的,下面试我认识的小伙伴踩到的坑和填坑方法,作为补充供记录参考
1)执行 ./Scripts/bootstrap.sh ERROR in ./js/app.js 报错

1080×70 21.4 KB

890×586 33.7 KB

2)执行时候报 xcodebuild failed with code 65 错误

967×493 77.6 KB

1037×566 70.7 KB


花了很大的功夫和篇幅,记录 iOS 自动化的准备工作,踩了很多坑,坑不能白踩,后面继续实现 iOS 的自动化测试落地,也欢迎小伙伴一起留言探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android实现雪花特效自定义view

一、前言 这个冬天,老家一直没有下雨, 正好圣诞节,就想着制作一个下雪的特效。 圣诞祝福:平安夜,舞翩阡。雪花飘,飞满天。心与心,永相伴。 圣诞节是传统的宗教节日,对于基 督徒&…

前端自学你还在浪费时间吗?

其实最主要不是学的过程,而是学完后,你有没有把今天的练习题自己在重新敲个2,3遍,这样印象就会更加深刻,以后自己写代码的时候也会更加的得心应手。 手抄笔记让我打好了HTML基础和良好的CSS能力,当然这不一…

Cesium打包入门(gulp与esbuild)

本文针对Cesium源码包的打包工具gulp和esbuild进行了初步探讨,属于入门篇。 首先简要介绍采用gulpesbuild如何为多个源代码文件打包成一个单独文件,然后介绍了下Cesium中的源码包的结构,并简要分析了其打包的相关函数。 本文编译环境IDE使用…

【并发编程学习】一、线程的基本认识

一、线程的基本认识 1.1线程的基本介绍 线程是什么? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运行单位。 为什么会有多线程? ①因为其是CPU的最小调度单位,所以在多核CPU中&#xff0c…

圣诞节,深圳街头有点冷清了~

正文大家好,我是bug菌~今天是圣诞节,这也是我新冠康复的第二周了吧,还有点小咳嗽,伴随有点鼻炎,不过这周已经上了三天班了,整体感觉还算好吧,毕竟我嘴巴不硬,也比较低调不嚣张&#…

底层硬件创新夯实算力、应用创新贴近业务:英特尔至强助力下的VR医疗培训系统

早在1935年,科幻小说家斯坦利温鲍姆的小说《皮格马利翁的眼镜》中,就构想了一款实现虚拟现实(VR)的眼镜。近年来,除游戏、娱乐等大众熟知的应用场景外,VR逐渐涉足医疗、教育、生产制造等各种领域。 以医疗…

LeetCode-1759-统计同构子字符串的数目

1、数学 我们可以使用数学进行分析:每当出现连续的nnn个字符时,我们最终将其合在一起进行计算个数。显然我们可以获得的同构子字符串的个数应为n(n1)2\frac{n \times (n1)}{2}2n(n1)​。因此我们只需要遍历整个字符串,分别统计连续出现的字符…

57岛屿数量-61全排列 最长递增路径

57岛屿数量 矩阵中多处聚集着1,要想统计1聚集的堆数而不重复统计,那我们可以考虑每次找到一堆相邻的1,就将其全部改成0,而将所有相邻的1改成0的步骤又可以使用深度优先搜索(dfs):当我们遇到矩阵…

AtCoder Beginner Contest 283 (A~F)

比赛名称&#xff1a;UNIQUE VISION Programming Contest 2022 Winter(AtCoder Beginner Contest 283) 比赛链接&#xff1a;AtCoder Beginner Contest 283 A - Power 题意&#xff1a; 求A^B(1<A,B<9) 要注意这个int强制转换&#xff0c;不然9^9输出结果时387420489&…

python根据json数据画疫情分布地图

目录 一.基础地图使用 1.掌握使用pyecharts构建基础的全国地图可视化图表 二.疫情地图——国内疫情地图 1.案例效果 代码 三.疫情地图——省级疫情地图 四.数据集 注&#xff1a;数据集在文章最后 一.基础地图使用 1.掌握使用pyecharts构建基础的全国地图可视化图表 演…

Learning to Segment Every Thing

摘要 现有的目标实例分割方法要求所有训练样本都具有分割mask标注。然而&#xff0c;标注新的类别是非常费劲的&#xff0c;因此这将实例分割模型的应用范围限制在100个左右的有标注的类。本文的目的是提出一种新的部分监督的训练模型&#xff0c;以及一种新的权重传递函数&am…

洛谷【算法1-7】搜索刷题——优化、错题

文章目录[USACO1.5]八皇后 Checker Challenge题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路搜索框架代码位运算优化lowbit运算思路kkksc03考前临时抱佛脚题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码吃奶酪题目描述输入格式输…

C++ STL 之可变长数组 Vector 详解

文章目录Part.I AttentionChap.I 注意事项Chap.II 操作技巧Part.II FunctionChap.I 构造函数Chap.II 增加函数Chap.III 删除函数Chap.IV 遍历函数Chap.V 判断/大小/其他函数Part.III CodePart.I Attention Chap.I 注意事项 使用vector需要注意的地方&#xff1a; 加引用#inc…

分布式与微服务系列 - SpringBoot + Zookeeper集群 + Dubbo分布式托管(提供者、消费者)+ Nginx反向代理

一、前言 本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 再搭建集群项目前&#xff0c;请先学习相关技术的知识&#xff1a; 分布式与微服务系列 - Dubbo分布式与微服务系列 - Zookeeper上篇&#xff1a;入门到精通参考文档&#xff1a;分布式与微服务…

状态机——奇葩的状态表示

状态机——奇葩的状态表示 简述 在动态规划中&#xff0c;遇到有一个点有多个状态&#xff0c;混在一起无法表示&#xff0c;那么就可以把状态分开&#xff0c;并且构造出不同状态之间的转移关系&#xff0c;然后再求出状态转移方程&#xff0c;之后就OK了。 题目 1049. 大…

GNN algorithms(3): Tri-party Deep Network Representation

目录 Tri-party Deep Network Representation Essence Thinking Abstract Introduction Problem Definition Tri-DNR pipelines Model Architecture Tri-party Deep Network Representation Essence 1) Deepwalk提取graph structure信息&#xff0c;即structural nod…

MyBatis 一文基础总结

MyBatis 一文基础总结老师的随堂上课笔记&#xff0c; 供参考~1.框架概述1.1 软件开发常用结构1.1.1三层架构三层的处理请求的交互&#xff1a;用户---> 界面层--->业务逻辑层--->数据访问层--->DB 数据库1.1.2 常用框架常见的 J2EE 中开发框架&#xff1a;MyBatis…

adworld-web-inget-20221226

inget 题目来源: 宜兴网信办 题目描述: 无 题目场景: http://61.147.171.105:51222 http://61.147.171.105:51222/?id1%27%20%20or%2011%20– Please enter ID,and Try to bypass nice : congratulations Flag Is : cyberpeace{3df1eecfb5f794d6a94eba429f7e2846} ┌…

【NI Multisim 14.0编辑环境——菜单栏】

目录 序言 一、菜单栏 &#x1f349;1.文件 &#x1f349;2.编辑 &#x1f349;3.视图 &#x1f349; 4.绘制 &#x1f349;5.MCU&#xff08;微控制器&#xff09;菜单 &#x1f349; 6.仿真 &#x1f349; 7.转移 &#x1f349; 8.工具 &#x1f349; 9.报告 &…

录屏有声音吗?电脑如何录屏有声音?图文教程来了!

无论是学习、办公还是娱乐&#xff0c;都需要屏幕录制。许多人在录制视频后发现视频没有发出声音。录屏有声音吗&#xff1f;电脑如何录屏有声音&#xff1f;一个相对简单的方法是在使用电脑的屏幕录制功能时检查是否打开录制屏幕的声音。此外&#xff0c;如果您担心每次都需要…