單元測試&基準測試&樣本測試&測試覆蓋率

1.單元測試

1.1.go test 目錄

go test,將對當前目錄下的所有*_test.go文件進行編譯并自動運行測試
go test xxx 將對指定目錄下的所有*_test.go文件進行編譯并自動運行測試

1.2.go test 測試源碼文件 測試的源碼文件

運行test目錄下t.go文件的所有測試用例
go test test/t_test.og test/t.go

1.3.go test -run=正則表達式與之對應的測試用例執(zhí)行 目錄名稱立哑,執(zhí)行./test目錄下正則匹配的所有單元測試

go test -v -run=Test ./test

1.4.go test -v -run=T ./test -timeout 100ms timeout指定單元測試的超時時間垮耳,超過指定時間測試用通不通過

 go test -v -run=T ./test -timeout 100m

1.5.go test 并發(fā)測試

go test -v ./test -parallel=5
運行條件
1.功能測試函數加入t.Parallel()
2.runtime.GOMAXPROCS設置go的最大并發(fā)處理數量,默認值為1
3.測試用例源碼文件init中設置runtime.GOMAXPROCS最大并發(fā)數據
4.通常-parallel不需要設置惦费,默認讓它與runtime.GOMAXPROCS數據相同
  • t.go
package test

import (
    "time"
    "fmt"
    "strconv"
)

func test()  {
    //fmt.Println("test")
    time.Sleep(time.Nanosecond)
}

func test2()  {
    i := 1
    name := "jingyanlei"
    age := 18
    fmt.Sprintf("i:%d, name:%s, age:%d", i, name, age)
}

func test3()  {
    i := 1
    name := "jingyanlei"
    age := 18
    _ = "i:"+strconv.Itoa(i)+"name:"+name+"age:"+strconv.Itoa(age)
}
  • t_test.go
package test

import (
    "testing"
    "runtime"
)

func init() {
    runtime.GOMAXPROCS(10)
}

func TestTest(t *testing.T)  {
    t.Parallel()
    test()
}

func TestTest2(t *testing.T) {
    t.Parallel()
    test2()
}

2.基準測試

2.1.運行基準測試

運行指定的基準測試
go test -bench regexp
go test -bench=Test ./test/ 

運行所有基準測試
go test -bench. 或go test -bench=".*" 

對某個go文件進行benchmark測試 
go test ./test/t_test.go -=".*"

-benchmem 基準測試中包含內存分配信息
go test  -bench=Test ./test/  -benchmem 

-benchtime t 用來間接控制基準測試函數的操作次數 t時間 1s 1秒
go test  -bench=Test ./test/  -benchmem -benchtime 1s 

-cpu 自定義測試運行次數哮塞,并在測試運行時間改變go語言的最大并發(fā)處理數的標記
go test  -bench=Test ./test/  -benchmem -benchtime 1s -cpu=1,4,16

b.SetBytes(1024) MB/s 每秒被處理的字節(jié)數量 
ns/op 平均耗時
B/op 每次操作分配的字節(jié)平均數
allocs/op 每次操作分配內存的次數

3.樣本測試

樣本測試函數需要以"Example"作為開始南蹂,并且在這類的函數體的最后還可以有若干個注釋行,作用比較在該測試函數被執(zhí)行期間局蚀,標準輸出上出現的內容是否與預期相符
  • 命名
按照慣例麦锯,根據被測試的程序實體的種類,應該遵循這樣的命名規(guī)則
1.當被測試對象是整個代碼包時琅绅,樣本測試的函數名稱應該是Example,即直接以樣本測試函數名的統(tǒng)一前輟作為函數名稱
2.當被測試對象是一個函數時扶欣,對于函數F,樣本測試的名稱應該是ExampleF
3.當被測試對象是一個類型時,對于類型T千扶,樣本測試函數的名稱應該是ExampleT
4.當被測試對象是某個類型中的一個方法時料祠,對于類型T的方法M,樣本測試測試函數的名稱應該是ExampleT_M
5.如果需要在樣本測試的名稱后添加上后輟澎羞,需要用下劃線把該后輟與名稱其它部分隔開髓绽,該后輟的首字母必須小寫,如ExampleT_M_basic
  • 執(zhí)行
go test test/et
  • Example
package et

import "fmt"

func ExampleHello()  {
    fmt.Println("Hello,Golang~")
    //Output:Hello,Golang~
}

func ExampleHello2()  {
    for i:=0; i<3; i++  {
        fmt.Println("Hello,Golang~")
    }

    //Output:Hello,Golang~
    //Hello,Golang~
    //Hello,Golang~
}

4.測試運行記錄

  • 收集資源使用情況
在測試運行時資源的使用情況監(jiān)控方面妆绞,go語言提供了3個可用的標記顺呕。只能運行在一個代碼包下。
標記名稱 標記描述
-cpuprofile cpu.out 記錄cpu使用情況括饶,記寫到指定文件中直到測試退出
-memprofile mem.out 記錄內存使有情況株茶,并在所有測試通過后將內存使用概要寫入到指定的測試文件中
-memprofilerate 此標記記錄內存分配操作的行為,設置分析器的取樣時間間隔图焰,這些記錄將會被寫到內存使用概要文件中
go test ./test -cpuprofile cpu.out
目錄下會生成cpu.out文件
使用go tool pprof命令來交互式的對這個概要文件進行查看
go tool pprof ./test.test ./cpu.out
(pprof) top10
go test ./test -memprofile mem.out -memprofilerate 10
查看
go tool pprof ./test.test ./mem.out
(pprof) top10
2319B of 2319B total (  100%)
Dropped 38 nodes (cum <= 11B)
Showing top 10 nodes out of 26 (cum >= 95B)
      flat  flat%   sum%        cum   cum%
     1664B 71.76% 71.76%      1664B 71.76%  runtime.malg
      240B 10.35% 82.10%       240B 10.35%  runtime.acquireSudog
      192B  8.28% 90.38%      1984B 85.55%  runtime.systemstack
      128B  5.52% 95.90%       128B  5.52%  runtime.allgadd
       48B  2.07% 97.97%        48B  2.07%  runtime.rawstringtmp
       47B  2.03%   100%        47B  2.03%  os.NewFile
         0     0%   100%        48B  2.07%  fmt.Sprintf
         0     0%   100%        80B  3.45%  go-test/test.TestTest
         0     0%   100%        80B  3.45%  go-test/test.TestTest2
         0     0%   100%        95B  4.10%  main.main

  • 記錄程序中GOroutine阻塞事件
標記名稱 標記描述
-blockprofile block.out 記錄Goroutine阻塞事件启盛,并在所有測試通過后將概要信息寫到指定文件中.
-blickprofilerate n 這個標記用于控制記錄Goroutine阻塞事件的時間間隔,n的單位為次,默認值為1
go test ./test -blockprofile block.out -blockprofilerate 1 

查看
go tool pprof ./test.test ./block.out 
(pprof) top10
312.26us of 312.26us total (  100%)
Showing top 10 nodes out of 15 (cum >= 4.84us)
      flat  flat%   sum%        cum   cum%
  296.58us 94.98% 94.98%   296.58us 94.98%  runtime.chanrecv1
   15.69us  5.02%   100%    15.69us  5.02%  runtime.chansend1
         0     0%   100%    41.67us 13.34%  go-test/test.TestTest
         0     0%   100%    10.10us  3.23%  go-test/test.TestTest2
         0     0%   100%   123.37us 39.51%  main.main
         0     0%   100%   312.26us   100%  runtime.goexit
         0     0%   100%   123.37us 39.51%  runtime.main
         0     0%   100%   123.37us 39.51%  testing.(*M).Run
         0     0%   100%    51.76us 16.58%  testing.(*T).Parallel
         0     0%   100%     4.84us  1.55%  testing.(*T).Run

5.測試覆蓋率

go test cover
...
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末僵闯,一起剝皮案震驚了整個濱河市卧抗,隨后出現的幾起案子,更是在濱河造成了極大的恐慌鳖粟,老刑警劉巖社裆,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異牺弹,居然都是意外死亡浦马,警方通過查閱死者的電腦和手機时呀,發(fā)現死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門张漂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谨娜,你說我怎么就攤上這事航攒。” “怎么了趴梢?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵漠畜,是天一觀的道長。 經常有香客問我坞靶,道長憔狞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任彰阴,我火速辦了婚禮瘾敢,結果婚禮上,老公的妹妹穿的比我還像新娘尿这。我一直安慰自己簇抵,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布射众。 她就那樣靜靜地躺著碟摆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叨橱。 梳的紋絲不亂的頭發(fā)上典蜕,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音罗洗,去河邊找鬼愉舔。 笑死,一個胖子當著我的面吹牛栖博,可吹牛的內容都是我干的屑宠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼仇让,長吁一口氣:“原來是場噩夢啊……” “哼典奉!你這毒婦竟也來了躺翻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤卫玖,失蹤者是張志新(化名)和其女友劉穎公你,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體假瞬,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡陕靠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了脱茉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剪芥。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖琴许,靈堂內的尸體忽然破棺而出税肪,到底是詐尸還是另有隱情,我是刑警寧澤榜田,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布益兄,位于F島的核電站,受9級特大地震影響箭券,放射性物質發(fā)生泄漏净捅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一辩块、第九天 我趴在偏房一處隱蔽的房頂上張望蛔六。 院中可真熱鬧,春花似錦庆捺、人聲如沸古今。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捉腥。三九已至,卻和暖如春你画,著一層夾襖步出監(jiān)牢的瞬間抵碟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工坏匪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拟逮,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓适滓,卻偏偏與公主長得像敦迄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理罚屋,服務發(fā)現苦囱,斷路器,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 轉:http://www.reibang.com/p/d5fca0185e83 Xcode測試 前言 總算在今天把...
    測試小螞蟻閱讀 2,905評論 0 20
  • 1. Java基礎部分 基礎部分的順序:基本語法脾猛,類相關的語法撕彤,內部類的語法,繼承相關的語法猛拴,異常的語法羹铅,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • 作者:廖飛全文約 7778 字,讀完可能需要 15 分鐘愉昆。 原文鏈接:http://www.cnblogs.com...
    羅義的夏天閱讀 4,565評論 1 2
  • 一年前母親悄無聲息的走了职员,看到兒孫們都生活的很幸福,為了不拖累兒女們撼唾,她悄悄的走了廉邑。 十幾年前父親就因...
    hesiting閱讀 283評論 4 3