转载:https://testerhome.com/topics/4960ios
在上一篇文章中,我对本系列教程的项目背景进行了介绍,并对自动化测试平台的建设进行了规划。git
在本文中,我将在已准备就绪的iOS自动化测试环境的基础上,经过Appium调用模拟器运行iOS应用。内容非常基础,熟悉的同窗可直接略过。shell
做为彻底的iOS新手,困惑的第一个问题就是iOS安装包文件。浏览器
在Android系统中,安装App的途径不少,除了各种应用市场,普通用户也常常直接下载apk安装包文件后手动进行安装,所以你们对Android的安装包文件都比较熟悉。服务器
可是对于iOS系统就不同了,因为咱们普通用户在iOS上安装应用的时候基本上只能经过Apple Store进行安装(未越狱),没有机会接触原始的安装包文件,所以每每连iOS应用的安装包究竟是什么格式后缀都不清楚。微信
如今咱们想在Appium App中经过模拟器运行被测应用,须要指定iOS app的安装包路径,所以须要首先得到一个iOS app安装包。markdown
那么iOS app的安装包长啥样呢?网络
或者在这个问题以前,咱们先来看下另外一个问题:对于iOS设备来讲,若是不经过Apple Store,咱们能够怎样安装一个应用?架构
针对这个问题,我搜了些资料,也请教了周围的同事,了解到的途径有以下几个:app
.ipa
文件)上传至一些下载服务器(例如fir.im
),并生成二维码,而后用户扫描二维码后便可经过浏览器下载安装包并进行安装。由此联想到另一个方法,经过微信文件传输助手将安装包(.ipa
)传输至iOS设备,而后再进行安装应该也是能够的吧?这种方法不知在原理上是否可行,由于在试验时因为安装包大于30M,微信没法传输,因此没能进行验证。.ipa
文件,前提是.ipa
文件具备合适的签名。在上面列举的安装应用的途径中,反复提到了.ipa
文件,那.ipa
应该就是iOS应用程序的后缀了吧?暂且这么认为吧。
再回到前面的场景,要在iOS模拟器中运行iOS应用,咱们是否能够找研发人员要一个.ipa
安装包文件,而后就能在模拟器中加载运行应用呢?
刚开始的时候我是这么认为的。因而我获取到.ipa
文件后,在App Path
中填写该文件的路径,而后启动Appium Server;接着我再打开Inspector时,发现iOS模拟器启动了,可是在应用启动的时候就出问题了,始终没法正常启动,感受像是启动崩溃,反复尝试屡次仍然如此。
再次通过Google,总算是明白出现问题的缘由了,总结下来有以下几点:
.ipa
文件,都是面向于ARM处理器的iOS设备,只能在真机设备中进行安装;.ipa
文件,是没法在iOS模拟器中正常运行的,毕竟处理器架构都不同;.app
。.app
文件接下来,就说下如何获取.app
文件。
虽然是测试人员,不会对被测iOS项目贡献代码,可是也不能老是找研发帮忙编译生成.app
文件。因此,在本地搭建完整的iOS项目开发环境仍是颇有必要的。
对于iOS开发环境的搭建,当前社区中应该已经有了不少完整的教程,我在这儿就不详细描述了,只简单说下我搭建过程当中涉及到的几个点。
首先,Mac OSX、Xcode、Apple Developer Tools这些基础环境的安装,在上一篇文章中已经进行说明了;
而后,申请项目源码的访问权限,git clone
到本地;
接着是项目依赖环境的问题;一般一个较大型的iOS项目都会引用许多第三方库,而这些依赖库并不会直接保存到项目仓库中,一般是采用CocoaPods
进行管理;简单地说,CocoaPods
是针对Swift
和Objective-C
项目的依赖管理器,相似于Java中的Maven
,Ruby中的Gem
,Python中的pip
。
固然,iOS项目的依赖管理工具也不是只有CocoaPods
一个,若是是采用的别的依赖管理器,请自行查找对应的资料。
采用CocoaPods
管理的项目,在项目根目录下会包含Podfile
和Podfile.lock
文件,里面记录了当前项目依赖的第三方库以及对应的版本号。
安装CocoaPods
很简单,采用gem
便可。
$ sudo gem install cocoapods
而后,进入到iOS项目的目录,执行pod install
命令便可安装当前项目的全部依赖。
$ cd Project_Folder $ pod install Re-creating CocoaPods due to major version update. Analyzing dependencies .....(略) Downloading dependencies .....(略) Generating Pods project Integrating client project Sending stats Pod installation complete! There are 27 dependencies from the Podfile and 28 total pods installed.
关于CocoaPods
的更多信息,请自行查看官方网站
在依赖安装完成后,正常状况下,就能够在Xcode中编译项目了。
没有别的须要注意的,将target选择为模拟器(iOS Simulator)便可。并且针对模拟器进行编译时,也不会涉及到开发者证书的问题,项目配置上会简单不少。待后续讲到真机上的自动化测试时,我再对证书方面的内容进行补充。
编译完成后,在Products目录下,就能够看到XXX.app
文件,这里的XXX
就是项目名称;而后,选中XXX.app
文件,【Show in Finder】,便可在文件目录中定位到该文件。
接下来,将XXX.app
文件拷贝出来,或者复制该文件的Full path
,怎样都行,只要在Appium
的App Path
中能定位到该文件就行。
被测应用.app
准备就绪后,接下来就能够在iOS模拟器中运行了。
回到前面的那张图。启动Appium app
后,对于模拟器运行的状况,在iOS Settings
中必须设置的参数项就3个,App Path
、Force Device
和Platform Version
。对于真机运行的状况,后续再单独进行说明。
设置完毕后,点击【Launch】,启动Appium Server
。
而后,点击图中红框处的按钮,便可经过Inspector
启动模拟器,并在模拟器中加载iOS应用。
在模拟器中,咱们能够像在真机中同样,体验被测应用的各项功能;而且,在Appium的日志台中,能够实时查看到日志信息。
整个过程是挺简单的,不过,在探索过程当中我仍是有遇到一个坑。
经过Inspector
启动模拟器时,老是弹框报错,报错形式以下。
刚开始出现这问题时百思不得其解,由于提示的信息并不明显,Google了好一阵也没找到缘由。最后只有详细去看日志信息,才发现问题所在。
在日志中,发现的报错信息以下:
[iOS] Error: Could not find a device to launch. You requested 'iPhone 6 (8.4)', but the available devices were: ["Apple TV 1080p (9.2) [98638D25-7C82-48DF-BDCA-7F682F951533] (Simulator)","iPad 2 (9.2) [5E22F53E-EAB3-45DF-A1DD-10F58E920679] (Simulator)","iPad 2 (9.3) [4B2D2F9A-C099-4C13-8DE9-27C826A521C2] (Simulator)","iPad Air (9.2) [825E4997-9CD8-4225-9977-4C7AE2C98389] (Simulator)","iPad Air (9.3) [E4523799-E35F-4499-832B-12CF33F09144] (Simulator)","iPad Air 2 (9.2) [8057039D-F848-453E-97EC-2F75CAEA2E77] (Simulator)","iPad Air 2 (9.3) [0B8F49DA-832A-4248-BA1D-9DA5D11E31FD] (Simulator)","iPad Pro (9.2) [AF1F2D06-3067-41B5-AC2B-4B0ED88BF5D9] (Simulator)","iPad Pro (9.3) [C39617A6-9D91-4C0B-B25B-741BD57B016C] (Simulator)","iPad Retina (9.2) [D3C694E1-E3B4-47BE-AB5E-80B3D4E22FC2] (Simulator)","iPad Retina (9.3) [907C7B06-ED2C-48AC-AC46-04E4AD6E0CA3] (Simulator)","iPhone 4s (9.2) [1A786195-94E3-4908-8309-7B66D84E4619] (Simulator)","iPhone 4s (9.3) [3F76F34B-5A8F-4FD1-928D-56F84C192DDD] (Simulator)","iPhone 5 (9.2) [0D79A4CA-71EB-48A6-9EE4-172BEF3EB4E0] (Simulator)","iPhone 5 (9.3) [04270D44-F831-4253-95F2-3D205D2BC0D9] (Simulator)","iPhone 5s (9.2) [13A16C07-3C5B-4B04-A94B-B40A63238958] (Simulator)","iPhone 5s (9.3) [D30A7B34-BA01-4203-80DA-FAEA436725F9] (Simulator)","iPhone 6 (9.2) [5D01650F-2A31-4D53-A47A-CCF7FD552ADD] (Simulator)","iPhone 6 (9.3) [2F0810F6-C73B-4BA4-93BA-06D4B6D96BDA] (Simulator)","iPhone 6 Plus (9.2) [9A840B78-E6CE-4D18-BE83-16B590411641] (Simulator)","iPhone 6 Plus (9.3) [27C6557A-B09D-4D8A-9846-DA8FE0A8E8D5] (Simulator)","iPhone 6s (9.2) [E7F5B8A5-0E85-404F-A4D4-191D63E7EC1B] (Simulator)","iPhone 6s (9.3) [6F702911-13C2-472C-9ECD-BADD4385CB77] (Simulator)","iPhone 6s (9.3) + Apple Watch - 38mm (2.2) [B63FFAA4-00A4-473B-9462-3664F41F9001] (Simulator)","iPhone 6s Plus (9.2) [58837F78-511A-4F0B-9DDF-782E3B9935BD] (Simulator)","iPhone 6s Plus (9.3) [C31003C6-DCE2-414D-AD7F-376F6FA995B0] (Simulator)","iPhone 6s Plus (9.3) + Apple Watch - 42mm (2.2) [E3154768-CA23-45CC-90E5-2D0386A57B7D] (Simulator)"]
问题在于,我设置iOS Settings
时,将Force Device
设置为"iPhone 6",将Platform Version
设置为“8.4”,可是通过组合,iPhone 6 (8.4)
并不在可用的模拟器设备列表中。
再来看日志中提示的可用设备,发现“iPhone 6”设备对应的Platform Version
只有“9.2”和“9.3”。而后回到iOS Settings
,发现Platform Version
的下拉框可选项就没有“9.2”和“9.3”,最新的一个可选版本也就是“8.4”。
这应该是Appium app
的一个bug吧。不过好在Platform Version
参数虽然是经过下拉框选择,可是也能够在框内直接填写内容。因而我在Platform Version
设置框内填写为“9.3”,而后再次启动时,发现iOS模拟器就能够正常启动了。
如今,咱们已经成功地经过Appium Inspector调用模拟器并运行iOS应用,接下来,咱们就要开始尝试编写自动化测试用例了。
在下一篇文章中,咱们将对Appium Inspector的功能进行熟悉,经过Inspector来查看iOS应用的UI元素信息,并尝试采用脚本语言与UI进行交互操做。
公众号:DebugTalk
原文连接:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI