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

當(dāng)前位置:首頁 > 科技  > 軟件

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

來源: 責(zé)編: 時(shí)間:2023-08-05 11:46:02 4856觀看
導(dǎo)讀模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法??梢杂脕戆l(fā)現(xiàn)應(yīng)用程序、操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議等中的漏洞或錯(cuò)誤,特別是容易被忽視的邊界情況。模糊測試

PTP28資訊網(wǎng)——每日最新資訊28at.com

模糊測試(Fuzz Testing)

模糊測試(Fuzz Testing)是通過向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法??梢杂脕戆l(fā)現(xiàn)應(yīng)用程序、操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議等中的漏洞或錯(cuò)誤,特別是容易被忽視的邊界情況。模糊測試的基本思路是在測試過程中生成大量的隨機(jī)數(shù),然后將這些數(shù)據(jù)輸入到被測試的程序中,監(jiān)測程序的異常運(yùn)行結(jié)果來分析程序中的缺陷和漏洞。PTP28資訊網(wǎng)——每日最新資訊28at.com

Golang 中的模糊測試

Golang 從 1.18 版本開始將模糊測試整合進(jìn)了標(biāo)準(zhǔn)庫,通過標(biāo)準(zhǔn)庫 testing/fuzz 來實(shí)現(xiàn)模糊測試,Golang 引入模糊測試可以幫助開發(fā)者進(jìn)一步保障和提高應(yīng)用程序的安全性。PTP28資訊網(wǎng)——每日最新資訊28at.com

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

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

看個(gè)例子

以 json 格式校驗(yàn)工具h(yuǎn)ttps://github.com/luduoxin/json-validator-go 為例,在 validator 包中的 scanner.go 文件中新增一個(gè)除法函數(shù),代碼如下:PTP28資訊網(wǎng)——每日最新資訊28at.com

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

這個(gè)函數(shù)顯然沒有考慮除數(shù)為 0 的情況,如果使用單元測試,使用的測試數(shù)據(jù)沒有考慮除數(shù)為 0 的情況的話,這個(gè)問題就不會(huì)被發(fā)現(xiàn),但是使用模糊測試就可以測出這種問題。然后在 validator 包中的 scanner_test.go 文件中添加模糊測試用例,代碼如下:PTP28資訊網(wǎng)——每日最新資訊28at.com

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

然后運(yùn)行模糊測試用例,如下命令是運(yùn)行所有模糊測試用例:PTP28資訊網(wǎng)——每日最新資訊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

用例執(zhí)行了一會(huì)后就報(bào)出了除數(shù)不能為 0 的 panic。執(zhí)行模糊測試的過程中會(huì)在當(dāng)前文件夾生成 testdata 目錄,導(dǎo)致用例沒有通過的數(shù)據(jù)會(huì)保存在這個(gè)目錄下,下次再次執(zhí)行用例的時(shí)候會(huì)再次使用這些數(shù)據(jù)作為語料。PTP28資訊網(wǎng)——每日最新資訊28at.com

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

打開未通過的語料內(nèi)容,本機(jī)的數(shù)據(jù)如下(每個(gè)人執(zhí)行的用例未通過的語料會(huì)有差異):PTP28資訊網(wǎng)——每日最新資訊28at.com

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

可以看出被除數(shù)是 -89,除數(shù)是 0,因?yàn)?0 不能作為除數(shù),所以會(huì)報(bào)錯(cuò)。PTP28資訊網(wǎng)——每日最新資訊28at.com

提供自定義語料

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

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

執(zhí)行模糊測試用例的其他參數(shù)

可以使用 -fuzztime 參數(shù)來控制模糊測試的執(zhí)行時(shí)間:PTP28資訊網(wǎng)——每日最新資訊28at.com

go test -fuzz . -fuzztime 5s

可以指定要執(zhí)行的模糊測試用例:PTP28資訊網(wǎng)——每日最新資訊28at.com

go test -fuzz=FuzzDiv -fuzztime 5s

使用指定的未測試通過的數(shù)據(jù)做測試,使用 -run=file 指定數(shù)據(jù)文件:PTP28資訊網(wǎng)——每日最新資訊28at.com

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

目前 Golang 的模糊測試支持被測函數(shù)使用的參數(shù)類型如下:PTP28資訊網(wǎng)——每日最新資訊28at.com

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

模糊測試和單元測試的區(qū)別

單元測試需要開發(fā)者根據(jù)函數(shù)邏輯,給定一組或幾組輸入和輸出數(shù)據(jù),然后調(diào)用被測試函數(shù)執(zhí)行,若返回值與輸出數(shù)據(jù)一致,則說明函數(shù)測試通過。因?yàn)橛糜跍y試的數(shù)據(jù)是開發(fā)者提供的,難免會(huì)有遺漏的測試場景,因此即使單元測試通過,并不能說明程序是健壯的。而模糊測試是通過數(shù)據(jù)構(gòu)造引擎自動(dòng)構(gòu)造出大量隨機(jī)數(shù)據(jù)作為函數(shù)的輸入?yún)?shù),可以充分測試函數(shù)的健壯性。PTP28資訊網(wǎng)——每日最新資訊28at.com

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

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

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

下一篇: 使用Webdriver-manager解決瀏覽器與驅(qū)動(dòng)不匹配所帶來自動(dòng)化無法執(zhí)行的問題

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
国产亚洲综合在线| 亚洲在线黄色| 合欧美一区二区三区| 日韩一区二区电影| 蜜臀av一级做a爰片久久| 国产一区二区高清视频| 中文字幕在线观看不卡| 欧美日韩精品久久| 久久久精品综合| www.日本不卡| 精品剧情v国产在线观看在线| 日本免费在线视频不卡一不卡二| 国产精品亚洲一区| 曰韩精品一区二区| 国产亚洲欧美另类一区二区三区| 18涩涩午夜精品.www| 一区三区视频| 亚洲欧美日韩国产中文在线| 亚洲精品中文字幕在线| 亚洲男人天堂av网| 亚洲第一伊人| 亚洲男人都懂的| 夜夜爽99久久国产综合精品女不卡| 亚洲日本在线天堂| 一区在线视频观看| 亚洲最新在线观看| 亚洲一区二区三区免费在线观看| 一级特黄大欧美久久久| 欧美亚洲一级| 日韩综合一区二区| 色婷婷香蕉在线一区二区| 蜜桃传媒麻豆第一区在线观看| 欧美一级一区| 日本欧美加勒比视频| 欧美三级乱人伦电影| 精品一二三四区| 欧美人与禽zozo性伦| 经典一区二区三区| 337p日本欧洲亚洲大胆色噜噜| 99精品视频一区二区三区| 国产蜜臀97一区二区三区 | 亚洲精品免费一二三区| 一区二区三区欧美在线| 亚洲午夜精品在线| 在线区一区二视频| 国产成人综合精品三级| 久久精品人人做| 日韩视频一区| 蜜桃av噜噜一区| 日韩一卡二卡三卡国产欧美| 欧美1区2区| 亚洲色图视频网站| 亚洲影院在线| 久久国产精品72免费观看| 日韩欧美一级特黄在线播放| 欧美在线视频二区| 亚洲一区二区在线免费观看视频| 日本韩国欧美在线| 粉嫩aⅴ一区二区三区四区五区| 国产亚洲精品中文字幕| 国产精品毛片一区二区三区| 图片区小说区区亚洲影院| 欧美三级在线视频| 欧美精品一卡| 一个色妞综合视频在线观看| 欧美色老头old∨ideo| 99国内精品久久| 中文字幕一区视频| 日本黄色一区二区| 99亚偷拍自图区亚洲| 中文字幕一区二区三区在线观看| 亚洲欧美日韩精品在线| 久久99精品网久久| 国产亚洲欧美色| 美女视频一区免费观看| 粉嫩欧美一区二区三区高清影视| 亚洲欧洲日产国码二区| 日本高清不卡aⅴ免费网站| yourporn久久国产精品| 亚洲黄色小说网站| 欧美久久久久久久久| 国内综合精品午夜久久资源| 日韩高清在线不卡| 久久一日本道色综合| 亚洲一区二区高清视频| 国产一区二区三区免费播放| 国产精品久久福利| 欧美日韩大陆一区二区| 极品中文字幕一区| 国产在线视频一区二区三区| 国产精品久久久久久久午夜片| 欧美视频中文一区二区三区在线观看| 欧美a级片一区| 麻豆精品国产91久久久久久| 国产丝袜在线精品| 欧美亚洲国产bt| 伊人久久成人| 国产电影精品久久禁18| 一区二区三区自拍| 精品久久久久久无| 久热精品在线| 午夜久久黄色| 国产在线精品一区二区三区不卡| 国产精品电影院| 欧美一级专区免费大片| 西西人体一区二区| 欧美一区网站| 国产真实乱偷精品视频免| 一区二区三区在线影院| 欧美刺激脚交jootjob| 久久亚洲国产精品一区二区| 欧美高清视频一区| 经典三级视频一区| 亚洲午夜精品在线| 国产日韩欧美高清| 欧美色倩网站大全免费| 亚洲毛片av| 欧美一区91| 国产精品中文字幕日韩精品| 亚洲国产你懂的| 亚洲欧洲精品天堂一级| 26uuu成人网一区二区三区| 欧美制服丝袜第一页| 亚洲女同同性videoxma| 欧美久久在线| 成人午夜精品在线| 免费久久99精品国产| 一区二区在线看| 亚洲国产高清aⅴ视频| 欧美成人精品高清在线播放| 在线视频国内自拍亚洲视频| 亚洲精品国产精品国自产观看| 99久久综合精品| 精品无人区卡一卡二卡三乱码免费卡| 亚洲久草在线视频| 中文字幕久久午夜不卡| 日韩亚洲欧美中文三级| 欧美日韩黄视频| 色久优优欧美色久优优| 国产日韩亚洲| 亚洲动漫精品| 欧美午夜视频| 91亚洲资源网| 成熟亚洲日本毛茸茸凸凹| 久久精品噜噜噜成人av农村| 亚洲h动漫在线| 亚洲一区二区偷拍精品| 亚洲人成人一区二区在线观看| 日本一区二区视频在线| 欧美精品一区二区不卡| 日韩欧美久久一区| 欧美一区二区高清| 91精品国产综合久久福利| 欧美日韩在线电影| 欧美色图第一页| 欧美午夜影院一区| 欧洲色大大久久| 欧美午夜一区二区三区| 91九色02白丝porn| 欧美中文一区二区三区| 色屁屁一区二区| 日本福利一区二区| 色婷婷精品久久二区二区蜜臂av | 美女尤物久久精品| 国产亚洲一区在线| 国产伦精品一区二区三区视频孕妇 | 国产成人亚洲综合色影视| 久久精品国产第一区二区三区| 亚洲成人动漫av| 午夜久久久影院| 日韩电影在线一区二区| 无码av免费一区二区三区试看| 午夜伊人狠狠久久| 日本欧美一区二区三区| 日本成人在线一区| 久久99久久99小草精品免视看| 精品在线免费观看| 国产经典欧美精品| 成人国产亚洲欧美成人综合网| 成人动漫一区二区在线| 99re热视频精品| 欧美区高清在线| 亚洲精品在线免费| 免费日韩视频| 欧美影院精品一区| 91精品欧美久久久久久动漫| 欧美电影免费观看高清完整版在线观看 | 欧美日韩成人在线| 欧美日韩视频在线一区二区| 欧美亚洲国产怡红院影院| 欧美人狂配大交3d怪物一区| 91精品视频网| 久久午夜国产精品| 国产精品色哟哟网站| 亚洲精品免费电影| 日本不卡视频在线| 韩国欧美一区二区| 菠萝蜜视频在线观看一区| 欧美不卡高清| 亚洲精品欧美|