我要提高 Go 程序健壯性,Fuzzing 來了!

源 / 文/
什么是 Fuzzing
為什么要做 Fuzzing
發(fā)生在身邊的 Fuzzing
快速上手
$ go get golang.org/dl/gotip
$ gotip download dev.fuzz
// +build gofuzzbeta
package tests
import (
"net/url"
"reflect"
"testing"
)
func FuzzParseQuery(f *testing.F) {
f.Add("x=1&y=2")
f.Fuzz(func(t *testing.T, queryStr string) {
query, err := url.ParseQuery(queryStr)
if err != nil {
t.Skip()
}
queryStr2 := query.Encode()
query2, err := url.ParseQuery(queryStr2)
if err != nil {
t.Fatalf("ParseQuery failed to decode a valid encoded query %s: %v", queryStr2, err)
}
if !reflect.DeepEqual(query, query2) {
t.Errorf("ParseQuery gave different query after being encoded\nbefore: %v\nafter: %v", query, query2)
}
})
}
gotip test -fuzz=FuzzParseQuery 命令,輸出結果:fuzzing, elapsed: 3.0s, execs: 319 (106/sec), workers: 4, interesting: 15
fuzzing, elapsed: 6.0s, execs: 665 (111/sec), workers: 4, interesting: 15
fuzzing, elapsed: 9.0s, execs: 1019 (113/sec), workers: 4, interesting: 15
fuzzing, elapsed: 12.0s, execs: 1400 (117/sec), workers: 4, interesting: 15
...
Fuzzing 會消耗大量的內存,在運行時會影響到機器的性能(一運行,小風扇就轉了起來)。 Fuzzing 會默認使用 GOMAXPROCS相同的核數,可以通過執(zhí)行-parallel標識來控制數量。Fuzzing 會默認在運行時,將擴大測試范圍的數值寫入 $GOCACHE/fuzz內的模糊緩存目錄,目前是沒有限制的,可以通過運行gotip clean -fuzzcache來清除。
總結
好文推薦


985 研究生組團詐騙,一個中招就關 App,涉案金額超 1 億,受害人遍布全國

清華博士接親被要求現場寫代碼,網友:真是面向對象編程!

字節(jié)跳動P0級事故:實習生刪除GB以下所有模型,差點沒上頭條......
一鍵三連「分享」、「點贊」和「在看」
技術干貨與你天天見~
評論
圖片
表情

