【移动测试】你的测试用例中,是否包含App前后台切换
App前后台切换是我们平时常用的一个操作,比如:按手机的home键将应用置于后台、直接按手机电源键关闭屏幕或者通过最近打开的应用列表切换应用等,由此,我们可以得出结论:当app置于前台时,它的页面对我们是可见的;当app置于后台时,它的页面对我们是不可见的。
无论对于Android还是IOS,app前后台切换的流程都很长,因为牵扯到应用生命周期的管理,因此在测试过程中,可以帮我们发现一些意外的惊喜。不知道在你的App测试用例中是否包含前后台切换?如果没有,那从现在开始,你一定要将它补充到测试用例中。
这篇文章,会带着大家了解Android和IOS在前后台切换过程中,都经历了什么。这样当你在测试过程中,碰到相关问题时,也能有章可循。
Android前后台切换原理
早期的Android只有Activity用来展示页面元素,直到2011年Android3.0推出了Fragment的概念,不过Fragment并没有立即被用起来,大部分的开发者还是用Activity写Android页面,个人感觉是到Android4.x之后,Fragment才更多的运用到工作中。不过Fragment并不能单独的存在,其必须依赖在某一个Activity上,所以到后来GitHub上出现了好多Activity+Fragment的基础框架,其核心思想是:一个BaseActivity+多个Fragment。BaseActivity主要用于管理Fragment的生命周期,而Fragment用于实现不同的页面。
要理解Android前后台切换的原理,其实就需要理解Activity+Fragment的生命周期及其对应的方法,我这里根据Android官方文档Activity和Fragment的生命周期流程图,将前后台切换相关方法整合到一张图中,方便大家理解:

整理完之后发现方法流程还是很多的,但是大家肯定会有个直观感受,按一次home键,App执行了很多回调方法,并且方法有被重复调用的可能(后面我们再统一整理测试思路)。
IOS前后台切换原理
ios前后台切换,方法相对会少一些,但是思路和Android是类似的。我个人对IOS不是特别熟悉,所以只能从网上查了几篇写ios状态切换的文章,下面的图是我将它们整合之后,整理出来的:

前后台切换思路整理
对于没有任何移动端开发经验的人来说,看了上面Android和IOS的流程图,我猜测应该也不大理解其中的原理。所以我根据自己的经验,帮大家整理一些前后台切换的测试的思路及出发点,供大家参考:
- 因为有重复调用同一个方法的可能,所以开发可能会用到标志位(用于标识是否是第一次调用)等,因此可以验证如下点:
- 界面上的逻辑是否正确,比如:数据不一致。
- 界面展示是否正确,比如:某些按钮不应该展示,却展示了。
- 因为有可能新创建对象,所以需要关注是否有内存泄漏存在。
- 是否会造成异常的网络请求,比如重复请求同一接口。
- 在app将要置于后台时,会保存当前界面上的数据,等到app再次回到前台时,重新渲染:
- 验证前后台切换后,界面数据是否被清空。
- 另外界面数据展示是否正常。
- 其他
- 是否会出现crash。
- 是否会造成app的专项数据异常,比如:cpu、耗电量等。
总结
软件测试,其实一定程度上就是用探索性的思路,挖掘更不容易出现的"惊喜",因此,我觉得"App前后台"切换绝对是一个不错的探索思路。大家有什么更好的想法或问题,欢迎在评论区留言交流。
关注【公众号:软件测试布道师】,回复【python】,即可获取【python自动化及编程实践资料】
【移动测试】你的测试用例中,是否包含App前后台切换的更多相关文章
- Web测试的常用测试用例与知识
1. Web测试中关于登录的测试 2. 搜索功能测试用例设计 3. 翻页功能测试用例 4. 输入框的测试 5. Web测试的常用的检查点 6. 用户及权限管理功能常规测试方法 7. Web测试之兼容性 ...
- TPA测试项目管理系统-测试用例管理
Test Project Administrator(简称TPA)是经纬恒润自主研发的一款专业的测试项目管理工具,目前已广泛的应用于国内二十余个整车厂和零部件供应商.它可以管理测试过程 ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
- js中A包含B的写法与分割字符串的方法
在java中A包含B的写法 if(A.contains(B)){ ... } 在js中没有contains方法,应该使用下面这种方法: var an = "传染性.潜伏性.破坏性" ...
- 怎样高效地去判断Array中是否包含某个值?
问题 怎样去判断Array(无序)中是否包含某个值呢? 这是一个在Java中经常被问到的问题.它也是Stack Overflow上投票前几的一个问题.下面将展示投票前几的几个回答,这些回答使用不同的方 ...
- 161101、在Java中如何高效判断数组中是否包含某个元素
如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...
- [C#]判断字符串中是否包含中文
关键代码: /// <summary> /// 判断字符串中是否包含中文 /// </summary> /// <param name="str"&g ...
- iOS 判断数组array中是否包含元素a,取出a在array中的下标+数组方法详解
目前找到来4个解决办法,第三个尤为简单方便 NSArray * arr = @["]; //是否包含 "]) { NSInteger index = [arr indexOfObj ...
- 实战经验丨CTF中文件包含的技巧总结
站在巨人的肩头才会看见更远的世界,这是一篇技术牛人对CTF比赛中文件包含的内容总结,主要是对一些包含点的原理和特征进行归纳分析,并结合实际的例子来讲解如何绕过,全面细致,通俗易懂,掌握这个新技能定会让 ...
随机推荐
- Nginx 日志记录post数据,并使用goaccess进行日志分析
nginx日志默认不会记录post数据 在nginx配置文件的http节 log_format 日志格式标识 [escape=json] 日志格式 比如:日志格式标识设置为main,添加escape= ...
- 谷歌浏览器中kindeditor编译器字体不能为微软雅黑的问题?
https://segmentfault.com/q/1010000006204144 比如说用谷歌浏览器打开后台编译文章,在文章先选择字体为微软雅黑,再编辑其他,哪个字体就变成了": ...
- Python--day65--Django框架介绍
原文链接:http://www.cnblogs.com/liwenzhou/p/8296964.html 做web开发用的是MVC框架: Django框架简介 MVC框架和MTV框架(了解即可) MV ...
- Python--day25--复习(单继承和多继承的总结)
- java final域
public final class ThreeStooges { /* * stooges是Set<String>类型的引用,final限定该引用成员属性stooges被赋初值后,就不能 ...
- java 泛型接口和方法
java5后,可以声明泛型接口,声明方式和声明泛型类是一样的. public interface IDAO<T>{} 泛型接口子类有两种方式: 直接在子类后申明泛型: 在子类实现的接口中给 ...
- post提交方式为什么要序列化,而Get提交方式就不用?序列化做了什么?
这是因为后台能够直接处理的数据格式,是一种经过序列化的键值对数据,比如前端要向后台提交三个参数,分别是a=1,b=2,c=3,那么后台接收到的数据就应该是a=1&b=2&c=3(可以看 ...
- HttpServletRequest获得Url里面传来的值
URL地址:http://XXXXX/manage/welcome?loginUser=123456String []str = request.getParameterValues("lo ...
- Spring Security 学习笔记-securityContext过滤器
位于过滤器顶端,第一个起作用的过滤器.SecurityContextPersistenceFilter 在执行其他过滤器之前,率先判断用户的session中是否已经存在一个SecurityContex ...
- jq 技巧汇总
1,jQuery方法$()实际上是拥有两个参数的 $('li','.firstEl').onclick(function(){.......}) 这里,第二个参数用来限制第一个参数给定的查找结果 ...