从0到1搭建移动App功能自动化测试平台(1):模拟器中运行iOS应用

上一篇文章中,我对本系列教程的项目背景进行了介绍,并对自动化测试平台的建设进行了规划。

在本文中,我将在已准备就绪的iOS自动化测试环境的基础上,通过Appium调用模拟器运行iOS应用。内容很是基础,熟悉的同学可直接略过。

iOS应用安装包的基础知识

作为完全的iOS新手,困惑的第一个问题就是iOS安装包文件。

在Android系统中,安装App的途径很多,除了各类应用市场,普通用户也经常直接下载apk安装包文件后手动进行安装,因此大家对Android的安装包文件都比较熟悉。

但是对于iOS系统就不一样了,由于我们普通用户在iOS上安装应用的时候基本上只能通过Apple Store进行安装(未越狱),没有机会接触原始的安装包文件,因此往往连iOS应用的安装包到底是什么格式后缀都不清楚。

现在我们想在Appium App中通过模拟器运行被测应用,需要指定iOS app的安装包路径,因此需要首先获得一个iOS app安装包。

那么iOS app的安装包长啥样呢?

或者在这个问题之前,我们先来看下另一个问题:对于iOS设备来说,如果不通过Apple Store,我们可以怎样安装一个应用?

针对这个问题,我搜了些资料,也请教了周围的同事,了解到的途径有如下几个:

  • 企业证书:该种方式适用于企业内部;通过企业证书编译出的iOS应用,无需上传至Apple Store,即可无限制的安装到企业员工的iOS设备中。只是需要解决的一个问题是,由于iOS设备没有文件管理器,没法将安装包拷贝到iOS设备中,因此常用的做法是将安装包(.ipa文件)上传至一些下载服务器(例如fir.im),并生成二维码,然后用户扫描二维码后即可通过浏览器下载安装包并进行安装。由此联想到另外一个方法,通过微信文件传输助手将安装包(.ipa)传输至iOS设备,然后再进行安装应该也是可以的吧?这种方法不知在原理上是否可行,因为在试验时由于安装包大于30M,微信无法传输,所以没能进行验证。
  • Xcode:该种方式适用于iOS开发者;开发者在Xcode中连上iOS设备对源码进行编译,编译生成的应用会自动安装至iOS设备。当然,该种方式也是需要iOS开发者证书。
  • PP助手:该种方式适用于普通用户;PP助手是一个非苹果官方的设备资源管理工具,可以实现对未越狱的iOS设备进行应用管理,也可以安装本地.ipa文件,前提是.ipa文件具有合适的签名。

在上面列举的安装应用的途径中,反复提到了.ipa文件,那.ipa应该就是iOS应用程序的后缀了吧?暂且这么认为吧。

再回到前面的场景,要在iOS模拟器中运行iOS应用,我们是否可以找研发人员要一个.ipa安装包文件,然后就能在模拟器中加载运行应用呢?

刚开始的时候我是这么认为的。于是我获取到.ipa文件后,在App Path中填写该文件的路径,然后启动Appium Server;接着我再打开Inspector时,发现iOS模拟器启动了,但是在应用启动的时候就出问题了,始终无法正常启动,感觉像是启动崩溃,反复尝试多次仍然如此。

再次经过Google,总算是明白出现问题的原因了,总结下来有如下几点:

  • 不管是从Apple Store或iTunes上下载的应用,还是在Xcode中针对真机设备编译生成的.ipa文件,都是面向于ARM处理器的iOS设备,只能在真机设备中进行安装;
  • 而在Mac OSX系统中运行的iOS模拟器,运行环境是基于Intel处理器的;
  • 因此,若是针对真机设备编译生成的.ipa文件,是无法在iOS模拟器中正常运行的,毕竟处理器架构都不一样;
  • 要想在iOS模拟器中运行应用,则必须在Xcode中编译时选择模拟器类型;编译生成的文件后缀为.app

准备.app文件

接下来,就说下如何获取.app文件。

虽然是测试人员,不会对被测iOS项目贡献代码,但是也不能总是找研发帮忙编译生成.app文件。所以,在本地搭建完整的iOS项目开发环境还是很有必要的。

对于iOS开发环境的搭建,当前社区中应该已经有了很多完整的教程,我在这儿就不详细描述了,只简单说下我搭建过程中涉及到的几个点。

首先,Mac OSX、Xcode、Apple Developer Tools这些基础环境的安装,在上一篇文章中已经进行说明了;

然后,申请项目源码的访问权限,git clone到本地;

接着是项目依赖环境的问题;通常一个较大型的iOS项目都会引用许多第三方库,而这些依赖库并不会直接保存到项目仓库中,通常是采用CocoaPods进行管理;简单地说,CocoaPods是针对SwiftObjective-C项目的依赖管理器,类似于Java中的Maven,Ruby中的Gem,Python中的pip

当然,iOS项目的依赖管理工具也不是只有CocoaPods一个,如果是采用的别的依赖管理器,请自行查找对应的资料。

采用CocoaPods管理的项目,在项目根目录下会包含PodfilePodfile.lock文件,里面记录了当前项目依赖的第三方库以及对应的版本号。

安装CocoaPods很简单,采用gem即可。

然后,进入到iOS项目的目录,执行pod install命令即可安装当前项目的所有依赖。

关于CocoaPods的更多信息,请自行查看官方网站

在依赖安装完成后,正常情况下,就可以在Xcode中编译项目了。

没有别的需要注意的,将target选择为模拟器(iOS Simulator)即可。而且针对模拟器进行编译时,也不会涉及到开发者证书的问题,项目配置上会简单很多。待后续讲到真机上的自动化测试时,我再对证书方面的内容进行补充。

编译完成后,在Products目录下,就可以看到XXX.app文件,这里的XXX就是项目名称;然后,选中XXX.app文件,【Show in Finder】,即可在文件目录中定位到该文件。

接下来,将XXX.app文件拷贝出来,或者复制该文件的Full path,怎样都行,只要在AppiumApp Path中能定位到该文件就行。

模拟器中运行iOS应用

被测应用.app准备就绪后,接下来就可以在iOS模拟器中运行了。

回到前面的那张图。启动Appium app后,对于模拟器运行的情况,在iOS Settings中必须设置的参数项就3个,App PathForce DevicePlatform Version。对于真机运行的情况,后续再单独进行说明。

设置完毕后,点击【Launch】,启动Appium Server

然后,点击图中红框处的按钮,即可通过Inspector启动模拟器,并在模拟器中加载iOS应用。

在模拟器中,我们可以像在真机中一样,体验被测应用的各项功能;并且,在Appium的日志台中,可以实时查看到日志信息。

经历的一个坑

整个过程是挺简单的,不过,在探索过程中我还是有遇到一个坑。

通过Inspector启动模拟器时,总是弹框报错,报错形式如下。

刚开始出现这问题时百思不得其解,因为提示的信息并不明显,Google了好一阵也没找到原因。最后只有详细去看日志信息,才发现问题所在。

在日志中,发现的报错信息如下:

问题在于,我设置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模拟器就可以正常启动了。

To be continued …

现在,我们已经成功地通过Appium Inspector调用模拟器并运行iOS应用,接下来,我们就要开始尝试编写自动化测试用例了。

在下一篇文章中,我们将对Appium Inspector的功能进行熟悉,通过Inspector来查看iOS应用的UI元素信息,并尝试采用脚本语言与UI进行交互操作。

1 1 收藏 评论

关于作者:debugtalk

专注于软件测试领域和测试开发技术,个人微信公众号【debugtalk】。 个人主页 · 我的文章 · 2 ·     

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部