基于 fuzz 技术验证移动端 app 的健壮性

问题定义

app发布后经常容易出现各种诡异的crash, 这些crash固然可以通过各种崩溃分析服务去定位. 但是的确很影响用户体验.

在crash分类中有一类是后端接口引发的. 比如常见的引发app crash的原因

  • 接口自身变更, 接口失效或者超时, 比如用户进地铁
  • 接口格式变更. 字段缺失
  • 接口内容变更, int string格式搞错了. 某些字段原本是有值后来就变成了null

一旦出了问题, 后端背锅或者做兼容是常见的方案. 但是对于app自身来说,也需要加强健壮性测试.

健壮性的英文名字是Robust, 音译为"鲁棒性"(也不知道是哪个文盲起的, 流传太广了, 很容易被听到 "撸棒性"...不忍直视啊 不建议使用...)

解决方案设计

在app和后端接口之间设置一个代理. 然后利用代理自身的技术来mock掉返回结果. 从而伪造返回值.

在伪造返回值的基础上, 判断原始的数值, 根据类型自动衍生出多种测试用例. 比如

  • 如果是数字, 自动取几个典型场景. 放大和缩小N倍. 0 -1 2.00001等.
  • 如果是字符串. 根据长度自动缩短和延长内容. 并适当的取典型值, 比如""
  • 所有类型都会默认有机会出现null

工具介绍

工欲善其事必先利其器, 所以周末在公司加班了一天做了这样一个feature.

依赖的基础是我之前发帖介绍的接口测试框架. https://testerhome.com/topics/3614

这个代理工具自身已经被我剥离出来了.

startupapi
通用的接口测试工具, 基于录制并生成用例的设计.
测试技术交流 https://testerhome.com

Usage: startupapi [options]

  -r | --record
        录制模式, 会在特定的端口上开启代理, 或者mock模式
  -e | --export
        从数据文件中生成测试用例模板
  -m <value> | --mock <value>
        设定mock的规则, --mock $..name=xx,$..change=77 如果预期值是FUZZ则自动对特定字段进行fuzz, 比如--mock $..name=xx,$..change=FUZZ
  -p <value> | --port <value>
        监听的端口, 默认是7770
  -f <value> | --file <value>
        数据保存路径
  -u <value> | --url <value>
        限制mock使用的范围.  --mock quote.json,search.json
  -v | --verbose
        是否展示更多debug信息
  --help

startupapi --record --port 8787 --file proxy.har
startupapi --export har_file --url search,list
startupapi --mock --proxy 8787 --mock $..name=value,$..text=value2
startupapi --mock --proxy 8787 --mock $..name=FUZZ,$..text=value2 -url quote.json
startupapi  -r  -f /tmp/proxy.har -m $..name=xx -p 7777 -u quote.json

目前只支持了json结果的mock和fuzz.

可以设定只mock 特定接口特定字段 内容. 使用JsonPath指定要mock或者fuzz的接口字段.

mock演示

这是一个mock的演示

#启动代理监听7777端口, 把所有接口返回内容里面的current字段设置为8888, 名字设置为testerhome.  原始的交互数据保存在/tmp/下.
startupapi  -r  -f /tmp/proxy.har -m $..name=testerhome,$..current=8888 -p 7777

来个精细化版本的

#把所有的文本内容ST改成DD, 把9.98替换为77.7. 然后修改json结构中的当前价格
startupapi  -r  -f /tmp/proxy.har -m $..current=8888,9.98=77.7,ST=DD -p 7777

fuzz测试

把mock的结果值修改为FUZZ即可对特定的内容自动替换为fuzz类型的数据.

把mock结果值修改为NULL, 即可模拟json里面的null情况.

#把所有的文本内容ST改成DD, 把9.98替换为77.7. 然后修改json结构中的当前价格
startupapi  -r  -f /tmp/proxy.har -m $..current=FUZZ,9.98=77.7,ST=DD -p 7777 



长按二维码识别关注,您的支持是我们最大的动力。

公众号:测试梦工厂

QQ一群:300897805

  

时间: 2024-10-14 11:52:58

基于 fuzz 技术验证移动端 app 的健壮性的相关文章

使用moneykey对APP进行健壮性测试

注意:moneykey对app按钮伪随机点击,只能测试app稳定性和健壮性,无法进行常规测试 1.安装 A.jdk(不详细介绍) B.安装配置android配置环境:Android Studio 此环境自带SDK,方便下一步配置adb.下载Android Studio的参考资料戳这里 在Android Studio中查看SDK路径的方法见下图: 配置adb环境变量: vim  .bash_profile 添加 ANDROID_HOME=/Users/xxx/Library/Android/sdk

一种基于Android、iOS系统的移动端车牌识别技术,实现轻APP本地扫描识别车牌号

随着移动互联及移动终端的普及,OCR技术在移动端得到很好地应用,基于OCR技术开发出的移动端车牌识别SDK可以直接对汽车的车牌进行识别录入,替代原来的手工记录,然后再人工录入电脑的步骤,让车牌的识别.记录工作变得快捷.便利.准确,会给业务人员带来很大的便利.下面简单介绍一下移动端车牌识别技术: 移动端车牌识别技术是指通过计算机视觉.图像处理与模式识别等方法从车辆图像中提取车牌字符信息,从而确定车辆身份的技术.移动端车牌识别技术分为车牌定位.字符分割.字符识别三大部分.车牌区域在整幅图像中所占比例

React Native 技术 开发跨平台 Native App 初探

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/64190798 我们已经了解像 Titanium 和 PhoneGap 等框架,它们能让开发者用 Web 技术构建移动应用.这是一个优势,支持开发者使用原先网络和移动开发的相关技术.仅如此,相同的代码库经过小幅度的修改便能适用多个平台--这就是著名的一次编写,到处运行.然而,当涉及到构建应用的性能时,这些框架的缺点显露无遗,尽管它们有一些吸引力,但却一直更适用于构建原生应用.Rea

UI设计师必须了解:2015年十大移动端APP设计主流趋势

从移动端兴起,主流设计风格定型,再到Uber.Vine等现象级APP的崛起,移动端的APP设计直到现在才渐入佳境.促成这一切的影响因素很多,比如社会发展趋势的变化.共享经济的大热.新技术的积累,等等等等.这些事物的出现需要时间积累,这也是为什么这些应用到现在才火起来. 同样的,今年我们要关注的是定型了的巨屏手机和逐渐沉淀下来的可穿戴设备. 随着日常生活中所涉及到的移动端应用的增加,用户在这些东西上的所耗费的精神和脑力也越来越多.查看邮件.预订酒店.叫外卖都有赖于各种应用,而诸如Airbnb和Gr

【转】【CDC翻客】移动端App测试实用指南

 译者注:本文从测试人员的角度出发,提出了100多个在测试移动App过程中需要考虑的问题.不管你是测试人员.开发.产品经理或是交互设计师,在进行移动App开发时,这些问题都很有参考价值.我和Queen合力译出此文,分享给大家,希望有所帮助和启发. 英文原文: http://mobile.smashingmagazine.com/2012/10/22/a-guide-to-mobile-app-testing/ -------------------------------------------

基于C#.NET的高端智能化网络爬虫(一)(反爬虫哥必看)

前两天朋友发给我了一篇文章,是携程网反爬虫组的技术经理写的,大概讲的是如何用他的超高智商通过(挑衅.怜悯.嘲讽.猥琐)的方式来完美碾压爬虫开发者.今天我就先带大家开发一个最简单低端的爬虫,突破携程网超高智商的反爬虫技术. 一.什么是爬虫? 很多人说我们这些搞软件的人,总喜欢把虚拟世界里的事物跟现实中的东西扯上关系.这点我真不否认,脱离了现实,我们伟大的创举还有何意义? “爬虫”就是个例子,它对于我们开发人员而言,就是一段用来自动化采集网站数据的程序,结果跟现实中的虫子扯上了关系.听说是Googl

行驶证/驾驶证/身份证识别技术让共享汽车APP更加便捷

随着共享单车的快速流行,共享汽车也逐渐进入大家的视野,有些公司又相继推出共享汽车等平台,给广大用户带来了极大的便利. 共享汽车也是类似于共享单车,通过APP扫码租车,但是不同于共享单车,只需要扫描单车上的二维码就可以开启车锁,共享单车需要通过在APP上传租车人的身份证.驾驶证等证件信息,现在,痛点来了,上传身份证.驾驶证信息,如果是一项一项在APP中手工录入,非常的浪费时间和精力,用户使用体验就很差,可能就会流失很多客户资源.这时候,如果在APP中集成移动端身份证识别.驾驶证识别.行驶证识别等O

史无前例,详细视频讲解开发Android端APP开发!!

导读:本文记录了一个机友-小徐基于机智云APP开源框架,从搭建Java环境开始,教你下载JDk.下载AndroidStudio,到控制设备页面等,完成一款正式版安卓APP的开发过程.擅长硬件开发的小伙伴们,如果你想探索APP开发的奥秘,那就来看小徐分享的开发视频吧. 声明:           本人发视频是以个人分享精神.完全免费的心态发布的,这也是我个人生涯第一次录制视频并发布,课程好与坏咱们不谈,我尽最大的努力,把视频做好,把知识点传授给大家,但如果有用词不当,或讲错什么知识点,还请万分见谅

【转】 基于C#.NET的高端智能化网络爬虫

[转] 基于C#.NET的高端智能化网络爬虫 前两天朋友发给我了一篇文章,是携程网反爬虫组的技术经理写的,大概讲的是如何用他的超高智商通过(挑衅.怜悯.嘲讽.猥琐)的方式来完美碾压爬虫开发者.今天我就先带大家开发一个最简单低端的爬虫,突破携程网超高智商的反爬虫技术. 一.什么是爬虫? 很多人说我们这些搞软件的人,总喜欢把虚拟世界里的事物跟现实中的东西扯上关系.这点我真不否认,脱离了现实,我们伟大的创举还有何意义? "爬虫"就是个例子,它对于我们开发人员而言,就是一段用来自动化采集网站数