④在普通的功能性自动化测试验证压力测试结构之后,再有目的地做一些探索性的测试。
图2 UI原型图
图2中给出一个我使用WPF设计的UI原型图,配合上述流程图,可以看出四大块功能:Fuzz选项,被Fuzz的样本库配置,目标测试服务器配置,发送(启动测试)选项。
图3 Fuzz选项示意图
Fuzz功能设计
不同的项目和产品,不同的测试目标,Fuzz的策略和算法也不尽相同,但理念是一致的,那就是把正常的输入混淆以生成更多的输入值。比较通用的做法就是字节替换。字节替换意味通过将文件或者字符串中的字节替换成策略中的预设字节以达到Fuzz的效果, 如图3中给出了Fuzz选项示意。
其中:
Replace bytes:要替换为的字节。
Replace times:替换的次数,意味着样本里有多少字节会被替换成目标字节,如果选中Use Max file length, 意味着文件中所有字节都会被替换一边,假设文件长度是10个字节,那一份样本 Fuzz之后就是10份样本。
Target directory:Fuzz之后的样本保存路径。
Scope:Fuzz范围,因为有些文件太大,如果是针对所有字节全Fuzz 一边会造成测试数据过于庞大,所以一般针对大文件会指定Fuzz的字节范围。
Culture text:针对全球化测试的需求,需要测试多语言文化下的系统功能,所以在Fuzz的同时并随机生成指定的语言文化字符串以应测试之需,更广地覆盖了测试范围。该部分会在后面部分再次探讨。
本文所用到的邮件样本库里的样本是以EML格式存在的(EML格式是微软公司在Outlook中所使用的一种遵循RFC822及其后续扩展的文件格式,并成为各类电子邮件软件的通用格式),在Fuzz之前要进行EML文件解析,一封邮件包含subject、 header、 body、attachment四个部分, 于是Fuzz的任务便拆分成了分别Fuzz邮件的四个部分,每一个部分分别Fuzz之后再与其他部分的结果排列组合成新的更多的样本。示意流程如图4所示。
图4 邮件样本Fuzz示意流程图