如何使用 go1.18 在一个源文件中运行多个模糊测试用例?

go 1.18 几天前发布了。从 Go 1.18 开始,它在其标准工具链中支持模糊测试


但是当我试图写我的案例时,它不能在一个包(或一个文件?)中运行多个案例。代码:


package xxx

func FuzzReverse(f *testing.F) {

    testcases := []string{"Hello, world", " ", "!12345"}

    for _, tc := range testcases {

        f.Add(tc) // Use f.Add to provide a seed corpus

    }

    f.Fuzz(func(t *testing.T, orig string) {

        Reverse(orig)

    })

}


func FuzzReverse2(f *testing.F) {

    testcases := []string{"Hello, world", " ", "!12345"}

    for _, tc := range testcases {

        f.Add(tc) // Use f.Add to provide a seed corpus

    }

    f.Fuzz(func(t *testing.T, orig string) {

        Reverse(orig)

    })

}

然后我运行命令:


go test  -fuzz .

或者


go test  -fuzz=Fuzz

但结果是:


testing: will not fuzz, -fuzz matches more than one fuzz test: [FuzzReverse FuzzReverse2]

像这样:

http://img1.mukewang.com/637e09520001008f11020109.jpg

本教程没有提示,感谢帮助。(我在 stackoverflow 中的第一个问题,非常感谢!!!!)

我尝试在一个源文件中编写多个模糊案例,然后运行 cmd: go test -fuzz 。期望它可以进行模糊测试,但出现错误:\

测试:不会进行模糊测试,-fuzz 匹配多个模糊测试:[FuzzReverse FuzzReverse2]


慕的地6264312
浏览 90回答 2
2回答

千万里不及你

这是一个 quick-n-dirty bash 脚本,它将找到当前文件夹中的所有模糊测试并每次运行它们 10 秒:#!/bin/bashset -efuzzTime=${1:-10}files=$(grep -r --include='**_test.go' --files-with-matches 'func Fuzz' .)for file in ${files}do    funcs=$(grep -oP 'func \K(Fuzz\w*)' $file)    for func in ${funcs}    do        echo "Fuzzing $func in $file"        parentDir=$(dirname $file)        go test $parentDir -run=$func -fuzz=$func -fuzztime=${fuzzTime}s    donedone要使用此脚本,请创建一个名为的新文件fuzzAll.sh并将此代码复制到其中,然后运行./fuzzAll.sh以每次运行所有模糊测试 10 秒,或传递不同的数字以运行不同的持续时间(例如./fuzzAll.sh 30每次运行 30 秒)为了进一步参考,存在一个允许多个模糊测试目标的现有 github 问题,但没有关于何时添加它的 ETA。

哆啦的时光机

好吧,我已经阅读了 Go-fuzz 模块的源代码,事实是它不支持每次执行的多个案例。代码在:\Go\src\testing\fuzz.goif len(matched) > 1 {    fmt.Fprintf(os.Stderr, "testing: will not fuzz, -fuzz matches more than one fuzz test: %v\n", matched)    return false}我希望将来可以支持多案例执行。
打开App,查看更多内容
随时随地看视频慕课网APP