《腾讯iOS测试实践》一一3.2 系统兼容

简介:

本节书摘来自华章计算机《腾讯iOS测试实践》一书中的第3章,第3.2节,作者:丁如敏 王琳 等著
  更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 系统兼容

iPhone上的操作系统被称为iOS,每次发布新版本,想体验新特性的用户就需要将自己的手机进行固件刷新,或者购买已经配置最新系统的iPhone。操作系统的差异是手机“软实力”的差异。新系统发布给我们带来了新功能和接口实现的变化。
3.2.1 新增功能
什么是系统的新功能?发布每个大系统,除了界面更新外,必然伴随着一些全新的功能,升级了新系统后这些功能可以直观地被用户体验到。例如iOS 8带来的widget,支持第三方输入法,iOS 9带来的spotlight新特性,iOS 10的iMessage功能更新和Push消息多样化等。iOS平台上的开发者会根据这些新特性再结合自己的产品进行一些功能关联。
新增功能的测试只要在对应的系统和机型上进行针对性的验证即可,曾经出现缺陷的案例如下:iOS 8系统widget的功能,主要在于App自身提供给widget一些信息,例如天气、资讯新闻。测试过程中发生一些显示排版的问题。iOS 9系统引入spotlight新功能可以搜索应用内的信息,这方面的Bug集中在数据传输中。曾发生过书签数据传输错误导致的闪退问题。iOS 10系统到目前为止还没有发现新增功能引发的问题。
3.2.2 接口差异
系统发布的同时,还有与新增功能对应的一些用户看不见的变化。一般来说,是对开发者而言的变化,大多体现为系统接口的变化,以及一些和过往不同的API出现,这里称为系统的接口差异。
新系统发布后,iOS产品的开发工具Xcode也会进行更新,提供新的SDK供开发者进行编译。而使用新SDK编译的版本在旧系统上也可能会存在各式问题,主要是SDK底层的API实现会做一些调整,需要开发者阅读新系统说明,旧有代码对新系统的API实现要进行适配,以免出现各式问题。
因为系统一般是一年发布一个大的版本,按照一年中不同的时间阶段,大约会有如图3-1所示的三个测试阶段。
image

图3-1 研发阶段
1.日常兼容
一款App在编码阶段就要考虑不同系统的差异性,在修改代码的阶段要格外关注系统的高低版本之间API调用时实现的差异。
表3-1是QQ浏览器(iPhone)在非新系统发布时期的普通适配测试发现的问题。
image

从表3-1中可以看出,两个Bug都是某个系统下的浏览器不响应用户手指操作。点击开关,不响应开关命令;滑动屏幕,不响应滚动命令。其本质是因为开发在重构或者实现函数功能时,忽略了高低版本系统上的系统API调用的差异性。
这种情况一般发生在函数重构阶段,重构的开发在不了解系统差异性的情况下,容易出现这样的问题。作为测试人员,对每次重构类型的测试,尽量做到系统覆盖。如果条件允许,最好与开发一起过一下高低版本系统API实现是否有差异性。
2.发布新系统
在每年的新系统发布前,苹果公司会陆续发布Beta版本供开发者适配。这时测试也要跟进,对App在新系统上运行的情况进行检查确认。时机一般是在开发完成一轮适配测试后开始启用。原则上是所有的功能都要在新系统上运行一次检查。在启动测试工作之前,测试人员最好也要了解新系统的特性及其变化。
下面还是以QQ浏览器(iPhone)为例,如表3-2所示。
image

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

图3-2 通知栏Bug图
这是iOS 9正式发布前的Beta 3版本自身的问题,我们可以对这个问题进行兼容,在iOS 9正式版本发布后这个问题也不复存在。
Bug 2的现象如图3-3所示,其中左图中的下方工具栏有一个“收藏到QQ”,点击后会提示登录QQ(已经登录过QQ),现象如右边的图所示。
image

图3-3 收藏到QQ功能Bug
这是iOS 9基于安全性考虑,不允许扫描用户手机里App的安装情况,必须在URL scheme里指定调起的App(URL scheme一般使用的场景是应用程序有分享或跳转其他平台授权的功能,分享或授权后再跳转回来)。
在iOS 8中并没有做过多限制,但是iOS 9需要将在外部调用的URL scheme列为白名单,才可以完成跳转。如果iOS 9没做适配,则会报错。具体的解决方案是要在info.plist中设置 LSAPPlicationQueriesSchemes类型为数组,下面添加所有用到的scheme,如图3-4所示。
image

图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”去匹配,全部匹配失败,所以启动浏览器后不再做任何处理,就不会跳转到相应页面了。
image

图3-5 参数形式截图
上述三个阶段产生的适配问题主要是因为新系统淘汰或更新了一些API,如果开发人员在这些地方不注意,就会出现上述问题。这里测试人员可以做的工作是与开发人员一起学习每个系统的特性—关联产品特性。例如,iOS 9上关于URL scheme的规定涉及外部App调用,那么测试人员可以排查所有涉及外部App调用的功能,避免开发人员遗漏。本章中的案例就是开发人员忽略了工具箱中收藏的QQ功能也涉及外部App调用(QQ账号调用)。
不同系统接口差异引发的API适配是适配测试重点关注的问题,无论是API更新、淘汰,都会导致适配问题,关注API变更是测试人员和开发人员都要做的。测试人员对缺陷要知其然,更要知其所以然。

相关文章
|
1月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
54 4
|
1月前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
9天前
|
消息中间件 监控 小程序
电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
电竞陪玩系统架构涵盖前端(React/Vue)、后端(Spring Boot/php)、数据库(MySQL/MongoDB)、实时通信(WebSocket)及其他组件(Redis、RabbitMQ、Nginx)。通过模块化设计、微服务架构和云计算技术优化,提升系统性能与可靠性。同时,加强全面测试、实时监控及故障管理,确保系统稳定运行。
|
1月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
71 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
1月前
|
测试技术 Python
探索软件测试的深度与广度:从理论到实践
在数字化时代,软件已成为我们生活中不可或缺的一部分。随着技术的不断进步和用户需求的多样化,确保软件质量变得尤为重要。本文将深入浅出地介绍软件测试的核心概念、类型及其在软件开发生命周期中的重要性。我们将通过实际案例,展示如何实施有效的测试策略,并探讨自动化测试的未来趋势,旨在为读者提供一套完整的软件测试知识体系,帮助提升软件质量和开发效率。
|
1月前
|
测试技术 Python
探索软件测试的奥秘:从理论到实践
在软件开发的宇宙中,软件测试犹如一颗璀璨的星辰,指引着质量的方向。本文将带你穿梭于软件测试的理论与实践之间,揭示其内在的逻辑和魅力。从测试的重要性出发,我们将探讨不同类型的测试方法,并通过实际案例分析,深入理解测试用例的设计和应用。最后,我们将通过一个代码示例,展示如何将理论知识转化为实际操作,确保软件质量的同时,也提升你的测试技能。让我们一起踏上这段探索之旅,发现软件测试的无限可能。
|
1月前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
88 7
|
1月前
|
测试技术
探索软件测试的奥秘:从理论到实践
本文深入探讨了软件测试的基本概念、重要性、主要类型以及实施策略。通过分析不同测试阶段和相应的测试方法,文章旨在为读者提供一套完整的软件测试知识体系,帮助他们更好地理解和应用测试技术,确保软件产品的质量和可靠性。
70 4
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
智能化软件测试:AI驱动的自动化测试策略与实践####
本文深入探讨了人工智能(AI)在软件测试领域的创新应用,通过分析AI技术如何优化测试流程、提升测试效率及质量,阐述了智能化软件测试的核心价值。文章首先概述了传统软件测试面临的挑战,随后详细介绍了AI驱动的自动化测试工具与框架,包括自然语言处理(NLP)、机器学习(ML)算法在缺陷预测、测试用例生成及自动化回归测试中的应用实例。最后,文章展望了智能化软件测试的未来发展趋势,强调了持续学习与适应能力对于保持测试策略有效性的重要性。 ####
|
2月前
|
敏捷开发 Devops 测试技术
探索自动化测试之美:从理论到实践
在软件开发的海洋中,自动化测试犹如一座灯塔,指引着项目向着质量和效率的彼岸。本文将扬帆起航,从自动化测试的意义出发,穿越工具选择的海域,停靠在实战演练的岛屿,最终抵达持续集成的港湾。我们将通过一个具体的代码示例,体验自动化测试的魅力,并分享如何将这些实践应用到日常的软件质量保证过程中。

热门文章

最新文章