cover_image

FUZZ 测试实践

研发中心 潘攀 同程旅行技术中心
2018年09月10日 09:43

FUZZ测试这个概念的提出,其实已经有相当长的一段时间了。但是问问身边从事软件测试的朋友,很多人好像并没有听过或者对其并不熟悉,我想可能是跟FUZZ在实际工作中的运用不多有关。在APP测试中使用monkey工具的人很多,其实monkey工具的思想就是FUZZ


FUZZ 基本理念

图片


FUZZ测试到底指什么呢?我们来看看其概念:使用大量随机测试数据去测试软件并监控软件的异常。这里有几个特点使得在一般测试中不会使用它。

1、大量、随机测试数据:意味着这样的测试,业务目的性很弱或没有,同时需要准备大量随机数据很烦。

2、监控软件异常:意味着测试的目的不是业务流程和逻辑。

图片

简言之,它的测试数据和过程统统没有逻辑。但是它的意义也不言而喻,所以它常被用在安全测试领域。

目前做FUZZ测试有两种技术模式:基于生长和基于变异。简单说来,生长是基于数据模板生成随机测试数据,变异是基于协议分析,通过更改协议中某些位来生成测试数据。

FUZZ 自研工具

图片

基于以上概念的理解,我们开发了一个FUZZ测试工具,用于帮助需要或想要开展FUZZ测试的人员。该工具的核心是:生成大量测试数据(基于生长)→执行相关测试→对比测试结果(引入),因为不是为了安全测试,所以FUZZ原本的监控被测软件变成了测试结果展示和测试结果对比。该系统总体结构如下:

图片

该工具能够完成FUZZ测试的几个核心任务:自动生成大量随机测试数据,依此产生大量测试任务。自动触发执行测试并展示执行结果。新加入类似系统对比功能,能够展示新老版本或不同环境下被测系统的表现差异。该工具最早为DBRouter FUZZ测试而生,取得了不错的效果,下面我们来看看一些实例。

FUZZ 工具效果

图片

通过MySQLDBRouter的对比测试结果,我们找到bug,发现了不同,并且覆盖了大量构造的sql语句(虽然没有全覆盖sql语句),也加深了对DBRouter的认识。

1、随机构造大量sql语句并执行,从测试结果页可以看到执行状态、时间、及执行数等信息。


图片

2、在对比测试结果中发现了DBRouter bug:因为对返回的binary字段类型进行了处理,导致与MySQL的返回值不同。


图片


3、发现了对sql语句语法解析上的不同(虽然后来确认是DBRouter设计使然,但是在发现问题的作用上,效果是实现的)。


图片


4、另外也发现一些测试结果不同,确认是DBRouter事务处理上的特意而为。


图片


FUZZ 工具扩展

图片

DBRouter上进行FUZZ测试的收益不再一一列举。现在FUZZ中心加入了对HTTP FUZZ测试的支持,使其适用面更为广阔。HTTP FUZZ测试工具参照WFUZZ工具的使用模式和规则,实现了WFUZZ核心功能并集成到现有的FUZZ中心,扩展现有FUZZ系统。具体HTTP FUZZ的使用见下图:


图片


FUZZ工具的地址:

http://autotest.17usoft.com/fuzztest

HTTP FUZZ测试功能推出不久,欢迎有需要的小伙伴们多多试用,提供宝贵的意见和建议,用来改进工具,以便更好地为大家服务,同时也希望该工具能为软件产品的健壮性、稳定性等提升带来帮助。

FUZZ 后续改进

图片

最后说说反馈的不足。由于目前我们的工具执行端,不管http还是sql都是并发执行的,测试时被测系统短时间收到的请求数会比较高,对被测系统承压能力要求,可能超过了实际需求从而导致测试结果不符合预期。为此也对下一步的改进提供了方向,工具除了并发执行缩短时间,也要支持顺序执行供用户选择,用来满足只需被测系统稳定执行FUZZ测试的此类需求。


继续滑动看下一个
同程旅行技术中心
向上滑动看下一个