go-fuzz:Go的随机测试
Go-fuzz是一种覆盖率指导的测试用于测试Go软件包。 模糊测试主要适用于解析复杂输入(文本和二进制)的程序包,对于强化对可能来自潜在恶意用户(例如,通过网络接受的任何内容)的输入进行解析的系统的加固特别有用。
注意: go-fuzz最近增加了对模糊化的初步支持。 有关更多详细信息,请参见以下。 如果您遇到模块问题,请提出详细信息。 一种解决方法是通过export GO111MODULE=off禁用模块。
用法
首先,您需要编写以下形式的测试函数:
func Fuzz ( data [] byte ) int
数据是由模糊测试生成的随机输入,请注意在大多数情况下它是无效的。 如果模糊器在随后的模糊处理中应提高给定输入的优先级,则该函数必须返回1(例如,输入在词法上正确且已成功解析); -1(即使提供新的覆盖范围也不能将输入添加到语料库); 否则为0; 其他值保留供将来使用。
Fuzz函数必须位于go-fuzz可以导入的软件包中。 这意味着您要测试的代码不能在包main 。 但是,支持模糊internal软件包。
Fuzz函数的基本形式只是解析
1