|
|
|
|
移动端

3.2.2 接口差异

《腾讯iOS测试实践》第3章iOS兼容性测试,本章结合过往兼容性的测试实践经验对iPhone上的App兼容性问题进行总结。本节为大家介绍接口差异。

作者:丁如敏来源:机械工业出版社|2017-09-14 15:57

有奖调研 | 1TB硬盘等你拿 AI+区块链的发展趋势及应用调研


3.2.2 接口差异

系统发布的同时,还有与新增功能对应的一些用户看不见的变化。一般来说,是对开发者而言的变化,大多体现为系统接口的变化,以及一些和过往不同的API出现,这里称为系统的接口差异。

新系统发布后,iOS产品的开发工具Xcode也会进行更新,提供新的SDK供开发者进行编译。而使用新SDK编译的版本在旧系统上也可能会存在各式问题,主要是SDK底层的API实现会做一些调整,需要开发者阅读新系统说明,旧有代码对新系统的API实现要进行适配,以免出现各式问题。

因为系统一般是一年发布一个大的版本,按照一年中不同的时间阶段,大约会有如图3-1所示的三个测试阶段。

1.日常兼容

一款App在编码阶段就要考虑不同系统的差异性,在修改代码的阶段要格外关注系统的高低版本之间API调用时实现的差异。

表3-1是QQ浏览器(iPhone)在非新系统发布时期的普通适配测试发现的问题。

表3-1 典型适配测试问题

从表3-1中可以看出,两个Bug都是某个系统下的浏览器不响应用户手指操作。点击开关,不响应开关命令;滑动屏幕,不响应滚动命令。其本质是因为开发在重构或者实现函数功能时,忽略了高低版本系统上的系统API调用的差异性。

这种情况一般发生在函数重构阶段,重构的开发在不了解系统差异性的情况下,容易出现这样的问题。作为测试人员,对每次重构类型的测试,尽量做到系统覆盖。如果条件允许,最好与开发一起过一下高低版本系统API实现是否有差异性。

2.发布新系统

在每年的新系统发布前,苹果公司会陆续发布Beta版本供开发者适配。这时测试也要跟进,对App在新系统上运行的情况进行检查确认。时机一般是在开发完成一轮适配测试后开始启用。原则上是所有的功能都要在新系统上运行一次检查。在启动测试工作之前,测试人员最好也要了解新系统的特性及其变化。

下面还是以QQ浏览器(iPhone)为例,如表3-2所示。

表3-2 Bug列表

Bug 1如图3-2所示,其中左边的图是手机通知栏中浏览器下发的消息,点击这条消息后进入右边的图,可以发现上方本应该显示手机的网络信号、电量、时间信息的状态栏不显示了。

这是iOS 9正式发布前的Beta 3版本自身的问题,我们可以对这个问题进行兼容,在iOS 9正式版本发布后这个问题也不复存在。

Bug 2的现象如图3-3所示,其中左图中的下方工具栏有一个“收藏到QQ”,点击后会提示登录QQ(已经登录过QQ),现象如右边的图所示。

这是iOS 9基于安全性考虑,不允许扫描用户手机里App的安装情况,必须在URL scheme里指定调起的App(URL scheme一般使用的场景是应用程序有分享或跳转其他平台授权的功能,分享或授权后再跳转回来)。

在iOS 8中并没有做过多限制,但是iOS 9需要将在外部调用的URL scheme列为白名单,才可以完成跳转。如果iOS 9没做适配,则会报错。具体的解决方案是要在info.plist中设置 LSAPPlicationQueriesSchemes类型为数组,下面添加所有用到的scheme,如图3-4所示。

上述两个Bug,主要是在新版本适配前的Beta版本的测试过程中发现的。这个阶段,测试要随开发一起学习新系统的特性,多多阅读相关文档,联系产品各项功能检查。新系统上的UI显示问题,大部分也是由于旧版SDK上的编译导致的,例如iOS 9上的字体变化了,但是旧的SDK还是按照之前的方式进行编译,就会出现省略号的问题。

3.启用新SDK

在新系统发布后一段时间,开发人员会采用高版本的SDK编译,比较显式的是用高版本的Xcode来编译版本。这里有个问题,就是如果使用高版本独有的API,编译器是不会标识出来的,而低版本系统并没有这种API,因此运行在低版本上就会出现问题。

QQ浏览器(iPhone)项目曾经出现过3D Touch重压菜单点击后不能跳转到App内对应的内容上。原因就是新版本SDK引入的适配问题。

浏览器创建Quick Action(用力按压App图标出现的标签)采用的是静态方式,静态创建方式是在info.plist文件中声明的,其中有两个键值是必须设置的。

UIAPPlicationShortcutItemTitle:表示这个键值设置标签的标题。

UIAPPlicationShortcutItemType:表示设置一个快捷通道类型的字符串,这个字符串唯一地标识出这个通道类型。

点击3D Touch中的快捷选项,会先启动浏览器,然后根据回传的type参数即标识通道类型的字符串来确认需要跳转的模块页面。在更新iOS 10系统的SDK后,系统会在Quick Action里自动添加widget入口,同时系统在回调type参数时会在原字符串前面自动添加一个字符串“com.tencent.mttliteextension”,即浏览器的Bundle ID,如图3-5所示。而在回调函数中,我们还用原字符串“search”“new page”“history”去匹配,全部匹配失败,所以启动浏览器后不再做任何处理,就不会跳转到相应页面了。

上述三个阶段产生的适配问题主要是因为新系统淘汰或更新了一些API,如果开发人员在这些地方不注意,就会出现上述问题。这里测试人员可以做的工作是与开发人员一起学习每个系统的特性—关联产品特性。例如,iOS 9上关于URL scheme的规定涉及外部App调用,那么测试人员可以排查所有涉及外部App调用的功能,避免开发人员遗漏。本章中的案例就是开发人员忽略了工具箱中收藏的QQ功能也涉及外部App调用(QQ账号调用)。

不同系统接口差异引发的API适配是适配测试重点关注的问题,无论是API更新、淘汰,都会导致适配问题,关注API变更是测试人员和开发人员都要做的。测试人员对缺陷要知其然,更要知其所以然。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Eclipse从入门到精通(第2版)

本书为《Eclipse从入门到精通》一书的全新改版。本书以最新的Eclipse 3.2作为写作版本。全书分为5篇:起步篇介绍了Eclipse及相关插件的安装...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊