健壮性测试又称容错测试,主要是用于测试系统在出现故障时,是否能够自动恢复或者忽略故障继续运行。我们这里要讲的就是,在接口数据返回异常时,APP可以继续运行,不崩溃。

1、为什么要做app对服务端接口数据的容错测试?

1.1、首先考虑一个问题:App客户端的数据来源是什么?

1)本地数据(读取本地文件、代码中配置等)

2)网络请求的数据

App客户端网络请求的数据,一般都是以开发时约定好的json格式的形式来传输,如下(当然,也会有不是json的情况):

1.2、既然都是约定好的,那会有什么问题?

情况1:客户端开发认为:我请求了,就一定会给我结果,写代码时,就没有考虑到请求不返回的情况

情况2:客户端开发认为:我请求了,就一定会给我正确的格式,写代码时,就没有考虑到请求返回的格式不正确的情况,比如上图的json结构发生变化

情况3:接口返回的某个字段的value值,需要客户端进行二次处理,开发在处理时,没有考虑到一些异常值的情况,比如上图的code,msg等值为空或者NULL等等

1.3、以上情况,可能会有什么后果?

情况1:始终处于loading加载中,未做超时处理

情况2、3、4:空指针或数组越界报错,导致直接闪退

以上几种情况,如果不进行专门的容错测试,从测试直到上线,可能都是没问题的,但突然有一天,服务器接口修改或者其他情况,导致接口数据返回出现异常,线上就出现很多严重的崩溃问题,bug率急剧飙升,这就是因为客户端没有进行很好的容错处理。

2、app对服务端接口数据的容错测试的测试方法
测试工具:fiddler、charles或其他抓包工具,下面以fiddler为例

情况1测试方法:

1、手机设置代理,但是不开启fiddler(模拟开启了wifi,但是却无法上网的情况)

2、进入相应的界面,查看现象,如果一直处于loading,就说明没有加超时处理

情况2、3、4测试方法:
1、手机设置代理,开启fiddler

2、将要测试的接口断点(bpu + url)

3、在app中进行操作,使之请求该接口

4、拦截到请求后,修改请求,并使之返回给app

在这个界面就可以修改响应,比如我们要测每一个value的类型,就去修改他,修改完后点击run

5、查看当前界面及后续界面的操作,看有无卡死问题或闪退问题

需要修改成哪些场景进行测试?

1、改成404、500等异常返回状态

2、改成非预期格式(比如预期整个数据是json,那就把整个数据改成非json格式)

3、依次删除每一个key

4、依次修改每一个value的类型(string、int、array、object、null这五个类型之间相互修改)

5、依次修改每一个value的值(类型不变)

3、app对服务端接口数据的容错测试的几个原则:

1)每个新增的接口,理论上都要进行测试,评估工期的时候要预留出测试时间

2)修改了接口返回数据后,会造成客户端一些功能不可用,这是正常的现象,我们测试的原则是,不能有卡死或闪退的严重问题,如果开发不愿意改,必须坚持原则

3)修改value的测试数据时,应该与业务相结合来选取,测试前要搞清楚每个字段是用来干什么的

4)当前app界面如果测试发现不会闪退,但可能点击界面上的某个元素会造成闪退,因此也需要测试当面界面上点击后续元素是否会造成闪退(比如一个书籍列表页,返回的某个书籍元素id格式不正确,列表页不会闪退,但点击这本书籍,进入下个界面时,可能会造成闪退)

4、使用AutoResponder自动mock
也有人可能想到我一个个在fiddler上修改岂不是很麻烦,fiddler这边提供了一些快捷的方法。
右键要测试的接口—SAVE—response body,就可以保存json文件到本地,用nodepad++等工具打开就可以直接编辑修改。再开启AutoResponder,选择本地的json就可以自动mock,模拟返回数据。

我们只要在文档里修改好数据,每一次访问接口就可以自动mock
5、使用脚本自动修改测试。
如果我的json嵌套很多,那我一个个手动测试岂不是很麻烦?这里我们可以采用脚本来进行取代这些重复的步骤。
我这里使用的是python。
1.在你电脑上建立一个txt文件,把该文件地址配置到下面这行,到时候测试时,把待测接口拿到的原始数据,复制到这个文件里保存即可。
2. 使用fiddler的autoresponse功能,把待测接口的自动返回改成以下这个你设置的本地路径
3.使用脚本把把测试json数据写入到testjson.txt文件中,以供fiddler进行autoresponse测试
我这里设置的是每按一次回车执行一次测试,我们执行后可以查看app看是否崩溃。

import jsonclass RobTest:def __init__(self):self.ori_json = {}self.test_datas= ["--RobTestString--", 0, [1], {"--RobTestKey--": "--RobTestValue--"}, None]# 读取本地txt中的测试数据,并转换为json对象def get_ori_txt(self):# 在你电脑上建立一个txt文件,把该文件地址配置到下面这行,到时候测试时,把待测接口拿到的原始数据,复制到这个文件里保存即可。f = open('D:/orijson.txt', 'r')line = f.readline()res = ""while line:res += lineline = f.readline()f.closeres = res.encode('utf-8').decode('utf-8', errors='ignore').encode('utf-8')      # 解决json文件里带中文时会报错的问题self.ori_json = json.loads(res)return self.ori_json# 把测试json数据写入到testjson.txt文件中,以供fiddler进行autoresponse测试def write_test_file(self, key_name = None):self.test_jsontxt = json.dumps(self.ori_json)if key_name:self.test_jsontxt = self.test_jsontxt.replace("\"" + key_name + "\"", '"---ROBTEST---"')print (self.test_jsontxt)# 使用fiddler的autoresponse功能,把待测接口的自动返回改成以下这个你设置的本地路径with open('D:/testjson.json', 'w') as f:f.write(self.test_jsontxt)#提示用户输入回车,进行下一条case的测试input("-------输入回车后,可以继续测试下一个case-------")# 执行测试def do_test(self, testjson):a = testjsonfor key in list(a.keys()):# 测试key不存在self.write_test_file(key)# 测试value改变的各种情况tempvalue = a[key]for testData in self.test_datas:a[key] = testDataself.write_test_file()a[key] = tempvalue# 如果当前键值对的value值是string,还需要测试空字符串的情况if isinstance(a[key],str):# 测试空字符串的情况a[key] = ""self.write_test_file()a[key] = tempvalue# 如果当前键值对的value值是dict,还需要测试空dict的情况,并且需要递归测试if isinstance(a[key], dict):# 测试空dict的情况a[key] = {}self.write_test_file()a[key] = tempvalue#递归测试self.do_test(a[key])#如果当前键值对的value是list,还需要测试空dict的情况,并且如果第一个元素是dict,需要递归测试if isinstance(a[key], list) and len(a[key]) > 0:# 测试空list的情况a[key] = []self.write_test_file()a[key] = tempvalue# 递归测试if isinstance(a[key][0], dict):self.do_test(a[key][0])if __name__ == "__main__":t = RobTest()t.get_ori_txt()t.do_test(t.ori_json)print("测试完毕")

后面的话我们可以更进一步的结合appium自动化自动判断app有没有崩溃,这里我就不详细展开了。

app对于接口返回数据的容错测试(健壮性测试)相关推荐

  1. 移动端测试 APP启动性能分析 WebView性能分析 H5性能分析 卡顿分析 帧分析 CPU统计 网络流量分析 耗电量指标 弱网测试 健壮性测试 兼容性测试 Amdahl

    Android官网使用指南性能:https://developer.android.com/topic/performance 一.APP启动性能分析 APP的启动过程 调用起APP.创建一个空白窗口 ...

  2. php app接口id参数类型过滤,PHP开发APP接口---返回数据的封装类

    /** * app返回数据类 * 1.接受多维,缺少键名的数组, * 2.可由输入的format参数决定返回数据格式 * 例子:Response::show(200, 'success', $data ...

  3. 高德逆地理编码接口返回数据格式不统一以及百度逆地理编码接口返回数据解析失败的踩坑记录

    最近有个需求是定位后根据定位的经纬度获取当前地址的详细信息,例如获取街道名称,街道号,乡镇街道编码,区域编码等信息. 于是乎找到了高德的逆地理编码接口,看了看正好符合我的需求.然而使用起来并不顺利! ...

  4. php验证返回值,php接口返回数据 用echo 还是return?

    php接口返回数据 用echo 还是return? 作者:PHPYuan 时间:2018-06-10 23:40:39 框架用多了,也是有坏处的,之前一直用框架写接口,返回数据时都是用的return ...

  5. Charles 修改接口返回数据

    前言    测试中,我们经常会遇到一些边界值数据很难造出来,首先能想到的是能否可以模拟这些场景,以覆盖case,这时经常需要修改接口请求或者返回数据.在我之前的文章有介绍如何通过打断点的方式进行修改, ...

  6. 接口返回html转换josn,接口返回数据Json格式处理

    有这样一个页面 , 用来显示用户的账户记录数据,并且需要显示每个月的 收入 支出合计 ,在分页的时候涉及到一些问题,需要对返回的Json格式做处理,处理起来比较麻烦,后端返回的Json数据格式形式如下 ...

  7. springboot 接口返回数据时 net.sf.json.JSONNull[“empty“]) 异常

    springboot 接口返回数据时 net.sf.json.JSONNull["empty"]) 异常 参考文章: (1)springboot 接口返回数据时 net.sf.js ...

  8. python 美团api接口对接_python实现比对美团接口返回数据和本地mongo数据是否一致示例...

    本文实例讲述了python实现比对美团接口返回数据和本地mongo数据是否一致.分享给大家供大家参考,具体如下: 应用背景:美团平台商品的上下架状态.库存.售价,和mongo库存储的是否一致. too ...

  9. 酷友观点/经验:支付接口返回数据接收地址,session数据丢失(或者说失效)的问题浅析(原创文章)...

    酷友观点/经验:支付接口返回数据接收地址,session数据丢失(或者说失效)的问题浅析(原创文章) 最近手头在开发一个游戏官网,在支付模块采用神州付技术支持,神州付数据表单中要求提供服务器返回地址和 ...

  10. F12 界面:请求响应内容 Preview 和 Response 不一致、接口返回数据和 jsp 解析到的内容不一致

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 情况描述: 我有一个接口只是简单的查询列表数据并返回给前端作一个表格展示. 接口返回的 use ...

最新文章

  1. 抢红包算法 c语言,红包分配算法,抢红包算法
  2. Python Scrapy 验证码登录处理
  3. 使用Leangoo玩转故事地图
  4. gelera mysql_基于Galera的MySQL高可用集群
  5. _Linux系统编程—信号集操作函数
  6. app启动页自动跳转源码_关于移动端App启动页的策划方案
  7. 解决:VS中进行Qt开发,编译时报错:打不开QWidgets.h等文件的问题
  8. ASP.NET MVC3 中的AJAX
  9. 图论算法在机试实现中的一些技巧和陷阱
  10. 大数据学习笔记07:分布式文件系统HDFS
  11. [DevExpress]设置RepositoryItemComboBox只可下拉选择不可编辑
  12. java 物联网 eclipse_Eclipse物联网
  13. 动态添加Table tbody 给option 下拉框动态赋值 逻辑删除
  14. struts2:数据标签
  15. 我想自己写一个扫雷,用Python
  16. 机器学习——LBP特征
  17. 鲍威尔方法c语言程序,鲍威尔法编程-powell法编程-c语言编程-c++6.0.doc
  18. 我们来试着解答一下下面的题目(8)(DP/多重部分和)
  19. 中国防篡改封条市场深度研究分析报告
  20. 淘宝双十一自动化领喵币python脚本

热门文章

  1. (五)青龙面板 企业微信应用推送+详细教程【2022年5月20日】
  2. 如何做一份淹没的水深分布图
  3. halcon 20.11.02 深度学习语义分割例程报错
  4. .NET在蹉跎中一路前行1
  5. 【多式联运】基于模拟退火优化遗传算法求解多式联运运输问题(含碳政策)含Matlab代码
  6. PTB IP——支持电信配置文件的精确同步:5G
  7. 数据库数据模型(关系型模型与非关系模型的区别)
  8. 辛苦开发的 App 被山寨?阿里帮你为 APK 上把加固锁
  9. SAP ABAP BDC调用
  10. java给pdf文件加水印