Go基礎學習 單元 基準 效能 覆蓋率 示例測試

2021-10-08 04:40:12 字數 4477 閱讀 9801

//測試用例函式

//splittostring 測試testing 包

func

splittostring

(s, sep string

)(res [

]string

) res =

(res, s)

return

}

單元測試函式

func

testsplittostring1

(t *testing.t)

// 期望的結果

if!reflect.

deepequal

(want, got)

}

//測試組(無法對單個case進行測試)

func

testsplittostring2

(t *testing.t)

test :=

testcase},

},},

}for

_, v :=

range test

}}

//子測試(即可以組測試,也可以進行單個case的測試)

func

testsplittostring

(t *testing.t)

testdata :=

map[

string

]testcase},

"case 2":}

,"case 3":}

,}for k, v :=

range testdata })

}}

基準測試函式

func

benchmarksplittostring

(b *testing.b)

}

//以斐波那契數的函式w為例

// fib 是乙個計算第n個斐波那契數的函式

func

fib(n int

)int

return

fib(n-1)

+fib

(n-2)}

//效能比較測試

//比較同乙個函式處理1000個元素的耗時與處理1萬甚至100萬個元素的耗時的差別;

//效能比較函式通常是乙個帶有引數的函式,被多個不同的benchmark函式傳入不同的值來呼叫

//每個基準測試至少執行1秒。如果在benchmark函式返回時沒有到1秒,則b.n的值會按1,2,5,10,20,50,…增加,並且函式再次執行。

//可以使用-benchtime標誌增加最小基準時間,以產生更準確的結果 go test -bench=fib40 -benchtime=20s

func

benchmarkfib

(b *testing.b, n int)}

//使用go test -bench=fib1 //或者go test -bench=. 來只當執行的測試函式

func

benchmarkfib1

(b *testing.b)

func

benchmarkfib2

(b *testing.b)

func

benchmarkfib3

(b *testing.b)

func

benchmarkfib10

(b *testing.b)

func

benchmarkfib20

(b *testing.b)

func

benchmarkfib40

(b *testing.b)

/*

並行測試

runparallel會建立出多個goroutine,並將b.n分配給這些goroutine執行, 其中goroutine數量的預設值為gomaxprocs。使用者如果想要增加非cpu受限(non-cpu-bound)基準測試的並行性, 那麼可以在runparallel之前呼叫setparallelism 。runparallel通常會與-cpu標誌一同使用例如go test -bench=. -cpu 1(來指定cpu數)

*/func

benchmarksplitparallel

(b *testing.b)})

}

示例測試函式

//示例函式

func

examplesplittostring()

testmain執行在主goroutine中, 可以在呼叫 m.run前後做任何設定(setup)和拆卸(teardown)。退出測試的時候應該使用m.run的返回值作為引數呼叫os.exit。

func

testmain

(m *testing.m)

// 測試集的setup與teardown

func

setuptestcase

(t *testing.t)

func

(t *testing.t)

}// 子測試的setup與teardown

func

setupsubtest

(t *testing.t)

func

(t *testing.t)

}func

testsplittostring

(t *testing.t)

testdata :=

map[

string

]testcase},

"case 2":}

,"case 3":}

,}teardowntestcase :=

setuptestcase

(t)// 測試之前執行setup操作

defer

teardowntestcase

(t)// 測試之後執行testdoen操作

for name, tc :=

range testdata })

}}

go test //會測試*_test.go檔案中的三種型別函式

go test -v //檢視測試函式名稱和執行時間

go test -v -run=

"關鍵字" //正則匹配函式名中的關鍵字進行指定測試

go test -v -run=split/****** //通過/來指定要執行的子測試用例;只會執行******對應的子測試用例。

go test -cover //檢視測試覆蓋率;測試覆蓋率是你的**被測試套件覆蓋的百分比。通常我們使用的都是語句的覆蓋率,也就是在測試中至少被執行一次的**佔總**的比例。

go test -cover -coverprofile=xx.out//將覆蓋率相關的記錄資訊輸出到乙個檔案 //

go tool cover -html=xx.out //根據上面生成的檔案通過cover元件生成乙個html的頁面報告

go test -bench=funcname//檢視基準測試結果;

表示對split函式進行基準測試,數字8表示gomaxprocs的值

和203ns/op表示每次呼叫split函式耗時203ns(平均);共測試了10552743 次

go test -bench=funcname -benchmem //-benchmem引數,來獲得記憶體分配的統計資料。

b/op:表示每次操作記憶體分配了80位元組

allocs/op:表示每次操作進行了1次記憶體分配

go覆蓋率測試

原文 對beego的控制器函式進行單測 改進的內容 需要攜帶的body資訊 c.ctx.input.requestbody byte content 需要攜帶的header c.ctx.request.header myheader string c.setsession login 123 c.p...

go 覆蓋率統計

被測服務是go服務,測試指令碼是python等非go語言實現,可參考以下兩種方法實現go服務的測試覆蓋率統計。建立main test.go檔案 或者與你的 func main 方法所在的檔名同名的test檔案。比如,有如下main.go檔案 func main 根據以上main.go檔案,建立以下m...

go生成單元測試覆蓋率 Go 中的效能測量

a journey with go 專屬插圖,由 renee french 根據原始 go gopher 製作。information source 本文基於 go 1.13.go test 命令提供了許多出色的功能,比如 覆蓋率,cpu 和 記憶體分析。要提供這些統計資訊,go 就需要一種方式來跟...