文章来源:网易易测(微信号:et163yun)
健壮性是指系统对于规范要求以外的各种输入进行处理的能力。是系统稳定性的重要指标之一。
在“云+瘦客户端”时代,app一般使用接口的方式,与云端进行资源交换。app的健壮性最直观的一部分就体现在与云端资源交换过程中的健壮性,比如:
● 对云端返回的各种非规范要求数据返回值,app能否作出正常的反应。
● 弱网条件下与云端交互,app能否作出正常的反应,等等。
这些是引发app crash的主要凶手之一,因此也应成为app功能测试中的重点。
如何做好健壮性测试?
当我们进行app测试,所有的服务都是采用api进行交互,并且app已接入了数十个第三方系统api,未来还有扩展的趋势时,健壮性测试可能就遇到以下难点:
● 很多第三方系统,直接接线上环境,在测试环境要怎么测?
● 就算在线上版本使用了线上环境,由于权限等限制,没有办法在线上第三方系统模拟各种非常规数据,怎么破?
● 一般测试时间很紧张,采用搭建mock服务器的方式进行模拟,时间上完全来不及,该如何应对?
● 模拟弱网条件,测试app的网络健壮性,怎样才能快速模拟?......
如何快速解决这些难题呢?
详细解决方案
主要思路就是:Fiddler抓包+AutoResponder拦截并且Mock数据+Fdiddler Sricpt网络限速
原理:通过设置手机无线网手动代理(设置ip和port),将app请求发送至Fiddler。由此Fiddler就可以抓取app发出的网络请求数据。
具体步骤不在此详述。重点要注意,如果抓取https包并且需要对内容进行解密,需要进行如下设置。
● AutoResponder支持多种拦截方式,如下图:
比如最常用的: 无前缀:表示基本搜索,表示搜索到字符串就匹配
前缀为Match:代表全匹配,大小写敏感。就是url必须完全一致的才能被Fiddler拦截
前缀为regex:代表匹配符合正则表达式规则的请求,并进行拦截,等等
小技巧:如果觉得url较长导致设置拦截url比较繁琐,可以直接把左侧抓取的接口,拖动到右边,然后适当的修改,这样效率很高。
● 返回Mock数据
首先快速获取基础数据。如下图所示:
从抓取的待测试接口,保存正常情况下返回的数据,作为基础数据,进行保存,假设命名为:testdata.txt
然后打开testdata.txt,并对里面返回的数据内容根据测试用例进行修改,改成任意你想要测试数据,作为mock数据
● 模拟服务器返回数据
将上述mock数据,作为待测试被拦截接口的返回值,返回给app。如下所示:
如上,在拦截接口的返回值里,选择find a file,然后选择testdata.txt作为返回数据。
至此,就可以对app的接口,给他模拟任何的非规范数据,测试app的处理健壮性了。
Fiddler支持,通过script来快速控制网速,如下所示:
request-tricky-delay: 代表每上传1KB数据,延迟多少毫秒
response-tricky-delay:代表每下载1KB数据,延迟多少毫秒
修改之后,保存,可以模拟出网络的状态。并且是热切换的。保存生效,不需要重启Fiddler之类的。
可以应对哪些测试场景?
在日常测试中,采用上述的方法,能快速灵活的应对哪些测试场景呢?
● 场景一:接口的各种异常返回码测试
只需要修改基准测试数据中的返回code即可
● 场景二:接口的各种异常返回字段值(比如,名字太长这样的值,在app端是否会自适应展示;各种边界值处理是否符合交互视觉定义等)
只需要修改,data中具体返回值内容即可
● 场景三: 接口返回字段动态新增、缺失,app能不能正常处理,会不会crash之类的
只需要修改返回字段数即可
● 场景四:某些页面的数据,在24小时内,根据时间变化,app进行不同的展示和处理。但是给你的测试时间也许只有12小时
此时,就可以模拟24小时不同的数据返回,就可以测试app的处理逻辑是否正确
● 场景五:接口弱网下数据的返回,以及app是否能正常处理
采用script限制各种网速,然后观察app的反应即可
● 场景六:升级测试,在正式发布前,需要看看升级文案和升级逻辑是否正常。
就可以模拟高版本的返回值和升级文案,然后测试app的升级逻辑。
等等,都是可以根据具体的业务逻辑进行模拟测试。
4.你可能还有以下问题
1.这是一种万能的测试方式吗?
答:与项目的具体业务相关。对于我所在的项目,接入的第三方系统接口提供的数据,数据本身的正确性,第三方系统已经测试过并且上线了。我需要关注的是我们项目的待测app对这些数据的处理方式是否正确,app才是我们测试的重点,测试目标要明确。
2.有了这种测试方法就够了吗?
答:这只是一种异常的辅助测试手段。它是对正向测试的补充和完善。在测试中,要优先保证app与真正的服务端交互正常,然后在利用这个辅助测试手段,进行异常和健壮性测试,主次要把握好。
3.如果你问这种解决方案最大的优点是什么?
答:快速且符合业务的需要。我知道有很多专业的弱网测试方案、Mock测试方案等,但是在日常快速迭代的产品中,介入的时间较长,一般会作为专项测试而存在。而本文描述的方法,可以渗透到日常测试,快速介入,尽可能早的发现缺陷。
总之,这只是我工作中一些尝试与总结,后续会继续深入探索。伴随着产品的成熟,而引入不同的测试手段和方法,期待和你一起探索进步!