国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区

當前位置:首頁 > 科技  > 軟件

一文掌握 Golang 模糊測試(Fuzz Testing)

來源: 責編: 時間:2023-08-05 11:46:02 5035觀看
導讀模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或錯誤,特別是容易被忽視的邊界情況。模糊測試

Dth28資訊網——每日最新資訊28at.com

模糊測試(Fuzz Testing)

模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或錯誤,特別是容易被忽視的邊界情況。模糊測試的基本思路是在測試過程中生成大量的隨機數,然后將這些數據輸入到被測試的程序中,監測程序的異常運行結果來分析程序中的缺陷和漏洞。Dth28資訊網——每日最新資訊28at.com

Golang 中的模糊測試

Golang 從 1.18 版本開始將模糊測試整合進了標準庫,通過標準庫 testing/fuzz 來實現模糊測試,Golang 引入模糊測試可以幫助開發者進一步保障和提高應用程序的安全性。Dth28資訊網——每日最新資訊28at.com

Golang 中的模糊測試是通過數據構造引擎自動構造出(也可以借助開發者提供的初始數據)大量隨機數據,作為程序的輸入來進行測試的一種方式。模糊測試會監測程序運行過程中是否出現 panic、斷言失敗、無限循環等異常情況。這些通過數據構造引擎生成的數據被稱為語料(corpus) 。模糊測試是一種持續測試的手段,如果不限制執行的次數或者執行時間,就會一直執行下去。Dth28資訊網——每日最新資訊28at.com

模糊測試和單元測試類似的地方是測試文件也是以 _test.go 為后綴名,不同的是模式測試函數需要以 Fuzz 為前綴,后面跟上一個或多個字符或字符組合來標識測試用例的名稱(一般使用被測的函數名稱),參數必須是 f *testing.F。Dth28資訊網——每日最新資訊28at.com

看個例子

以 json 格式校驗工具https://github.com/luduoxin/json-validator-go 為例,在 validator 包中的 scanner.go 文件中新增一個除法函數,代碼如下:Dth28資訊網——每日最新資訊28at.com

func Div(a, b int) int {	return a / b}

這個函數顯然沒有考慮除數為 0 的情況,如果使用單元測試,使用的測試數據沒有考慮除數為 0 的情況的話,這個問題就不會被發現,但是使用模糊測試就可以測出這種問題。然后在 validator 包中的 scanner_test.go 文件中添加模糊測試用例,代碼如下:Dth28資訊網——每日最新資訊28at.com

func FuzzDiv(f *testing.F) {    f.Fuzz(func(t *testing.T, a, b int) {        Div(a, b)    })}

然后運行模糊測試用例,如下命令是運行所有模糊測試用例:Dth28資訊網——每日最新資訊28at.com

$ go test -fuzz .fuzz: elapsed: 0s, gathering baseline coverage: 0/2 completedfailure while testing seed corpus entry: FuzzDiv/120fad832ddff45a1b2b70e7a31805a5c8d84f773566e0d19799aeda53b3f9c0fuzz: elapsed: 0s, gathering baseline coverage: 0/2 completed--- FAIL: FuzzDiv (0.02s)    --- FAIL: FuzzDiv (0.00s)        testing.go:1349: panic: runtime error: integer divide by zero            goroutine 55 [running]:            runtime/debug.Stack()                /usr/local/Cellar/go/1.18.3/libexec/src/runtime/debug/stack.go:24 +0x90            testing.tRunner.func1()                /usr/local/Cellar/go/1.18.3/libexec/src/testing/testing.go:1349 +0x1f2            panic({0x119ccc0, 0x12ed080})                /usr/local/Cellar/go/1.18.3/libexec/src/runtime/panic.go:838 +0x207            github.com/luduoxin/json-validator-go/validator.Div(...)                /Users/ning/projects/go/json-validator-go/validator/scanner.go:634            github.com/luduoxin/json-validator-go/validator.FuzzDiv.func1(0x0?, 0x0?, 0x0?)                /Users/ning/projects/go/json-validator-go/validator/scanner_test.go:71 +0x33            reflect.Value.call({0x1199380?, 0x11d2428?, 0x13?}, {0x11c45aa, 0x4}, {0xc000188360, 0x3, 0x4?})                /usr/local/Cellar/go/1.18.3/libexec/src/reflect/value.go:556 +0x845            reflect.Value.Call({0x1199380?, 0x11d2428?, 0x514?}, {0xc000188360, 0x3, 0x4})                /usr/local/Cellar/go/1.18.3/libexec/src/reflect/value.go:339 +0xbf            testing.(*F).Fuzz.func1.1(0x0?)                /usr/local/Cellar/go/1.18.3/libexec/src/testing/fuzz.go:337 +0x231            testing.tRunner(0xc000180820, 0xc0001a83f0)                /usr/local/Cellar/go/1.18.3/libexec/src/testing/testing.go:1439 +0x102            created by testing.(*F).Fuzz.func1                /usr/local/Cellar/go/1.18.3/libexec/src/testing/fuzz.go:324 +0x5b8                FAILexit status 1FAIL    github.com/luduoxin/json-validator-go/validator 0.527s

用例執行了一會后就報出了除數不能為 0 的 panic。執行模糊測試的過程中會在當前文件夾生成 testdata 目錄,導致用例沒有通過的數據會保存在這個目錄下,下次再次執行用例的時候會再次使用這些數據作為語料。Dth28資訊網——每日最新資訊28at.com

$ tree.├── scanner.go├── scanner_test.go└── testdata    └── fuzz        └── FuzzDiv            └── 120fad832ddff45a1b2b70e7a31805a5c8d84f773566e0d19799aeda53b3f9c0

打開未通過的語料內容,本機的數據如下(每個人執行的用例未通過的語料會有差異):Dth28資訊網——每日最新資訊28at.com

go test fuzz v1int(-89)int(0)

可以看出被除數是 -89,除數是 0,因為 0 不能作為除數,所以會報錯。Dth28資訊網——每日最新資訊28at.com

提供自定義語料

Golang 的模糊測試允許開發者提供初始語料,初始語料可以通過 f.Add 方法添加,也可以將語料按照要求的格式寫入 testdata/fuzz/FuzzXXX/ 中的語料文件中。重寫 FuzzDiv 方法,添加一些語料,代碼如下:Dth28資訊網——每日最新資訊28at.com

func FuzzDiv(f *testing.F) {	testcases := []struct {		a, b int	}{		{10, 2},		{5, 3},		{-6, 3},		{-6, -3},	}	for _, v := range testcases {		// 根據提供的語料,反射獲得參數類型并窮舉可能的值		f.Add(v.a, v.b)	}	f.Fuzz(func(t *testing.T, a, b int) {		Div(a, b)	})}

執行模糊測試用例的其他參數

可以使用 -fuzztime 參數來控制模糊測試的執行時間:Dth28資訊網——每日最新資訊28at.com

go test -fuzz . -fuzztime 5s

可以指定要執行的模糊測試用例:Dth28資訊網——每日最新資訊28at.com

go test -fuzz=FuzzDiv -fuzztime 5s

使用指定的未測試通過的數據做測試,使用 -run=file 指定數據文件:Dth28資訊網——每日最新資訊28at.com

go test -fuzz=FuzzDiv -run=FuzzDiv/378303d09d9499e4e6c708a92079f30db6f554529fd9eb86ac9a9639481fb23d

目前 Golang 的模糊測試支持被測函數使用的參數類型如下:Dth28資訊網——每日最新資訊28at.com

[]byte, string, bool, byte, rune, float32, float64, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64Dth28資訊網——每日最新資訊28at.com

模糊測試和單元測試的區別

單元測試需要開發者根據函數邏輯,給定一組或幾組輸入和輸出數據,然后調用被測試函數執行,若返回值與輸出數據一致,則說明函數測試通過。因為用于測試的數據是開發者提供的,難免會有遺漏的測試場景,因此即使單元測試通過,并不能說明程序是健壯的。而模糊測試是通過數據構造引擎自動構造出大量隨機數據作為函數的輸入參數,可以充分測試函數的健壯性。Dth28資訊網——每日最新資訊28at.com

本文鏈接:http://m.rrqrq.com/showinfo-26-142-0.html一文掌握 Golang 模糊測試(Fuzz Testing)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 虛擬鍵盤 API 的妙用

下一篇: 使用Webdriver-manager解決瀏覽器與驅動不匹配所帶來自動化無法執行的問題

標簽:
  • 熱門焦點
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
国产日韩欧美一区二区三区综合 | 亚洲一区二区三区免费视频| 国产精品综合一区二区| 欧美性大战久久久久久久| 国产九色sp调教91| 五月天网站亚洲| 91麻豆精品国产91久久久资源速度| 97精品国产露脸对白| 亚洲国产欧美在线人成| 欧美日韩一区在线| 久久精品毛片| 久久精品日产第一区二区| 亚洲午夜一区| 久久精品国产精品亚洲红杏| 亚洲福中文字幕伊人影院| 欧美精品在线一区二区三区| 色婷婷综合激情| 六月婷婷久久| 久久久久欧美精品| 欧美亚洲免费高清在线观看| 亚洲国产美女| 国产成人精品aa毛片| 黄页网站大全一区二区| 麻豆国产精品一区二区三区| 国产欧美日韩三区| 国产欧美一区二区色老头| 亚洲天堂激情| 懂色一区二区三区免费观看 | 亚洲午夜视频| 国产欧美三级| 色悠悠久久综合| 色综合久久久久综合体| 成人精品鲁一区一区二区| 亚洲自拍欧美精品| 久久久久久电影| 欧美一区二区三级| 亚洲欧洲精品一区二区精品久久久| 亚洲综合不卡| 色综合久久中文字幕综合网| 欧美成人在线免费观看| 免费国产亚洲视频| 亚洲精品亚洲人成人网| 欧美性xxxxx极品少妇| 亚洲国产高清一区二区三区| 99亚洲一区二区| 亚洲午夜极品| 99久久精品费精品国产一区二区| 日韩高清不卡一区二区| 天天综合色天天综合| 欧美午夜精品电影| 9191久久久久久久久久久| 精品国产免费视频| 一区在线观看免费| 亚洲bdsm女犯bdsm网站| 国产精品成人在线观看| 亚洲第一主播视频| 国产精品自拍三区| 亚洲成年人影院| 国产精品久久99| 亚洲国产精品激情在线观看 | 全国精品久久少妇| 白白色 亚洲乱淫| 国产成人午夜99999| 国内精品视频在线播放 | 亚洲精品乱码久久久久久蜜桃麻豆| 成人免费毛片高清视频| 激情久久久久久| 国模 一区 二区 三区| 模特精品在线| 久久久久久久波多野高潮日日| 亚洲人成久久| 欧美另类高清zo欧美| 亚洲国产精品av| 久久国产精品第一页| 91蝌蚪porny| 在线观看av一区| 欧美天天综合网| 日本韩国精品在线| 欧美久久久影院| 亚洲婷婷国产精品电影人久久| 国产精品毛片无遮挡高清| 日韩精品电影一区亚洲| 亚洲欧美影院| 91精品欧美一区二区三区综合在| 8x8x8国产精品| 中文字幕免费观看一区| 麻豆视频一区二区| 国产福利一区在线| 亚洲综合电影一区二区三区| 欧美r级在线观看| av在线不卡观看免费观看| 国产99久久久久| 国产在线播放一区三区四| 亚洲国产欧美不卡在线观看| 午夜一区二区三区不卡视频| 久久久99精品久久| 亚洲欧美日韩在线播放| 欧美激情艳妇裸体舞| 亚洲欧洲中文日韩久久av乱码| 国产成人午夜视频| 欧美日韩在线精品一区二区三区| 欧美四级电影网| 国产午夜亚洲精品理论片色戒| 日韩欧美你懂的| 免播放器亚洲一区| 国产精品一二| 亚洲少妇中出一区| 国外精品视频| 久久久不卡网国产精品二区| 一区二区三区高清在线| 亚洲一二三区在线观看| 国产精一区二区三区| 国产综合精品| 久久亚洲精精品中文字幕早川悠里| 精品亚洲aⅴ乱码一区二区三区| 免费国产自线拍一欧美视频| 欧美一区二区三区喷汁尤物| 久久精品国产**网站演员| 欧美chengren| 4438成人网| 伊人婷婷欧美激情| 在线综合欧美| 日韩亚洲电影在线| 国产传媒日韩欧美成人| 亚洲日本无吗高清不卡| 午夜亚洲伦理| 欧美色综合久久| 久久66热re国产| 亚洲精品国产精品国自产观看| 国产精品福利一区| 亚洲成人精品在线观看| 亚洲综合国产激情另类一区| 精品99一区二区| 91在线视频播放地址| 欧美色综合网站| 国产精品一区二区91| 精品国产a毛片| 欧美在线视频一区二区三区| 日韩一区国产二区欧美三区| 亚洲线精品一区二区三区八戒| 成年人午夜久久久| 国产网红主播福利一区二区| 欧美日韩免费精品| 亚洲欧美日韩一区二区三区在线观看 | 久久精品日韩| 精品亚洲欧美一区| 久久免费美女视频| 日韩天堂av| 久久天堂av综合合色蜜桃网| 欧美色欧美亚洲另类七区| 欧美国产欧美综合| 亚洲一卡久久| 欧美日韩大片一区二区三区| 国产视频一区二区在线观看| 不卡在线观看av| 久久久久一区二区三区四区| 国产日产精品一区二区三区四区的观看方式 | 欧美一区二区视频网站| 一本色道久久综合亚洲精品婷婷| 国产乱人伦精品一区二区在线观看| 91精彩视频在线观看| 九九九久久久精品| 日韩欧美综合一区| 久久久亚洲人| 在线不卡欧美| 成人午夜免费视频| 国产日韩精品一区| 亚洲第一精品影视| 成人网页在线观看| 中文乱码免费一区二区| 在线播放国产精品二区一二区四区 | 亚洲欧美日韩国产中文在线| 日韩一区二区三区av| 91视频com| 亚洲综合色在线| 国产精品美女久久久久久久久久久 | 欧美中文字幕一区二区三区| 欧美日韩免费| 日韩欧美一级二级三级| 国产伦精品一区二区三区视频黑人| 久久国产手机看片| 成人午夜伦理影院| 日韩精品一区在线| 日韩一级欧洲| 午夜精品久久久久久久久| www久久精品| 精品国产乱码久久久久久浪潮 | 在线一区免费观看| 亚洲高清在线精品| 欧美丝袜自拍制服另类| 香港久久久电影| 麻豆极品一区二区三区| 一区二区三区免费在线观看| 欧美亚洲综合久久| 久久综合九色综合网站| 欧美亚洲免费| 久久精品亚洲| 欧美激情视频一区二区三区在线播放 | 亚洲一区图片| 国产九九精品|