去:模糊是β准备好了

2021-06-04 14:26:43

我们很高兴地宣布,本机模糊已准备好在其发展分支机构中进行β测试,Dev.Fuzz!

模糊是一种自动化测试,连续操纵输入TOA程序,以查找诸如恐慌或错误之类的问题。这些半随机的DataMutations可以发现现有的单元测试可能会错过的新代码覆盖率,否则会忽视的和边缘案例错误。由于模糊CanReach这些边缘案例,Fuzz测试对于发现泄漏和漏洞特别有价值。

这将从Dev.Fuzz开发分支构建Go Toolchain,并且一旦代码将来合并到Master分支,就不会确认。运转后,MOTIP可以充当GO命令的替换。你可以像现在一样的命令

DEV.Fuzz分支中将有正在进行的开发和错误修复,因此您将定期运行GOTIP下载DEV.FUZZ以使用最新代码。

为了与发布版本的Go兼容,请使用Gofuzzbeta构建标签作为在存储库中提交包含模糊目标的源文件。默认情况下在Dev.Fuzz分支中的构建时启用ThistAg。如果您有Quityabout如何使用它们,请参阅关于BuildTags的Gocommand文档。

Fuzz目标必须在Fuzzxxxx中的函数中处于* _test.go文件中。该函数必须传递一个* testing.f参数,就像一个* testing.targument传递给TestXXX函数。

下面是测试网络/ URLPackage的行为的模糊目标的示例。

// +构建GOFUZZBETAPCACKAGE FUZZIMPORT(" NET / URL""""测试"测试")func fuzzparsequery(f * testing.f){f.add(&# 34; x = 1& y = 2")f.fuzz(func(t * testing.t,querystr字符串){查询,err:= url.parsequery(querystr)如果err!= nil {t.skip( )} querystr2:= query.encode()query2,err:= url.parsequery(querystr2)如果err!= nil {t.fatalf(" parsequery无法解码有效的编码查询%s:%v&#34 ;,querystr2,err)}如果!反思。reflequal(查询,query2){t.errorf(" parsequery在被编码后给出不同的查询\ nbefore:%v \ nawter:%v",查询,查询,query2 )}})}}

这是一个开发分支中的测试版,因此您应该期望一些错误和一个不完整的功能集。检查标记为“fuzz”的问题的问题跟踪器,以保持现有错误和缺少功能的最新功能。

请注意,模糊可能会消耗大量内存,并且可能会在运行时影响您的手机的性能。 go test -fuzz默认值以并行运行模糊in $ gomaxProcs流程。您可能会降低流程的数量,而使用Go Test.Read通过运行GOTIP帮助TestFlag将Go Test命令的文档进行了模糊,如果您想要更多信息,请通过运行GOT测试命令。

还要意识到模糊引擎在运行时将在$ GoCache / Fuzz中展开测试覆盖Toa Fuzz缓存目录的值。目前有限制到可能写入FuzzCache的文件数或总字节数,因此它可能占据大量存储(即,几个GB)。通过运行GOTIP CLEAN -FUZZCACHE来计算模糊缓存。

即将到来的Go释放(1.17),此功能将不可用,但在未来的释放中,否则计划将其降落。我们希望此工作支持表型将允许开发人员开始编写模糊目标并提供有关设计的信息,以准备合并掌握。

如果您遇到任何问题或有一个功能请求的想法,请提交anissue。

有关该功能的讨论和一般反馈,您还可以参与#Fuzzing渠道搪瓷器松弛。