Go 測試單個方法 效能測試

2021-09-08 20:17:12 字數 3560 閱讀 2700

gotest.go

package mytest

import (

"errors"

)func division(a, b float64) (float64, error)

return a / b, nil

}

gotest_test.go

package mytest

import (

"testing"

)func test_division_1(t *testing.t) else

}func test_division_2(t *testing.t) else

}

gotest_b_test.go

package mytest

import (

"testing")

func benchmark_division_1(b *testing.b) else

}func benchmark_division_2(b *testing.b) else

}

1. 在目錄下執行go test是測試目錄所有以***_test.go結尾的檔案。

2.測試單個方法  下面2種寫法。

go test -test.v  -test.run="test_division_1" -test.count 5

go test -v  -run="test_division_1" -count 5

go test -v  #測試目錄下所有*_test方法。

go test -v gotest_test.go gotest.go    //測試整個檔案,要帶上依賴檔案

go test -v gotest.go gotest_test.go-test.run test_division_1   //測試單個函式

go test -v -bench=.    //效能測試,測所有方法,

go test -v -bench=division_2    //效能測試,測單個方法,

go test -v -bench=".*"  //效能測試,返回結果表示這個測試用例在1s中內執行了2000次,每次呼叫大約用了891898ns

-v引數,如果不加這個引數的話,只會顯示錯誤的測試用例,否則就顯示所有的測試用例(成功 + 錯誤)

3.檢視幫助go test -help

使用命令:

go test -bench=".*" -cpuprofile=cpu.prof -c

cpuprofile是表示生成的cpu profile檔案, -c是生成可執行的二進位制檔案,這個是生成狀態圖必須的,它會在本目錄下生成可執行檔案mymysql.test

然後使用go tool pprof工具: go tool pprof test0528.test cpu.prof

呼叫web(需要安裝graphviz)

顯示svg檔案已經生成了

1.建立測試資料夾mysql,資料夾下的go檔案的package必須與資料夾名一致(不然會識別不到)

2.建立需要測試的檔案mysql.go(使用github.com/go-sql-driver/mysql包) 

3.建立單元測試用例檔案mysql_test.go(檔名必須是*_test.go的型別,*代表要測試的檔名,函式名必須以test開頭如:test***或test_***) 

4.建立benchmark效能測試用例檔案mysql_b_test.go(檔名必須是*_b_test.go的型別,*代表要測試的檔名,函式名必須以benchmark開頭如:benchmark***或benchmark_***) 

golang profile

go test是go語言自帶的測試工具,其中包含的是兩類,單元測試和效能測試

通過go help test可以看到go test的使用說明:

go test [-c] [-i] [build flags] [packages] [flags for test binary]

-c : 編譯go test成為可執行的二進位制檔案,但是不執行測試。

-i : 安裝測試包依賴的package,但是不執行測試。

關於build flags,呼叫go help build,這些是編譯執行過程中需要使用到的引數,一般設定為空

關於packages,呼叫go help packages,這些是關於包的管理,一般設定為空

關於flags for test binary,呼叫go help testflag,這些是go test過程中經常使用到的引數

-test.v : 是否輸出全部的單元測試用例(不管成功或者失敗),預設沒有加上,所以只輸出失敗的單元測試用例。

-test.run pattern: 只跑哪些單元測試用例

-test.bench patten: 只跑那些效能測試用例

-test.benchmem : 是否在效能測試的時候輸出記憶體情況

-test.benchtime t : 效能測試執行的時間,預設是1s

-test.cpuprofile cpu.out : 是否輸出cpu效能分析檔案

-test.memprofile mem.out : 是否輸出記憶體效能分析檔案

-test.blockprofile block.out : 是否輸出內部goroutine阻塞的效能分析檔案

-test.memprofilerate n : 記憶體效能分析的時候有乙個分配了多少的時候才打點記錄的問題。這個引數就是設定打點的記憶體分配間隔,也就是profile中乙個sample代表的記憶體大小。預設是設定為512 * 1024的。如果你將它設定為1,則每分配乙個記憶體塊就會在profile中有個打點,那麼生成的profile的sample就會非常多。如果你設定為0,那就是不做打點了。

你可以通過設定memprofilerate=1和gogc=off來關閉記憶體**,並且對每個記憶體塊的分配進行觀察。

-test.blockprofilerate n: 基本同上,控制的是goroutine阻塞時候打點的納秒數。預設不設定就相當於-test.blockprofilerate=1,每一納秒都打點記錄一下

-test.parallel n : 效能測試的程式並行cpu數,預設等於gomaxprocs。

-test.timeout t : 如果測試用例執行時間超過t,則丟擲panic

-test.cpu 1,2,4 : 程式執行在哪些cpu上面,使用二進位制的1所在位代表,和nginx的nginx_worker_cpu_affinity是乙個道理

-test.short : 將那些執行時間較長的測試用例執行時間縮短

未測試:

go 中的 5 種高階測試方法 

Go 單元測試和效能測試

測試對於網際網路應用軟體開發來說非常重要,它對軟體可靠性保證具有重要意義,通過測試能夠盡可能發現並改正軟體中的錯誤,提高軟體質量。這裡我們主要講解go語言如何實現單元測試和效能測試。go語言中自帶有乙個輕量級的測試框架testing和自帶的go test命令來實現單元測試和效能測試,testing框...

go test 測試單個檔案和測試單個函式

測試單個檔案,一定要帶上被測試的原檔案 go test v wechat test.go wechat.go 測試單個方法 go test v test.run testrefreshaccesstoken go 單元測試寫法 參考 testing go語言package提供的自動化測試框架,tes...

直播通用測試方法 效能測試

一.相容性測試 直播的相容性測試則是在不同的機型 不同的系統 不同的解析度以及不同網路環境下測試是否可以正常開播,進入直播間 直播 傳送訊息並且在直播結束時可以正常跳轉到直播結束頁面進行相關操作。圖4.1 相容性測試 二.效能測試 針對直播間的效能測試主要涉及到以下幾個方面 圖5.1 效能測試 1 ...