模糊测试已经准备好进入Beta测试
3 分钟阅读
Fuzzing is Beta Ready - 模糊测试已经准备好进入Beta测试
Katie Hockman and Jay Conrod 3 June 2021
2021年6月3日
我们很高兴地宣布,原生模糊测试已经准备好在tip上进行beta测试了!
Fuzzing是一种自动化测试,它持续操纵程序的输入,以发现panic或bug等问题。这些半随机的数据突变可以发现现有单元测试可能错过的新的代码覆盖率,并发现边缘用例的bug,否则这些bug就不会被注意到。由于 fuzzing 可以接触到这些边缘用例,所以模糊测试对于发现安全漏洞和漏洞特别有价值。
关于该功能的更多细节,请参见 golang.org/s/draft-fuzzing-design。
开始使用
要开始使用,您可以运行以下命令
|
|
这将从主分支构建Go工具链。运行这个命令后,gotip
可以作为go
命令的直接替代者。现在您可以运行如下命令
|
|
编写模糊测试
一个模糊测试必须在*_test.go
文件中以FuzzXxx
的形式成为一个函数。这个函数必须被传递一个*testing.F
参数,就像TestXxx
函数被传递*testing.T
参数一样。
以下是一个测试net/url包行为的模糊测试的示例。
|
|
您可以在pkg.go.dev阅读更多关于fuzzing的内容,包括Go的fuzzing概述和新的testing.F类型的godoc。
期望
这是一项仍处于测试阶段的新功能,因此您应该会遇到一些错误和不完整的功能集。请查看问题追踪器中标有 “fuzz”的问题,以了解现有错误和缺失功能的最新情况。
请注意,fuzzing会消耗大量内存,在运行时可能会影响您的机器性能。 go test -fuzz
默认为在$GOMAXPROCS
进程中并行运行fuzzing。您可以通过在go test
中明确设置-parallel
标志来降低模糊处理时使用的进程数。如果您想了解更多信息,可以运行 gotip help testflag
阅读 go test
命令的文档。
还要注意的是,模糊测试引擎在运行时,会将扩大测试范围的数值写入$GOCACHE/fuzz
的模糊缓存目录中。目前对写入模糊缓存的文件数量或总字节数没有限制,所以它可能会占用大量的存储空间(即几个GB)。您可以通过运行 gotip clean -fuzzcache
来清除 fuzz 缓存。
下一步是什么?
这项功能将在Go 1.18中开始使用。
如果您遇到任何问题或有任何关于该功能的想法,请提交问题。
关于该功能的讨论和一般反馈,您也可以参与Gophers Slack的#fuzzing频道。
Happy fuzzing!