生成測(cè)試報(bào)告go語(yǔ)言 怎么生成測(cè)試報(bào)告

GO語(yǔ)言(二十九):模糊測(cè)試(下)-

語(yǔ)料庫(kù)文件以特殊格式編碼。這是種子語(yǔ)料庫(kù)和生成語(yǔ)料庫(kù)的相同格式。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、嵐皋ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的嵐皋網(wǎng)站制作公司

下面是一個(gè)語(yǔ)料庫(kù)文件的例子:

第一行用于通知模糊引擎文件的編碼版本。雖然目前沒(méi)有計(jì)劃未來(lái)版本的編碼格式,但設(shè)計(jì)必須支持這種可能性。

下面的每一行都是構(gòu)成語(yǔ)料庫(kù)條目的值,如果需要,可以直接復(fù)制到 Go 代碼中。

在上面的示例中,我們?cè)?a []byte后跟一個(gè)int64。這些類(lèi)型必須按順序與模糊測(cè)試參數(shù)完全匹配。這些類(lèi)型的模糊目標(biāo)如下所示:

指定您自己的種子語(yǔ)料庫(kù)值的最簡(jiǎn)單方法是使用該 (*testing.F).Add方法。在上面的示例中,它看起來(lái)像這樣:

但是,您可能有較大的二進(jìn)制文件,您不希望將其作為代碼復(fù)制到您的測(cè)試中,而是作為單獨(dú)的種子語(yǔ)料庫(kù)條目保留在 testdata/fuzz/{FuzzTestName} 目錄中。golang.org/x/tools/cmd/file2fuzz 上的file2fuzz工具可用于將這些二進(jìn)制文件轉(zhuǎn)換為為[]byte.

要使用此工具:

語(yǔ)料庫(kù)條目:語(yǔ)料庫(kù) 中的一個(gè)輸入,可以在模糊測(cè)試時(shí)使用。這可以是特殊格式的文件,也可以是對(duì) (*testing.F).Add。

覆蓋指導(dǎo): 一種模糊測(cè)試方法,它使用代碼覆蓋范圍的擴(kuò)展來(lái)確定哪些語(yǔ)料庫(kù)條目值得保留以備將來(lái)使用。

失敗的輸入:失敗的輸入是一個(gè)語(yǔ)料庫(kù)條目,當(dāng)針對(duì) 模糊目標(biāo)運(yùn)行時(shí)會(huì)導(dǎo)致錯(cuò)誤或恐慌。

fuzz target: 模糊測(cè)試的目標(biāo)功能,在模糊測(cè)試時(shí)對(duì)語(yǔ)料庫(kù)條目和生成的值執(zhí)行。它通過(guò)將函數(shù)傳遞給 (*testing.F).Fuzz實(shí)現(xiàn)。

fuzz test: 測(cè)試文件中的一個(gè)被命名為func FuzzXxx(*testing.F)的函數(shù),可用于模糊測(cè)試。

fuzzing: 一種自動(dòng)化測(cè)試,它不斷地操縱程序的輸入,以發(fā)現(xiàn)代碼可能容易受到的錯(cuò)誤或漏洞等問(wèn)題。

fuzzing arguments: 將傳遞給 模糊測(cè)試目標(biāo)的參數(shù),并由mutator進(jìn)行變異。

fuzzing engine: 一個(gè)管理fuzzing的工具,包括維護(hù)語(yǔ)料庫(kù)、調(diào)用mutator、識(shí)別新的覆蓋率和報(bào)告失敗。

生成的語(yǔ)料庫(kù): 由模糊引擎隨時(shí)間維護(hù)的語(yǔ)料庫(kù),同時(shí)模糊測(cè)試以跟蹤進(jìn)度。它存儲(chǔ)在$GOCACHE/fuzz 中。這些條目?jī)H在模糊測(cè)試時(shí)使用。

mutator: 一種在模糊測(cè)試時(shí)使用的工具,它在將語(yǔ)料庫(kù)條目傳遞給模糊目標(biāo)之前隨機(jī)操作它們。

package: 同一目錄下編譯在一起的源文件的集合。

種子語(yǔ)料庫(kù): 用戶提供的用于模糊測(cè)試的語(yǔ)料庫(kù),可用于指導(dǎo)模糊引擎。它由 f.Add 在模糊測(cè)試中調(diào)用提供的語(yǔ)料庫(kù)條目以及包內(nèi) testdata/fuzz/{FuzzTestName} 目錄中的文件組成。這些條目默認(rèn)使用go test運(yùn)行,無(wú)論是否進(jìn)行模糊測(cè)試。

測(cè)試文件: 格式為 xxx_test.go 的文件,可能包含測(cè)試、基準(zhǔn)、示例和模糊測(cè)試。

漏洞: 代碼中的安全敏感漏洞,可以被攻擊者利用。

GO語(yǔ)言(十八):模糊測(cè)試入門(mén)(下)-

Reverse為了解決這個(gè)問(wèn)題,如果輸入不是有效的 UTF-8 ,讓我們返回一個(gè)錯(cuò)誤。

a.在您的文本編輯器中,將現(xiàn)有Reverse函數(shù)替換為以下內(nèi)容。

如果輸入字符串包含無(wú)效的 UTF-8 字符,此更改將返回錯(cuò)誤。

b.由于 Reverse 函數(shù)現(xiàn)在返回錯(cuò)誤,因此修改main函數(shù)以丟棄額外的錯(cuò)誤值。將現(xiàn)有main功能替換為以下內(nèi)容。

這些調(diào)用Reverse應(yīng)該返回一個(gè) nil 錯(cuò)誤,因?yàn)檩斎胱址怯行У?UTF-8。

c.您將需要導(dǎo)入錯(cuò)誤和 unicode/utf8 包。main.go 中的 import 語(yǔ)句應(yīng)如下所示。

d.修改reverse_test.go文件檢查是否有錯(cuò)誤,如果返回產(chǎn)生錯(cuò)誤則跳過(guò)測(cè)試。

除了返回之外,您還可以調(diào)用t.Skip()以停止執(zhí)行該模糊輸入。

a.使用 go test 運(yùn)行測(cè)試

b.使用go test -fuzz=Fuzz進(jìn)行模糊測(cè)試,幾秒鐘后,停止用ctrl-C模糊測(cè)試。

除非您通過(guò)-fuzztime標(biāo)志進(jìn)行限制,否則模糊測(cè)試將一直運(yùn)行,直到遇到失敗的輸入。如果沒(méi)有發(fā)生故障,默認(rèn)是永遠(yuǎn)運(yùn)行,并且可以使用 中斷該過(guò)程ctrl-C。

c. 使用go test -fuzz=Fuzz -fuzztime 30s。如果沒(méi)有30 秒發(fā)現(xiàn)失敗,它會(huì)在退出模糊測(cè)試。

模糊測(cè)試通過(guò)了!

做得很好!您剛剛學(xué)習(xí)了在 Go 中進(jìn)行模糊測(cè)試。

— main.go —

— reverse_test.go —

GO語(yǔ)言(十六):模糊測(cè)試入門(mén)(上)

本教程介紹了 Go 中模糊測(cè)試的基礎(chǔ)知識(shí)。通過(guò)模糊測(cè)試,隨機(jī)數(shù)據(jù)會(huì)針對(duì)您的測(cè)試運(yùn)行,以嘗試找出漏洞或?qū)е卤罎⒌妮斎搿?梢酝ㄟ^(guò)模糊測(cè)試發(fā)現(xiàn)的一些漏洞示例包括 SQL 注入、緩沖區(qū)溢出、拒絕服務(wù)和跨站點(diǎn)腳本攻擊。

在本教程中,您將為一個(gè)簡(jiǎn)單的函數(shù)編寫(xiě)一個(gè)模糊測(cè)試,運(yùn)行 go 命令,并調(diào)試和修復(fù)代碼中的問(wèn)題。

首先,為您要編寫(xiě)的代碼創(chuàng)建一個(gè)文件夾。

1、打開(kāi)命令提示符并切換到您的主目錄。

在 Linux 或 Mac 上:

在 Windows 上:

2、在命令提示符下,為您的代碼創(chuàng)建一個(gè)名為 fuzz 的目錄。

3、創(chuàng)建一個(gè)模塊來(lái)保存您的代碼。

運(yùn)行g(shù)o mod init命令,為其提供新代碼的模塊路徑。

接下來(lái),您將添加一些簡(jiǎn)單的代碼來(lái)反轉(zhuǎn)字符串,稍后我們將對(duì)其進(jìn)行模糊測(cè)試。

在此步驟中,您將添加一個(gè)函數(shù)來(lái)反轉(zhuǎn)字符串。

a.使用您的文本編輯器,在 fuzz 目錄中創(chuàng)建一個(gè)名為 main.go 的文件。

獨(dú)立程序(與庫(kù)相反)始終位于 package 中main。

此函數(shù)將接受string,使用byte進(jìn)行循環(huán) ,并在最后返回反轉(zhuǎn)的字符串。

此函數(shù)將運(yùn)行一些Reverse操作,然后將輸出打印到命令行。這有助于查看運(yùn)行中的代碼,并可能有助于調(diào)試。

e.該main函數(shù)使用 fmt 包,因此您需要導(dǎo)入它。

第一行代碼應(yīng)如下所示:

從包含 main.go 的目錄中的命令行,運(yùn)行代碼。

可以看到原來(lái)的字符串,反轉(zhuǎn)它的結(jié)果,然后再反轉(zhuǎn)它的結(jié)果,就相當(dāng)于原來(lái)的了。

現(xiàn)在代碼正在運(yùn)行,是時(shí)候測(cè)試它了。

在這一步中,您將為Reverse函數(shù)編寫(xiě)一個(gè)基本的單元測(cè)試。

a.使用您的文本編輯器,在 fuzz 目錄中創(chuàng)建一個(gè)名為 reverse_test.go 的文件。

b.將以下代碼粘貼到 reverse_test.go 中。

這個(gè)簡(jiǎn)單的測(cè)試將斷言列出的輸入字符串將被正確反轉(zhuǎn)。

使用運(yùn)行單元測(cè)試go test

接下來(lái),您將單元測(cè)試更改為模糊測(cè)試。

單元測(cè)試有局限性,即每個(gè)輸入都必須由開(kāi)發(fā)人員添加到測(cè)試中。模糊測(cè)試的一個(gè)好處是它可以為您的代碼提供輸入,并且可以識(shí)別您提出的測(cè)試用例沒(méi)有達(dá)到的邊緣用例。

在本節(jié)中,您將單元測(cè)試轉(zhuǎn)換為模糊測(cè)試,這樣您就可以用更少的工作生成更多的輸入!

請(qǐng)注意,您可以將單元測(cè)試、基準(zhǔn)測(cè)試和模糊測(cè)試保存在同一個(gè) *_test.go 文件中,但對(duì)于本示例,您將單元測(cè)試轉(zhuǎn)換為模糊測(cè)試。

在您的文本編輯器中,將 reverse_test.go 中的單元測(cè)試替換為以下模糊測(cè)試。

Fuzzing 也有一些限制。在您的單元測(cè)試中,您可以預(yù)測(cè)Reverse函數(shù)的預(yù)期輸出,并驗(yàn)證實(shí)際輸出是否滿足這些預(yù)期。

例如,在測(cè)試用例Reverse("Hello, world")中,單元測(cè)試將返回指定為"dlrow ,olleH".

模糊測(cè)試時(shí),您無(wú)法預(yù)測(cè)預(yù)期輸出,因?yàn)槟鸁o(wú)法控制輸入。

但是,Reverse您可以在模糊測(cè)試中驗(yàn)證函數(shù)的一些屬性。在這個(gè)模糊測(cè)試中檢查的兩個(gè)屬性是:

(1)將字符串反轉(zhuǎn)兩次保留原始值

(2)反轉(zhuǎn)的字符串將其狀態(tài)保留為有效的 UTF-8。

注意單元測(cè)試和模糊測(cè)試之間的語(yǔ)法差異:

(3)確保新包unicode/utf8已導(dǎo)入。

隨著單元測(cè)試轉(zhuǎn)換為模糊測(cè)試,是時(shí)候再次運(yùn)行測(cè)試了。

a.在不進(jìn)行模糊測(cè)試的情況下運(yùn)行模糊測(cè)試,以確保種子輸入通過(guò)。

如果您在該文件中有其他測(cè)試,您也可以運(yùn)行g(shù)o test -run=FuzzReverse,并且您只想運(yùn)行模糊測(cè)試。

b.運(yùn)行FuzzReverse模糊測(cè)試,查看是否有任何隨機(jī)生成的字符串輸入會(huì)導(dǎo)致失敗。這是使用go test新標(biāo)志-fuzz執(zhí)行的。

模糊測(cè)試時(shí)發(fā)生故障,導(dǎo)致問(wèn)題的輸入被寫(xiě)入將在下次運(yùn)行的種子語(yǔ)料庫(kù)文件中g(shù)o test,即使沒(méi)有-fuzz標(biāo)志也是如此。要查看導(dǎo)致失敗的輸入,請(qǐng)?jiān)谖谋揪庉嬈髦写蜷_(kāi)寫(xiě)入 testdata/fuzz/FuzzReverse 目錄的語(yǔ)料庫(kù)文件。您的種子語(yǔ)料庫(kù)文件可能包含不同的字符串,但格式相同。

語(yǔ)料庫(kù)文件的第一行表示編碼版本。以下每一行代表構(gòu)成語(yǔ)料庫(kù)條目的每種類(lèi)型的值。由于 fuzz target 只需要 1 個(gè)輸入,因此版本之后只有 1 個(gè)值。

c.運(yùn)行沒(méi)有-fuzz標(biāo)志的go test; 新的失敗種子語(yǔ)料庫(kù)條目將被使用:

由于我們的測(cè)試失敗,是時(shí)候調(diào)試了。

網(wǎng)站名稱(chēng):生成測(cè)試報(bào)告go語(yǔ)言 怎么生成測(cè)試報(bào)告
文章源于:http://muchs.cn/article26/ddcgjcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、域名注冊(cè)、定制開(kāi)發(fā)、商城網(wǎng)站、網(wǎng)站制作做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)