本教程介紹了 Go 中模糊測試的基礎(chǔ)知識。通過模糊測試,隨機數(shù)據(jù)會針對您的測試運行,以嘗試找出漏洞或?qū)е卤罎⒌妮斎???梢酝ㄟ^模糊測試發(fā)現(xiàn)的一些漏洞示例包括 SQL 注入、緩沖區(qū)溢出、拒絕服務(wù)和跨站點腳本攻擊。
為合作等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及合作網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、合作網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
在本教程中,您將為一個簡單的函數(shù)編寫一個模糊測試,運行 go 命令,并調(diào)試和修復(fù)代碼中的問題。
首先,為您要編寫的代碼創(chuàng)建一個文件夾。
1、打開命令提示符并切換到您的主目錄。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,為您的代碼創(chuàng)建一個名為 fuzz 的目錄。
3、創(chuàng)建一個模塊來保存您的代碼。
運行g(shù)o mod init命令,為其提供新代碼的模塊路徑。
接下來,您將添加一些簡單的代碼來反轉(zhuǎn)字符串,稍后我們將對其進行模糊測試。
在此步驟中,您將添加一個函數(shù)來反轉(zhuǎn)字符串。
a.使用您的文本編輯器,在 fuzz 目錄中創(chuàng)建一個名為 main.go 的文件。
獨立程序(與庫相反)始終位于 package 中main。
此函數(shù)將接受string,使用byte進行循環(huán) ,并在最后返回反轉(zhuǎn)的字符串。
此函數(shù)將運行一些Reverse操作,然后將輸出打印到命令行。這有助于查看運行中的代碼,并可能有助于調(diào)試。
e.該main函數(shù)使用 fmt 包,因此您需要導(dǎo)入它。
第一行代碼應(yīng)如下所示:
從包含 main.go 的目錄中的命令行,運行代碼。
可以看到原來的字符串,反轉(zhuǎn)它的結(jié)果,然后再反轉(zhuǎn)它的結(jié)果,就相當(dāng)于原來的了。
現(xiàn)在代碼正在運行,是時候測試它了。
在這一步中,您將為Reverse函數(shù)編寫一個基本的單元測試。
a.使用您的文本編輯器,在 fuzz 目錄中創(chuàng)建一個名為 reverse_test.go 的文件。
b.將以下代碼粘貼到 reverse_test.go 中。
這個簡單的測試將斷言列出的輸入字符串將被正確反轉(zhuǎn)。
使用運行單元測試go test
接下來,您將單元測試更改為模糊測試。
單元測試有局限性,即每個輸入都必須由開發(fā)人員添加到測試中。模糊測試的一個好處是它可以為您的代碼提供輸入,并且可以識別您提出的測試用例沒有達到的邊緣用例。
在本節(jié)中,您將單元測試轉(zhuǎn)換為模糊測試,這樣您就可以用更少的工作生成更多的輸入!
請注意,您可以將單元測試、基準(zhǔn)測試和模糊測試保存在同一個 *_test.go 文件中,但對于本示例,您將單元測試轉(zhuǎn)換為模糊測試。
在您的文本編輯器中,將 reverse_test.go 中的單元測試替換為以下模糊測試。
Fuzzing 也有一些限制。在您的單元測試中,您可以預(yù)測Reverse函數(shù)的預(yù)期輸出,并驗證實際輸出是否滿足這些預(yù)期。
例如,在測試用例Reverse("Hello, world")中,單元測試將返回指定為"dlrow ,olleH".
模糊測試時,您無法預(yù)測預(yù)期輸出,因為您無法控制輸入。
但是,Reverse您可以在模糊測試中驗證函數(shù)的一些屬性。在這個模糊測試中檢查的兩個屬性是:
(1)將字符串反轉(zhuǎn)兩次保留原始值
(2)反轉(zhuǎn)的字符串將其狀態(tài)保留為有效的 UTF-8。
注意單元測試和模糊測試之間的語法差異:
(3)確保新包unicode/utf8已導(dǎo)入。
隨著單元測試轉(zhuǎn)換為模糊測試,是時候再次運行測試了。
a.在不進行模糊測試的情況下運行模糊測試,以確保種子輸入通過。
如果您在該文件中有其他測試,您也可以運行g(shù)o test -run=FuzzReverse,并且您只想運行模糊測試。
b.運行FuzzReverse模糊測試,查看是否有任何隨機生成的字符串輸入會導(dǎo)致失敗。這是使用go test新標(biāo)志-fuzz執(zhí)行的。
模糊測試時發(fā)生故障,導(dǎo)致問題的輸入被寫入將在下次運行的種子語料庫文件中g(shù)o test,即使沒有-fuzz標(biāo)志也是如此。要查看導(dǎo)致失敗的輸入,請在文本編輯器中打開寫入 testdata/fuzz/FuzzReverse 目錄的語料庫文件。您的種子語料庫文件可能包含不同的字符串,但格式相同。
語料庫文件的第一行表示編碼版本。以下每一行代表構(gòu)成語料庫條目的每種類型的值。由于 fuzz target 只需要 1 個輸入,因此版本之后只有 1 個值。
c.運行沒有-fuzz標(biāo)志的go test; 新的失敗種子語料庫條目將被使用:
由于我們的測試失敗,是時候調(diào)試了。
不能吧,現(xiàn)在用C語言搞開發(fā)都是用在更加底層的開發(fā)中,更加底層的開發(fā)需要高運行效率,go語言的運行效率是比不上C語言的,所以go語言在這些方面還無法取代C語言。應(yīng)該說是各有所長吧,go和C都有它們自己的適用環(huán)境,誰也不能取代誰。
學(xué)好一門編程語言是十分不容易的,但是如果學(xué)會了,它的實用性是很強的,下面我為大家整理了學(xué)好一門編程語言的辦法,大家可以參考借鑒。
如何學(xué)好一門編程語言?
一、多總結(jié)
多總結(jié)才能加深理解、增強記憶。舉例,Go 中有 slice、map、channal 類型,它們都可以用 make 生成實例,但 slice 和 map 還可以用以下形式初始化,也是編程規(guī)范中建議的初始化方式:
colors := map[string]string{}
slice := []int{}
但注意了,channal 則沒有這樣的語法:msg := chan string{}
上面兩句是生成實例,表示空集合,但下面兩句則表示實例不存在,值為 nil
var colors map[string]string
var slice []int
另外,結(jié)構(gòu)體指針 slice 還可以象下面這樣初始化,結(jié)構(gòu)體實例不用明確地指定類型(使用了類型推導(dǎo))、不用明確地取地址運算()。
type Product struct {
name string
price float64
}
products := []*Product{{"Spanner", 3.99}, {"Wrench", 2.49}, {"Screwdriver", 1.99}}
看到?jīng)]有,如果不經(jīng)常總結(jié),這一圈學(xué)下來會把你整的稀里糊涂的。
二、多比較
學(xué)一門新語言一定要與你之前已經(jīng)熟悉的語言經(jīng)常作比較,找出它們的相同與不同,這樣才能加深記憶和理解,否則學(xué)完之后腦子里會一片混亂,搞不清誰是誰非了。
就拿數(shù)組來說吧,在 Java、Scala、Go 中定義、實例化、賦值是不一樣的。
//Java
int[] arr;//定義數(shù)組,不可以指定數(shù)組長度
arr = new int[5];//創(chuàng)建數(shù)組對象(實例化),指定數(shù)組長度
arr[1] = 8;//賦值
//Scala
val arr = new Array[Int](5) //數(shù)組在Scala里用的是泛型類,構(gòu)造函數(shù)參數(shù)指定數(shù)組大小
arr(1) = 8 //賦值,注意用的是括弧
//Go
arr := [5]int{} //創(chuàng)建數(shù)組,初始化5個元素都為0,注意如果不指定數(shù)組長度,則是另外一種類型Slice
arr[1] = 8 //賦值
再比如 Map 在 Scala 與 Go 語言里定義、初始化、訪問也是不同的,作了以下比較后印象會非常深刻,把它們記下來,這樣以后使用就不會搞混了。
//Scala
val capital = Map("France" - "Paris", "Japan" - "Tokyo")
println(capital.get("France"))
//Go
capital := map[string]string{"France": "Paris", "Japan": "Tokyo"}
fmt.Println(capital["France"])
Go 同時給多個變量賦值在 Scala 里可以用模式匹配做到,如下:
//Scala(使用樣本類的模式匹配)
case class Tao(name: String, age: Int);
val Tao(myName, myAge) = Tao("taozs", 18);
println(myName)
println(myAge)
//Go
myName, myAge := "taozs", 18
fmt.Println(myName)
fmt.Println(myAge)
//Scala(使用元組的模式匹配)
val (myNumber, myString) = (123, "abe")
println(myNumber)
println(myString)
//Go
myNumber, myString := 123, "abe"
fmt.Println(myNumber)
fmt.Println(myString)
以下是 Scala 和 Go 定義和實現(xiàn)函數(shù)的區(qū)別:
//Scala
val increase: Int = Int = (x: Int) = x + 1
println(increase(8))
//Go
var increase func(int) int = func(x int) int { return x + 1 }
fmt.Println(increase(8))
除了在 Scala 和 Go 里都可以類型推導(dǎo)外,在 Scala 里還可以這樣定義函數(shù):
//Scala
val increase = (_: Int) + 1
為方便自己將來隨時查閱,可以建立下面這樣的對比表格,描述不一定要求規(guī)范,自己能看懂就行。
三、轉(zhuǎn)變思維方式,
學(xué)會用這門語言去思考
學(xué)會用語言去思考是關(guān)鍵。如果你以前是學(xué) C 的,轉(zhuǎn)學(xué) Java,你一定要改變以前面向過程的思維,學(xué)會用面向?qū)ο蟮乃季S去分析問題;以前學(xué) Java 的,轉(zhuǎn)學(xué) Scala 則要學(xué)會用函數(shù)式的編程思維解決問題。
舉一個函數(shù)式編程的例子,以下是 Java 語言常用的 for 循環(huán),循環(huán)變量從 1 到 10 執(zhí)行 10 次循環(huán)體:
// 命令式編程
for (int i = 1; i 10; i++) {
// 此處是循環(huán)體做10次
}
這被稱為命令式編程 (Imperative Programming),但學(xué)了 Scala 的函數(shù)式編程 (Functional Programming) 后,解決同樣的問題,我們可以換一種思維:構(gòu)建 1 到 10 的列表序列,針對列表中的`每個元素分別執(zhí)行函數(shù),如下:
//函數(shù)式編程
val autoList = (1 to 10).map(i = /*此處是函數(shù)體,針對1到10的每一個分別調(diào)用 1次*/)
已經(jīng)習(xí)慣了 Java 編程的,對 Scala 的函數(shù)式編程、樣本類、模式匹配、不可變對象、隱式轉(zhuǎn)換等需要一個逐步適應(yīng)的過程,要漸漸學(xué)會用它們思考和解決問題。
再舉個 Scala 與 Go 思維方式不同的例子,要實現(xiàn)對一個字符串里的每個字符加 1 的操作,Scala 里可以這樣:
"abc".map(cc = cc + 1)
"abc"是一個字符串對象,調(diào)用它的方法 map,這是純面向?qū)ο蟮乃季S,但在 Go 里就要轉(zhuǎn)變?yōu)槊嫦蜻^程的思維:
name := "abc"
second := strings.Map(func(x rune) rune {
return x + 1
}, name)
注意,這里的 strings 是包 (package),調(diào)用它的公共函數(shù) Map,被人操作的對象 name 字符串作為函數(shù)參數(shù)傳入。Go 提供的函數(shù) len、cap、append、 等其實都是面向過程的,雖然 Go 也提供有面向?qū)ο蟮闹С?,已?jīng)習(xí)慣了面向?qū)ο缶幊痰?,剛開始學(xué) Go 語言需要特別留意這一點。
四、多看開源代碼
學(xué)一門語言就是學(xué)一種思維方式,如今 GitHub 上可下載的開源代碼海量級,通過看別人的代碼,學(xué)習(xí)別人是如何解決問題的,養(yǎng)成用該語言思考的習(xí)慣,另外還能學(xué)習(xí)到一些非常有用的技巧,比如我在看一個 Go 語言性能測試框架代碼時看到有以下寫法:
func main() {
defer profile.Start().Stop()
...
}
這個意思是指剛進入程序時執(zhí)行 Start( ) 函數(shù),程序退出前調(diào)用 Stop( ) 函數(shù),非常好的技巧啊!可以用于需要在程序執(zhí)行前和程序完成后分別執(zhí)行一段邏輯的場景。再看 Start( ) 函數(shù)是怎么實現(xiàn)的:
func Start(options ...func(*Profile)) interface {
Stop()
} {
...
return prof
}
該函數(shù)返回了一個實現(xiàn)了含有 Stop( ) 函數(shù)接口的對象,如此才能在調(diào)用 Start 調(diào)用后連調(diào) Stop。
五、優(yōu)先學(xué)會使用代碼分析工具
代碼分析的工具包括靜態(tài)檢查、測試、測試覆蓋率分析、性能分析(內(nèi)存、CPU)、調(diào)試工具等,工具的價值在于它可以有效幫我們發(fā)現(xiàn)代碼問題,這在我們剛開始學(xué)一門編程語言時意義尤其重大。
例如,以下這句 Java 賦值語句估計沒有哪本教科書會告訴你有性能問題:
String sb = new String(“Hello World”);
以下這段 Java 代碼你也不一定能意識到有多線程問題:
synchronized public void send(authuserPacket pkt, Thread t, String flowNo) throws IOException
{
logger.info("start");
//連接不可用,直接拋出異常,等待接收線程連接服務(wù)器成功
if (!this.avaliable)
{
try
{
//如果連接不可用,則等待2S,然后重新檢測
Thread.sleep(2000);
}
... ...
如果我們及時用 FindBugs 工具檢查就會發(fā)現(xiàn)上面這些問題,進而你會去分析研究為什么,如此,你對這門語言的了解也會越來越多。
另外,Go 語言自帶的 vet/test/cover/pprof/trace 都是非常有用的工具,一邊學(xué)一邊使用這些工具分析代碼,能加深對語言的理解。
六、多練習(xí)、多實踐
就象學(xué)自然語言一樣,如果只知道語法不去練是沒有任何效果的,只有反復(fù)地練習(xí),慢慢才能變成自己的一項技能。書本上的例子代碼最好能從頭到尾親自敲一遍,多運行、多嘗試,另外再找一些題目來練習(xí),如能有機會參與項目開發(fā)則更好啦,勤動手、勤實踐是最好的學(xué)習(xí)方法。
其它的方法還有:
做好筆記,把學(xué)習(xí)中遇到的關(guān)鍵點和自己的思考記下來,便于后面復(fù)習(xí)和對比;
復(fù)習(xí),學(xué)習(xí)一定要重復(fù)、重復(fù)、再重復(fù);
學(xué)習(xí)貴在堅持,每天學(xué)一點(比如堅持每天學(xué) 1 小時),日積月累。
1、學(xué)習(xí)曲線
它包含了類C語法、GC內(nèi)置和工程工具。這一點非常重要,因為Go語言容易學(xué)習(xí),所以一個普通的大學(xué)生花一個星期就能寫出來可以上手的、高性能的應(yīng)用。在國內(nèi)大家都追求快,這也是為什么國內(nèi)Go流行的原因之一。
2、效率
Go擁有接近C的運行效率和接近PHP的開發(fā)效率,這就很有利的支撐了上面大家追求快速的需求。
3、出身名門、血統(tǒng)純正
之所以說Go語言出身名門,是因為我們知道Go語言出自Google公司,這個公司在業(yè)界的知名度和實力自然不用多說。Google公司聚集了一批牛人,在各種編程語言稱雄爭霸的局面下推出新的編程語言,自然有它的戰(zhàn)略考慮。而且從Go語言的發(fā)展態(tài)勢來看,Google對它這個新的寵兒還是很看重的,Go自然有一個良好的發(fā)展前途。我們看看Go語言的主要創(chuàng)造者,血統(tǒng)純正這點就可見端倪了。
4、組合的思想、無侵入式的接口
Go語言可以說是開發(fā)效率和運行效率二者的完美融合,天生的并發(fā)編程支持。Go語言支持當(dāng)前所有的編程范式,包括過程式編程、面向?qū)ο缶幊桃约昂瘮?shù)式編程。
5、強大的標(biāo)準(zhǔn)庫
這包括互聯(lián)網(wǎng)應(yīng)用、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標(biāo)準(zhǔn)庫基本上已經(jīng)是非常穩(wěn)定,特別是我這里提到的三個,網(wǎng)絡(luò)層、系統(tǒng)層的庫非常實用。
6、部署方便
我相信這一點是很多人選擇Go的最大理由,因為部署太方便,所以現(xiàn)在也有很多人用Go開發(fā)運維程序。
7、簡單的并發(fā)
它包含降低心智的并發(fā)和簡易的數(shù)據(jù)同步,我覺得這是Go最大的特色。之所以寫正確的并發(fā)、容錯和可擴展的程序如此之難,是因為我們用了錯誤的工具和錯誤的抽象,Go可以說這一塊做的相當(dāng)簡單。
8、穩(wěn)定性
Go擁有強大的編譯檢查、嚴(yán)格的編碼規(guī)范和完整的軟件生命周期工具,具有很強的穩(wěn)定性,穩(wěn)定壓倒一切。那么為什么Go相比于其他程序會更穩(wěn)定呢?這是因為Go提供了軟件生命周期的各個環(huán)節(jié)的工具,如go
tool、gofmt、go test。
作為一個測試,作為一個測試開發(fā), 全?;?管理 是我們未來的發(fā)展方向。已經(jīng)掌握了Java、Python、HTML的你,是不是也想了解下最近異常火爆的Go語言呢?來吧,讓我們一起了解下。
Go 是一個開源的編程語言 ,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。
Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā),后來還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時候發(fā)布了Go 1穩(wěn)定版本?,F(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個活躍的社區(qū)。這三個人都是計算機界的大神,有的參與了C語言的編寫,有的還是數(shù)學(xué)大神,有的還獲得了計算機最高榮譽-圖靈獎。
接下來說說 Go語言的特色 :
簡潔、快速、安全
并行、有趣、開源
內(nèi)存管理、數(shù)組安全、編譯迅速
Go語言的用途 :
Go 語言被設(shè)計成一門應(yīng)用于搭載 Web 服務(wù)器,存儲集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言。
對于高性能分布式系統(tǒng)領(lǐng)域而言,Go 語言無疑比大多數(shù)其它語言有著更高的開發(fā)效率。它提供了海量并行的支持,這對于 游戲 服務(wù)端的開發(fā)而言是再好不過了。
Go語言的環(huán)境安裝:
建議直接打開 官方地址因為墻的原因打不開
因為我用的是windows系統(tǒng),這里主要講下Windows系統(tǒng)上使用Go語言來編程。
Windows 下可以使用 .msi 后綴(在下載列表中可以找到該文件,如go1.17.2.windows-amd64.msi)的安裝包來安裝。
默認(rèn)情況下 .msi 文件會安裝在 c:Go 目錄下。你可以將 c:Gobin 目錄添加到 Path 環(huán)境變量中。添加后你需要重啟命令窗口才能生效。個人建議還是安裝到 Program Files文件夾中。
使用什么開發(fā)工具來對Go語言進行編寫:
個人建議用VS code, 也可以用Sublime Text來編輯。如果你之前看了我講的HTML語言的學(xué)習(xí),肯定已經(jīng)下載了VS code. 那么這時你需要在VS code中下載Go語言的擴展插件。
這里有一個巨大的坑,就是在下載Go的插件和依賴包時,會提示一些包沒有。主要是因為下載的依賴包部分被墻了,只能想別的辦法去下載。
建議參考網(wǎng)頁:
解決vscode中g(shù)olang插件安裝失敗方法
在學(xué)習(xí)go的過程中,使用的是vscode,但是一直提示安裝相關(guān)插件失敗,然后上網(wǎng)查方法,基本上是叫你建立golang.org目錄什么的,結(jié)果全是錯的,而且都是抄襲,很煩。無意之中看到一位博主分享的方法,他也是飽受上述的垃圾博文困擾,然后找到了解決方法,這里向他致敬,秉著讓更多人看到正確解決方法的心,我寫下正確的解決方法,希望對你有所幫助,也可以點開原博主鏈接參考:
Go有一個全球模塊代理,設(shè)置代理再去安裝golang的插件,就可以安裝成功了。步驟有,首先Windows用戶打開Powershell,一個藍色的界面,注意不是cmd!不知道的直接打開window下面的搜索,然后輸入powershell,搜索出來就可以了。
$env:GO111MODULE=“on”
$env:GOPROXY=“”
go env -w GOPROXY=
go env -w GOPRIVATE=*.corp.example.com
然后我們打開VsCode界面,下面會提示安裝插件,我們選擇Install ALL,就會安裝成功
當(dāng)你在運行Go語言程序時,提示所有的插件包都已經(jīng)安裝成功了時,就可以正常使用了,要不然一堆報錯會讓你非常心煩。
好了,今天先到這里,晚安、下班~
語料庫文件以特殊格式編碼。這是種子語料庫和生成語料庫的相同格式。
下面是一個語料庫文件的例子:
第一行用于通知模糊引擎文件的編碼版本。雖然目前沒有計劃未來版本的編碼格式,但設(shè)計必須支持這種可能性。
下面的每一行都是構(gòu)成語料庫條目的值,如果需要,可以直接復(fù)制到 Go 代碼中。
在上面的示例中,我們在 a []byte后跟一個int64。這些類型必須按順序與模糊測試參數(shù)完全匹配。這些類型的模糊目標(biāo)如下所示:
指定您自己的種子語料庫值的最簡單方法是使用該 (*testing.F).Add方法。在上面的示例中,它看起來像這樣:
但是,您可能有較大的二進制文件,您不希望將其作為代碼復(fù)制到您的測試中,而是作為單獨的種子語料庫條目保留在 testdata/fuzz/{FuzzTestName} 目錄中。golang.org/x/tools/cmd/file2fuzz 上的file2fuzz工具可用于將這些二進制文件轉(zhuǎn)換為為[]byte.
要使用此工具:
語料庫條目:語料庫 中的一個輸入,可以在模糊測試時使用。這可以是特殊格式的文件,也可以是對 (*testing.F).Add。
覆蓋指導(dǎo): 一種模糊測試方法,它使用代碼覆蓋范圍的擴展來確定哪些語料庫條目值得保留以備將來使用。
失敗的輸入:失敗的輸入是一個語料庫條目,當(dāng)針對 模糊目標(biāo)運行時會導(dǎo)致錯誤或恐慌。
fuzz target: 模糊測試的目標(biāo)功能,在模糊測試時對語料庫條目和生成的值執(zhí)行。它通過將函數(shù)傳遞給 (*testing.F).Fuzz實現(xiàn)。
fuzz test: 測試文件中的一個被命名為func FuzzXxx(*testing.F)的函數(shù),可用于模糊測試。
fuzzing: 一種自動化測試,它不斷地操縱程序的輸入,以發(fā)現(xiàn)代碼可能容易受到的錯誤或漏洞等問題。
fuzzing arguments: 將傳遞給 模糊測試目標(biāo)的參數(shù),并由mutator進行變異。
fuzzing engine: 一個管理fuzzing的工具,包括維護語料庫、調(diào)用mutator、識別新的覆蓋率和報告失敗。
生成的語料庫: 由模糊引擎隨時間維護的語料庫,同時模糊測試以跟蹤進度。它存儲在$GOCACHE/fuzz 中。這些條目僅在模糊測試時使用。
mutator: 一種在模糊測試時使用的工具,它在將語料庫條目傳遞給模糊目標(biāo)之前隨機操作它們。
package: 同一目錄下編譯在一起的源文件的集合。
種子語料庫: 用戶提供的用于模糊測試的語料庫,可用于指導(dǎo)模糊引擎。它由 f.Add 在模糊測試中調(diào)用提供的語料庫條目以及包內(nèi) testdata/fuzz/{FuzzTestName} 目錄中的文件組成。這些條目默認(rèn)使用go test運行,無論是否進行模糊測試。
測試文件: 格式為 xxx_test.go 的文件,可能包含測試、基準(zhǔn)、示例和模糊測試。
漏洞: 代碼中的安全敏感漏洞,可以被攻擊者利用。
分享名稱:go語言測試復(fù)蓋率,go語言代碼覆蓋率
URL標(biāo)題:http://chinadenli.net/article44/hesghe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、App開發(fā)、商城網(wǎng)站、定制網(wǎng)站、網(wǎng)站收錄、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)