对于一些测试新人来讲,很容易存在一个误区,看懂需求,弄透彻需求,就能够用例覆盖100%了。
事实并非这样。需求固然很重要,测试用例确实主要来源于产品需求,但也应该要考虑开发的实现原理,这样才能够测试的更彻底,更全面,更精准。
结合一个工作中的实例,来源于实习生负责的一个小功能,来分析如何根据开发原理进行测试设计。
功能:在APP的首页有一个广告图片,称之为banner,实现了banner缓存的功能。
增加缓存的目的:1、避免出现无网情况进来APP,首页出现空白的情况;2、避免每次进首页都重新加载,消耗用户大量流量。
对于只关注需求的同学来讲,测试设计主要就围绕网络情况,以及广告图片是否能够显示出来就够了,会忽略里面潜在的很多风险。
开发实现原理图:
综上:会发现功能需求上虽然都是要有缓存机制,但是Android和iOS的实现是有差异的。
ios设备每次访问服务器后,不管服务器是否有新数据,都会直接下载新数据,而Android当发现服务器并无新数据时,就直接显示本地缓存了,不再下载新数据。原因是ios用户对于流量并不是特别在意,Android用户会更加在意流量。
为了测试设计的更全面,可以将整个流程划分为如下阶段:
1、客户端:即通常所说的前端。服务端,即通常所说的后端。
通常情况下,一旦一个需求,涉及到前端和后端的交互,需要获取服务器的数据时,第一反应就是,除了测试前端以外,后端是否有一个可视化的交互界面,进行数据配置。
这里是有的,因此测试用例设计和覆盖,需要覆盖到APP以及可视化的web后台网站。
当然,因为web后台网站是对内主要供运营人员使用,不需要对外用户开放的,因此只需要保证功能的准确和稳定性即可,不需要关注用户体验,以及UI的美观度如何。
2、启动程序
一旦涉及到启动程序,首要考虑热启动、冷启动。
热启动:程序的activity已经存在,只是暂时在不活跃状态。
冷启动:程序的activity不存在,首次启动。
程序安装后首次启动,非首次启动,home键回桌面再启动分别对应的是冷启动还是热启动呢?
3、联网
网络类型:wifi、手机网络、无网、弱网,是否都是同样的规则?合理吗?
当本地没缓存的时候,又没有网络的情况下,首次进入程序会怎样?不显示banner区域吗,显示banner区域但内容空白吗?有一个本地默认的图片可能是大多数APP的选择。
4、访问服务器
后端提供了哪些接口,每个接口发送的请求参数、返回的数据类型。(就是我们所看到的后台)
后端可视化平台部署哪些内容?通常涉及图片时,肯定有图片的格式?图片的大小?banner的时间有效期?
另外后端部署了无效不合法网址?前端对于后端传的异常如何处理?后端部署的内容为空或者没有按规范来时,前端是什么表现?
5、 缓存数据比对
比对的规则是怎样的?以什么为准判断是否一致或者为最新?后台部署提交的时间戳?
6、存至本地
缓存存储到本地时,存到什么路径?android通用的路径都是/sdcard/android/data/包名/,还可能是另外创建的目录
缓存是明文还是加密??我们测试的项目里,缓存是一个md5码,并且md5码作为唯一标识去比对。
另外每次的缓存内容是覆盖替换的,还是累加的?如果是累加的,是否会有清理机制?否则会导致程序占据大量手机存储空间。
容错处理的角度考虑的话,还要考虑缓存内容被修改了不合法或者清理工具把目录给清掉了呢,程序会异常吗?
了解这些,我们再看看,当遇到后端部署了,前端测试展示并没有更新,可以怎么定位和分析?
1、后端部署的准确吗?
2、前端APP上我的操作有时机触发刷新吗?
2、如果确实行了触发刷新的操作,但是刷新之后还是显示旧的?那么服务端返回给我的数据是不是新数据了呢?
3、服务端没有返回新数据?那是否前端的请求有问题?缺失了部分必传参数?
服务端有返回新数据?那么肯定是前端APP的问题。