//測試用例函式
//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 就需要一種方式來跟...