Go-知識測試-測試參數
- 1. -args
- 2. -json
- 3. -o
- 4. -bench
- 5. -benchtime
- 6. -cpu
- 7. -count
- 8. -failfast
- 9. -list
- 10. -parallel
- 11. -run
- 12. -timeout
- 13. -v
- 14 -benchmem
1. -args
指示go test 把-args 后面的參數帶到測試中去。具體的測試函數會根據此參數來控制測試流程。
-args后面可以附帶多個參數,所有參數都將以字符串形式傳入,每個參數作為一個string,并存放到字符串切片中。
import ("flag""testing"
)func TestArgs(t *testing.T) {if !flag.Parsed() {flag.Parse()}args := flag.Args()for _, arg := range args {t.Logf("arg: %s", arg)}
}
使用 go test -v xx_test.go -args test hello world
進行執行
2. -json
-json 參數用于指示go test將結果轉換成json格式,便于在后續使用。
比如上面的例子go test -v xx_test.go -json -args test hello world
3. -o
-o 參數指定生成的二進制可執行程序,并執行測試,測試結束不會刪除該程序。
沒有此參數時,go test 生成的二進制可執行程序存放到臨時目錄中,執行結束便刪除。
繼續使用上述的例子
直接執行二進制程序
4. -bench
go test 默認不執行性能測試,使用-bench 參數才可以運行,而且只運行性能測試函數。
-bench 后面附加正則表達式,用于篩選需要執行的性能測試。如果要執行所有的性能測試,使用 .
作為正則。
這里的正則不是嚴格意義的正則,而是包含關系。
比如有如下三個性能測試:
func BenchmarkSlice(b *testing.B)
func BenchmarkSliceStr(b *testing.B)
func BenchmarkArray(b *testing.B)
如果使用go test -bench Slice
,那么會執行前兩個,第三個不會被執行。
如果是子測試,那么是存在層級的:
func BenchmarkSub(b *testing.B){b.Run("name=1", benchSub1)b.Run("name=2", benchSub2)b.Run("n=3", benchSub3)
}
測試函數命名規則中,子測試的名字需要以父測試名字作為前綴并以/
連接,上面的例子中實際上包含了4個測試:
Sub,Sub/name=1,Sub/name=2,Sub/n=3
如果想執行三個子測試,那么使用參數-bench Sub
,如果只是想執行第一個,那么-bench Sub/name=1
如果想執行前兩個,那么-bench Sub/name=
5. -benchtime
-benchtime s 指定每個性能測試的執行時間,如果不指定,那么默認執行1s.
6. -cpu
-cpu 參數提供了一個CPU個數的列表,提供此列表后,測試將按照這個列表指定的CPU數設置GOMAXPROCS并分別測試.
比如 -cpu 1,2 ,那么每個測試即將執行兩次,一次是用1個CPU執行,另一次是用兩個CPU執行。
示例測試不適用
7. -count
-count n 指定每個測試執行的次數,默認執行一次。
如果使用-count指定執行測試的同時還使用-cpu指定了多種CPU,那么測試將在每種CPU下均執行-count的次數。
示例測試不適用
8. -failfast
默認情況下,go test會執行所有匹配到的測試,并最后打印測試結果,無論成功或失敗。
-failfast 指定如果有測試出現失敗,則立即停止測試。
9. -list
-list regexp 只是列出匹配成功的測試函數,并不真正執行。而且不會列出子函數。
10. -parallel
-parallel n 指定測試的最大并發數。
當測試使用t.Parallel()方法將測試轉為并發時,將受到最大并發數的限制,默認情況下,最多有GOMAXPROCS個測試并發,其他的測試只能阻塞等待。
11. -run
-run regexp 的作用是根據正則表達式執行單元測試和示例測試。正則匹配規則與-bench類似。
12. -timeout
-timeout d 默認情況下,測試執行超過10分鐘就會因超時而退出。
如果將超時時間設置為1s,那么大于1s的都是因為超時而退出:
-timeout xs
-timeout xm
-timeout xh
13. -v
默認情況下,測試結果只打印簡單的測試結果,-v 參數可以打印詳細的日志。
在性能測試下,總是打印日志,因為日志有時會影響性能。
14 -benchmem
默認情況下,性能測試結果只打印運行次數,每個操作耗時。使用-benchmem則可以打印每個操作分配的字節數,每個操作分配的對象數。