移动端的快速健壮性测试探索

移动端的快速健壮性测试探索
作者:王维  2016-11-24 09:41
《一》前言

健壮性是指系统对于规范要求以外的各种输入进行处理的能力。是系统稳定性的重要指标之一。

在“云+瘦客户端”时代,app一般使用接口的方式,与云端进行资源交换。app的健壮性最直观的一部分就体现在与云端资源交换过程中的健壮性,比如:

  1. 对云端返回的各种非规范要求数据返回值,app能否作出正常的反应。
  2. 弱网条件下与云端交互,app能否作出正常的反应。

等等。这些是引发app crash的主要凶手之一,也应成为app功能测试中的重点。

《二》项目背景

在我负责的项目app测试过程中,所有的服务都是采用api进行交互的,目前app已接入了数十个第三方系统api,未来还有扩展的趋势。如此健壮性测试就遇到以下难点:

  1. 很多第三方系统,直接接线上环境。在测试环境要怎么测?
  2. 就算在线上版本使用了线上环境,由于权限等限制,没有办法在线上第三方系统模拟各种非常规数据,怎么破?
  3. 一般测试时间很紧张,采用搭建mock服务器的方式进行模拟,时间上完全来不及,该如何应对?
  4. 模拟弱网条件,测试app的网络健壮性,怎样才能快速模拟?

......

因此,随着项目实践的深入,我一直在探索一种实用解决方案,不仅要能解决问题,还要能快速的解决问题。

《三》解决方案

主要思路就是:Fiddler抓包+AutoResponder拦截并且Mock数据+Fdiddler Sricpt网络限速

第一部分:Fiddler抓包

原理:通过设置手机无线网手动代理(设置ip和port),将app请求发送至Fiddler。由此Fiddler就可以抓取app发出的网络请求数据。

具体步骤不在此详述。重点要注意,如果抓取https包并且需要对内容进行解密,需要进行如下设置。

Alt pic

第二部分:AutoResponder拦截和Mock数据

(1)AutoResponder支持多种拦截方式,如下图:

Alt pic

比如最常用的: 无前缀:表示基本搜索,表示搜索到字符串就匹配

前缀为Match:代表全匹配,大小写敏感。就是url必须完全一致的才能被Fiddler拦截

前缀为regex:代表匹配符合正则表达式规则的请求,并进行拦截

等等

小技巧:如果觉得url较长导致设置拦截url比较繁琐,可以直接把左侧抓取的接口,拖动到右边,然后适当的修改,这样效率很高。

(2)返回Mock数据

首先快速获取基础数据。如下图所示:

Alt pic

从抓取的待测试接口,保存正常情况下返回的数据,作为基础数据,进行保存,假设命名为:testdata.txt

然后打开testdata.txt,并对里面返回的数据内容根据测试用例进行修改,改成任意你想要测试数据,作为mock数据

(3)模拟服务器返回数据

将上述mock数据,作为待测试被拦截接口的返回值,返回给app。如下所示:

Alt pic

如上,在拦截接口的返回值里,选择find a file,然后选择testdata.txt作为返回数据。

至此,就可以对app的接口,给他模拟任何的非规范数据,测试app的处理健壮性了。

第三部分:快速模拟弱网

Fiddler支持,通过script来快速控制网速,如下所示:

Alt pic

request-tricky-delay: 代表每上传1KB数据,延迟多少毫秒

response-tricky-delay:代表每下载1KB数据,延迟多少毫秒

修改之后,保存,可以模拟出网络的状态。并且是热切换的。保存生效,不需要重启Fiddler之类的。

《四》应对的测试场景

在日常测试中,采用上述的方法,能快速灵活的应对哪些测试场景呢?

(1) 接口的各种异常返回码测试

只需要修改基准测试数据中的返回code即可

(2) 接口的各种异常返回字段值(比如,名字太长这样的值,在app端是否会自适应展示;各种边界值处理是否符合交互视觉定义等)

只需要修改,data中具体返回值内容即可

(3) 接口返回字段动态新增、缺失,app能不能正常处理,会不会crash之类的

只需要修改返回字段数即可

(4) 某些页面的数据,在24小时内,根据时间变化,app进行不同的展示和处理。但是给你的测试时间也许只有12小时

此时,就可以模拟24小时不同的数据返回,就可以测试app的处理逻辑是否正确

(5) 接口弱网下数据的返回,以及app是否能正常处理

采用script限制各种网速,然后观察app的反应即可

(6) 升级测试,在正式发布前,需要看看升级文案和升级逻辑是否正常。

就可以模拟高版本的返回值和升级文案,然后测试app的升级逻辑。

等等,都是可以根据具体的业务逻辑进行模拟测试。

《五》 总结

如果你问我这是一种万能的测试方式吗?

答:与项目的具体业务相关。对于我所在的项目,接入的第三方系统接口提供的数据,数据本身的正确性,第三方系统已经测试过并且上线了。我需要关注的是我项目的待测app对这些数据的处理方式是否正确,app才是我测试的重点,测试目标要明确。

如果你问有这种测试方法就够了吗?

答:这只是一种异常的辅助测试手段。他是对正向测试的补充和完善。在测试中,要优先保证app与真正的服务端交互正常,然后在利用这个辅助测试手段,进行异常和健壮性测试,主次要把握好。

如果你问这种解决方案最大的优点是什么?

答:快速且符合业务的需要。我知道有很些专业的弱网测试方案、Mock测试方案等,但是在日常快速迭代的产品中,介入的时间较长,一般会作为专项测试而存在。而本文描述的方法,可以渗透到日常测试,快速介入,尽可能早的发现缺陷。

总之,这只是在当前阶段的一些尝试,后续会继续深入探索。伴随着产品的成熟,而引入不同的测试手段和方法,持续探索!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值