欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語(yǔ)言單元測(cè)試技巧 go語(yǔ)言知識(shí)點(diǎn)總結(jié)

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

本教程介紹了 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)腳本攻擊。

創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端重慶網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)公司、網(wǎng)站定制、成都全網(wǎng)營(yíng)銷推廣、微信小程序開發(fā)、微信公眾號(hào)開發(fā)、seo優(yōu)化排名服務(wù),提供專業(yè)營(yíng)銷思路、內(nèi)容策劃、視覺設(shè)計(jì)、程序開發(fā)來(lái)完成項(xiàng)目落地,為食品包裝袋企業(yè)提供源源不斷的流量和訂單咨詢。

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

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

1、打開命令提示符并切換到您的主目錄。

在 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ù)編寫一個(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è)輸入都必須由開發(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)題的輸入被寫入將在下次運(yùn)行的種子語(yǔ)料庫(kù)文件中g(shù)o test,即使沒(méi)有-fuzz標(biāo)志也是如此。要查看導(dǎo)致失敗的輸入,請(qǐng)?jiān)谖谋揪庉嬈髦写蜷_寫入 testdata/fuzz/FuzzReverse 目錄的語(yǔ)料庫(kù)文件。您的種子語(yǔ)料庫(kù)文件可能包含不同的字符串,但格式相同。

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

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

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

微機(jī)test函數(shù)作用

Go語(yǔ)言自帶了 testing 測(cè)試包,可以進(jìn)行自動(dòng)化的單元測(cè)試,輸出結(jié)果驗(yàn)證,并且可以測(cè)試性能。

為什么需要測(cè)試

完善的測(cè)試體系,能夠提高開發(fā)的效率,當(dāng)項(xiàng)目足夠復(fù)雜的時(shí)候,想要保證盡可能的減少 bug,有兩種有效的方式分別是代碼審核和測(cè)試,Go語(yǔ)言中提供了 testing 包來(lái)實(shí)現(xiàn)單元測(cè)試功能。

測(cè)試規(guī)則

要開始一個(gè)單元測(cè)試,需要準(zhǔn)備一個(gè) go 源碼文件,在命名文件時(shí)文件名必須以_test.go結(jié)尾,單元測(cè)試源碼文件可以由多個(gè)測(cè)試用例(可以理解為函數(shù))組成,每個(gè)測(cè)試用例的名稱需要以 Test 為前綴,例如:

func TestXxx( t *testing.T ){

//......

}

3、搜索class文件

gojvm目錄

1、搭建go環(huán)境

2、cmd命令行參數(shù)解析

3、搜索class文件

4、添加testOption 便于單元測(cè)試

5、解析classfile文件

6、運(yùn)行時(shí)數(shù)據(jù)區(qū)

7、指令集

8、解釋器

9、創(chuàng)建Class

10、類加載器

11、對(duì)象實(shí)例化new object

12、方法調(diào)用和返回

13 類初始化

14、jvm支持?jǐn)?shù)組

15、jvm支持字符串-數(shù)組擴(kuò)展

16、本地方法調(diào)用

17、ClassLoader原理

18、異常處理

19、 啟動(dòng)jvm

java jvm根據(jù)類路徑(class path)來(lái)搜索類,加載到內(nèi)存

可以通過(guò) -Xbootclasspath 修改啟動(dòng)類路徑

參數(shù) -classpath /-cp

go語(yǔ)言不需要顯式實(shí)現(xiàn)接口

defer 確保異常及時(shí)處理

1、Entry搜索類路徑

2、DirEntry 搜索目錄下類路徑

3、ZipEntry 搜索zip或jar文件形式類路徑

4、CompositeEntry 組合類路徑

5、WildcardEntry 所有通配符下類路徑

Entry 類路徑查找

測(cè)試類

提交標(biāo)簽classpath

面試問(wèn)題總結(jié)(一)Golang

使用go語(yǔ)言的好處: go語(yǔ)言的設(shè)計(jì)是務(wù)實(shí)的, go在針對(duì)并發(fā)上進(jìn)行了優(yōu)化, 并且支持大規(guī)模高并發(fā), 又由于單一的碼格式, 相比于其他語(yǔ)言更具有可讀性, 在垃圾回收上比java和Python更有效, 因?yàn)樗呛统绦蛲瑫r(shí)執(zhí)行的.

1. 進(jìn)程, 線程, 協(xié)程的區(qū)別, 協(xié)程的優(yōu)勢(shì)

2. 講一下GMP模型(重點(diǎn))

3. Go的GC, 混合寫屏障(重點(diǎn))

4. go的Slice和數(shù)組的區(qū)別, slice的擴(kuò)容原理(重點(diǎn))

5. 講一下channel,實(shí)現(xiàn)原理(重點(diǎn))

6. 講一下Go的Map的實(shí)現(xiàn)原理, 是否線程安全, 如何實(shí)現(xiàn)安全(重點(diǎn))

7. new 和 make 的區(qū)別

8. 說(shuō)一下內(nèi)存逃逸

9. 函數(shù)傳指針和傳值有什么區(qū)別

10. goroutine之間的通信方式

11. 測(cè)試是怎么做的(單元測(cè)試, 壓力測(cè)試)

12. 堆和棧的區(qū)別

Go語(yǔ)言使用gorm對(duì)MySQL進(jìn)行性能測(cè)試

之前寫過(guò)了Go語(yǔ)言gorm框架MySQL實(shí)踐,其中對(duì)gorm框架在操作MySQL的各種基礎(chǔ)實(shí)踐,下面分享一下如何使用gorm框架對(duì)MySQL直接進(jìn)行性能測(cè)試的簡(jiǎn)單實(shí)踐。

這里我使用了一個(gè)原始的Go語(yǔ)言版本的 FunTester 測(cè)試框架,現(xiàn)在只有一個(gè)基本的方法,實(shí)在是因?yàn)镚o語(yǔ)言特性太強(qiáng)了??蚣茉O(shè)計(jì)的主要思路之一就是利用Go語(yǔ)言的閉包和方法參數(shù)特性,將一個(gè) func() 當(dāng)做性能測(cè)試的主題,通過(guò)不斷運(yùn)行這個(gè) func() 來(lái)實(shí)現(xiàn)性能測(cè)試。當(dāng)然還有另外一個(gè)思路就是運(yùn)行一個(gè)多線程任務(wù)類,類似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象類,這樣可以設(shè)置一些類的屬性,綁定一些測(cè)試資源,適配更多的測(cè)試場(chǎng)景。

下面演示select的性能測(cè)試,這里我用了隨機(jī)ID查詢的場(chǎng)景。

這里我使用從35開始遞增的ID進(jìn)行刪除。

這里使用了select的用例部分,隨機(jī)ID,然后更新name字段,隨機(jī)10個(gè)長(zhǎng)度的字符串。

這里用到了 FunTester 字段都是隨機(jī)生成。

到這里可以看出,性能測(cè)試框架用到的都是gorm框架的基礎(chǔ)API使用,這里MySQL連接池的管理工作完全交給了gorm框架完成,看資料說(shuō)非常牛逼,我們只需要設(shè)置幾個(gè)參數(shù)。這個(gè)使用體現(xiàn)很像 HttpClient 設(shè)置 HTTP 連接池類似,這里我們也可以看出這些優(yōu)秀的框架使用起來(lái)都是非常簡(jiǎn)單的。

PS:關(guān)于gorm的基礎(chǔ)使用的請(qǐng)參考上一期的文章Go語(yǔ)言gorm框架MySQL實(shí)踐。

怎么學(xué)習(xí)golang

除了Java、Python和JavaScript之外,如果要開始學(xué)習(xí)一門新語(yǔ)言的話,我想應(yīng)該是Go!

Go語(yǔ)言正在被越來(lái)越多的公司使用。我們公司的后端服務(wù)已經(jīng)全面采用Go語(yǔ)言實(shí)現(xiàn)了。

最開始接觸Go語(yǔ)言是去年將一份Go代碼“翻譯”成Python并集成到測(cè)試平臺(tái)上,說(shuō)來(lái)也挺神奇,我從來(lái)沒(méi)學(xué)過(guò)Go卻完成了這個(gè)工作,這也側(cè)面反應(yīng)了Go的語(yǔ)法還是很平易近人的。

今年,在海翔飛調(diào)崗之后已經(jīng)沒(méi)有太多時(shí)間寫代碼了,但如果要開始學(xué)習(xí)一個(gè)新的語(yǔ)言或技術(shù)的話,我最想學(xué)的是Go!

目前來(lái)看,Go似乎還并沒(méi)有太多測(cè)試人員使用的場(chǎng)景,不過(guò),我之前介紹過(guò)的BDD行為驅(qū)動(dòng)框架gauge是由Go開發(fā)的,當(dāng)然,它也支持使用Go來(lái)編寫B(tài)DD測(cè)試代碼。

對(duì)于,已經(jīng)有一定開發(fā)經(jīng)驗(yàn)的同學(xué),如何快速的開始學(xué)習(xí)Go語(yǔ)言呢?我這里給一些思路。

#### 第一步:下載和安裝

在配置環(huán)境的時(shí)候你需要重點(diǎn)了解GOROOT、GOPATH的作用。

你還要準(zhǔn)備一款稱手的編輯器,如果你像我一樣,一直都在使用VS Code的話,那么就它就可以了。

#### 第二步:從hello world開始

先運(yùn)行一個(gè)hello world程序,認(rèn)識(shí)Go語(yǔ)言的語(yǔ)法。

package main

import ( ? ?"fmt")

func main(){

fmt.Println("helloworld!")

}

#### 第三步:熟悉Go的語(yǔ)法

接下來(lái),你可能要花一周左右的時(shí)間熟悉Go語(yǔ)言的語(yǔ)法。比如,變量定義、if/for、函數(shù)、Map、跨文件的程序調(diào)用…等,當(dāng)然,還有一些Go特有的知識(shí)。

當(dāng)然,我更喜歡看視頻教程,雖然質(zhì)量參差不齊,但我仍然覺得看視頻比我自己看書更有效率。

熟悉一段Go代碼:

package main

import"fmt"

func myFunc() {

i := 0

Here: ? //這行的第一個(gè)詞,以冒號(hào)結(jié)束作為標(biāo)簽

fmt.Println(i)

i++ ? ?if i 10{ ? ? ? ?goto Here ? //跳轉(zhuǎn)到Here去

}

}func main() { ? ?//調(diào)用函數(shù)

myFunc()

}

#### 第四步:Go如何做單元測(cè)試

針對(duì)Go做測(cè)試也非常簡(jiǎn)單。比如,這是一個(gè)被測(cè)試文件:add.go。

package test_demofunc Add(a int, b int) int{ ? ?return a + b

}

下面針對(duì)Add()函數(shù)編寫測(cè)試用例,test_add.go

package test_demo

import ( ? ?"testing")

func TestAdd1(t *testing.T){

r:= Add(1, 2) ? ?if r !=3{

t.Errorf("Add(1, 2)failed. Got %d, expected 3.", r)

}

}

func TestAdd2(t *testing.T){

r:= Add(2, 2) ? ?if r !=4{

t.Errorf("Add(2, 2)failed. Got %d, expected 4.", r)

}

}

你只需要執(zhí)行?go test?命令就可以運(yùn)行上面的測(cè)試了。

#### 第五步:從哪兒找第三方庫(kù)

當(dāng)然,你只學(xué)習(xí)go語(yǔ)言本身,基本是做不了什么事的,必須要使用第三方擴(kuò)展庫(kù)。

這里羅列了Go語(yǔ)言的第三方庫(kù),通過(guò)這些第三方庫(kù)的介紹,我們也可以大概知道Go可以用來(lái)干什么。

如果你知道庫(kù)的名字的話,也可以在這個(gè)網(wǎng)站上搜索。

據(jù)我了解,Go的第三方庫(kù)大多都在GitHub上面。

#### 第六步:用Go做Web開發(fā)

Go是靜態(tài)語(yǔ)言,而且支持并發(fā)編程,所以,他有天然的性能優(yōu)勢(shì),大多公司主要使用Go也是開發(fā)后端服務(wù)(即API)。

終于到了實(shí)戰(zhàn)階段,如果我們真的要掌握一門語(yǔ)言,那么一定要用它來(lái)開發(fā)一個(gè)項(xiàng)目出來(lái)。這個(gè)過(guò)程大概需要一個(gè)月。

Beego是Go下在主流的Web開發(fā)框架,資料相對(duì)比較豐富,而且有完善的文檔。你可為此制定一個(gè)目標(biāo),比如用它來(lái)開發(fā)一個(gè)Blog,為此,你需要詳細(xì)閱讀Beego文檔,以及學(xué)習(xí)相關(guān)的Web開發(fā)技術(shù)。

等你完成這個(gè)項(xiàng)目的時(shí)候,我想你已經(jīng)會(huì)使用Go語(yǔ)言了。

分享名稱:go語(yǔ)言單元測(cè)試技巧 go語(yǔ)言知識(shí)點(diǎn)總結(jié)
文章路徑:http://chinadenli.net/article36/hpeipg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站網(wǎng)站建設(shè)、網(wǎng)站制作、云服務(wù)器、手機(jī)網(wǎng)站建設(shè)ChatGPT

廣告

聲明:本網(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)

成都app開發(fā)公司