在最近项目的测试中,我们引入了模糊测试(Fuzz testing)。在这个过程中,接触到了Sulley,一款用Python实现的用于网络协议fuzz testing的开源测试框架。跟其他的开源工具比起来,使用上比较灵活,而且也很方便。
举例来说,在测试过程中如果出现了目标程序crashing的情况,会导致后续的测试无法继续进行下去。针对这种情况,Sulley提供了一个用Python实现的进程监控的Agent(process_monitor.py),它的功能就是类似于watchdog,一旦检测到程序崩溃,会自动重启目标程序,使后续测试能顺利进行下去。如果程序的内部数据,比如某些配置已经由于之前的Fuzz testing被破坏掉了,只是简单重启目标程序还不足以让后续的测试正常的进行,可以选择在测试之初,直接把目标程序装在vmware虚拟机上,同样的,Sulley也提供了一个用来控制vmware虚拟机的Agent(vmcontrol.py),可以完成对虚拟机及snapshot的操作。有个这个Agent的协助,我们可以在目标程序环境准备好之后但是测试开始之前,对虚拟机做个vsnapshot,然后在测试开始之后,一旦发现crash,可以利用这个Agent直接把虚拟机rollback到之前预存好的snapshot状态,然后测试继续,够直接吧,呵呵。