日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go test 命令行参数

發(fā)布時(shí)間:2024/3/13 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go test 命令行参数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:《Go專家編程》Go test 命令行參數(shù)

前言

go test有非常豐富的參數(shù),一些參數(shù)用于控制測(cè)試的編譯,另一些參數(shù)控制測(cè)試的執(zhí)行。

有關(guān)測(cè)試覆蓋率、vet和pprof相關(guān)的參數(shù)先略過,我們?cè)谟懻撓嚓P(guān)內(nèi)容時(shí)再詳細(xì)介紹。

控制編譯的參數(shù)

-args

指示go test把-args后面的參數(shù)帶到測(cè)試中去。具體的測(cè)試函數(shù)會(huì)跟據(jù)此參數(shù)來控制測(cè)試流程。

-args后面可以附帶多個(gè)參數(shù),所有參數(shù)都將以字符串形式傳入,每個(gè)參數(shù)做為一個(gè)string,并存放到字符串切片中。

// TestArgs 用于演示如何解析-args參數(shù) func TestArgs(t *testing.T) { if !flag.Parsed() { flag.Parse() } argList := flag.Args() // flag.Args() 返回 -args 后面的所有參數(shù),以切片表示,每個(gè)元素代表一個(gè)參數(shù) for _, arg := range argList { if arg == "cloud" { t.Log("Running in cloud.") }else { t.Log("Running in other mode.") } } }

執(zhí)行測(cè)試時(shí)帶入?yún)?shù):

E:\OpenSource\GitHub\RainbowMango\GoExpertProgrammingSourceCode\GoExpert\src\gotest>go test -run TestArgs -v -args "cloud" TestMain setup. === RUN TestArgs --- PASS: TestArgs (0.00s) unit_test.go:28: Running in cloud. PASS TestMain tear-down. ok gotest 0.353s

通過參數(shù)-args指定傳遞給測(cè)試的參數(shù)。

-json

-json 參數(shù)用于指示go test將結(jié)果輸出轉(zhuǎn)換成json格式,以方便自動(dòng)化測(cè)試解析使用。

示例如下:

E:\OpenSource\GitHub\RainbowMango\GoExpertProgrammingSourceCode\GoExpert\src\gotest>gotest -run TestAdd -json {"Time":"2019-02-28T15:46:50.3756322+08:00","Action":"output","Package":"gotest","Output":"TestMain setup.\n"} {"Time":"2019-02-28T15:46:50.4228258+08:00","Action":"run","Package":"gotest","Test":"TestAdd"} {"Time":"2019-02-28T15:46:50.423809+08:00","Action":"output","Package":"gotest","Test":"TestAdd","Output":"=== RUN TestAdd\n"} {"Time":"2019-02-28T15:46:50.423809+08:00","Action":"output","Package":"gotest","Test":"TestAdd","Output":"--- PASS: TestAdd (0.00s)\n"} {"Time":"2019-02-28T15:46:50.423809+08:00","Action":"pass","Package":"gotest","Test":"TestAdd","Elapsed":0} {"Time":"2019-02-28T15:46:50.4247922+08:00","Action":"output","Package":"gotest","Output":"PASS\n"} {"Time":"2019-02-28T15:46:50.4247922+08:00","Action":"output","Package":"gotest","Output":"TestMain tear-down.\n"} {"Time":"2019-02-28T15:46:50.4257754+08:00","Action":"output","Package":"gotest","Output":"ok \tgotest\t0.465s\n"} {"Time":"2019-02-28T15:46:50.4257754+08:00","Action":"pass","Package":"gotest","Elapsed":0.465}

-o <file>

-o 參數(shù)指定生成的二進(jìn)制可執(zhí)行程序,并執(zhí)行測(cè)試,測(cè)試結(jié)束不會(huì)刪除該程序。

沒有此參數(shù)時(shí),go test生成的二進(jìn)制可執(zhí)行程序存放到臨時(shí)目錄,執(zhí)行結(jié)束便刪除。

示例如下:

E:\OpenSource\GitHub\RainbowMango\GoExpertProgrammingSourceCode\GoExpert\src\gotest>go test -run TestAdd -o TestAdd TestMain setup. PASS TestMain tear-down. ok gotest 0.439s E:\OpenSource\GitHub\RainbowMango\GoExpertProgrammingSourceCode\GoExpert\src\gotest>TestAdd TestMain setup. PASS TestMain tear-down.

本例中,使用-o 參數(shù)指定生成二進(jìn)制文件"TestAdd"并存放到當(dāng)前目錄,測(cè)試執(zhí)行結(jié)束后,仍然可以直接執(zhí)行該二進(jìn)制程序。

控制測(cè)試的參數(shù)

-bench regexp

go test默認(rèn)不執(zhí)行性能測(cè)試,使用-bench參數(shù)才可以運(yùn)行,而且只運(yùn)行性能測(cè)試函數(shù)。

其中正則表達(dá)式用于篩選所要執(zhí)行的性能測(cè)試。如果要執(zhí)行所有的性能測(cè)試,使用參數(shù)"-bench ."或"-bench=."。

此處的正則表達(dá)式不是嚴(yán)格意義上的正則,而是種包含關(guān)系。

比如有如下三個(gè)性能測(cè)試:

  • func BenchmarkMakeSliceWithoutAlloc(b *testing.B)
  • func BenchmarkMakeSliceWithPreAlloc(b *testing.B)
  • func BenchmarkSetBytes(b *testing.B)

使用參數(shù)“-bench=Slice”,那么前兩個(gè)測(cè)試因?yàn)槎及?#34;Slice",所以都會(huì)被執(zhí)行,第三個(gè)測(cè)試則不會(huì)執(zhí)行。

對(duì)于包含子測(cè)試的場(chǎng)景下,匹配是按層匹配的。舉一個(gè)包含子測(cè)試的例子:

func BenchmarkSub(b *testing.B) {b.Run("A=1", benchSub1) b.Run("A=2", benchSub2) b.Run("B=1", benchSub3) }

測(cè)試函數(shù)命名規(guī)則中,子測(cè)試的名字需要以父測(cè)試名字做為前綴并以"/"連接,上面的例子實(shí)際上是包含4個(gè)測(cè)試:

  • Sub
  • Sub/A=1
  • Sub/A=2
  • Sub/B=1

如果想執(zhí)行三個(gè)子測(cè)試,那么使用參數(shù)“-bench Sub”。如果只想執(zhí)行“Sub/A=1”,則使用參數(shù)"-bench Sub/A=1"。如果想執(zhí)行"Sub/A=1"和“Sub/A=2”,則使用參數(shù)"-bench Sub/A="。

-benchtime <t>s

-benchtime指定每個(gè)性能測(cè)試的執(zhí)行時(shí)間,如果不指定,則使用默認(rèn)時(shí)間1s。

例如,執(zhí)定每個(gè)性能測(cè)試執(zhí)行2s,則參數(shù)為:"go test -bench Sub/A=1 -benchtime 2s"。

-cpu 1,2,4

-cpu 參數(shù)提供一個(gè)CPU個(gè)數(shù)的列表,提供此列表后,那么測(cè)試將按照這個(gè)列表指定的CPU數(shù)設(shè)置GOMAXPROCS并分別測(cè)試。

比如“-cpu 1,2”,那么每個(gè)測(cè)試將執(zhí)行兩次,一次是用1個(gè)CPU執(zhí)行,一次是用2個(gè)CPU執(zhí)行。 例如,使用命令"go test -bench Sub/A=1 -cpu 1,2,3,4" 執(zhí)行測(cè)試:

BenchmarkSub/A=1 1000 1256835 ns/op BenchmarkSub/A=1-2 2000 912109 ns/op BenchmarkSub/A=1-3 2000 888671 ns/op BenchmarkSub/A=1-4 2000 894531 ns/op

測(cè)試結(jié)果中測(cè)試名后面的-2、-3、-4分別代表執(zhí)行時(shí)GOMAXPROCS的數(shù)值。 如果GOMAXPROCS為1,則不顯示。

-count n

-count指定每個(gè)測(cè)試執(zhí)行的次數(shù),默認(rèn)執(zhí)行一次。

例如,指定測(cè)試執(zhí)行2次:

E:\OpenSource\GitHub\RainbowMango\GoExpertProgrammingSourceCode\GoExpert\src\gotest>go test -bench Sub/A=1 -count 2 TestMain setup. goos: windows goarch: amd64 pkg: gotest BenchmarkSub/A=1-4 2000 917968 ns/op BenchmarkSub/A=1-4 2000 882812 ns/op PASS TestMain tear-down. ok gotest 10.236s

可以看到結(jié)果中也將呈現(xiàn)兩次的測(cè)試結(jié)果。

如果使用-count指定執(zhí)行次數(shù)的同時(shí)還指定了-cpu列表,那么測(cè)試將在每種CPU數(shù)量下執(zhí)行count指定的次數(shù)。

注意,示例測(cè)試不關(guān)心-count和-cpu參數(shù),它總是執(zhí)行一次。

-failfast

默認(rèn)情況下,go test將會(huì)執(zhí)行所有匹配到的測(cè)試,并最后打印測(cè)試結(jié)果,無論成功或失敗。

-failfast指定如果有測(cè)試出現(xiàn)失敗,則立即停止測(cè)試。這在有大量的測(cè)試需要執(zhí)行時(shí),能夠更快的發(fā)現(xiàn)問題。

-list regexp

-list 只是列出匹配成功的測(cè)試函數(shù),并不真正執(zhí)行。而且,不會(huì)列出子函數(shù)。

例如,使用參數(shù)"-list Sub"則只會(huì)列出包含子測(cè)試的三個(gè)測(cè)試,但不會(huì)列出子測(cè)試:

E:\OpenSource\GitHub\RainbowMango\GoExpertProgrammingSourceCode\GoExpert\src\gotest>go test -list Sub TestMain setup. TestSubParallel TestSub BenchmarkSub TestMain tear-down. ok gotest 0.396s

-parallel n

指定測(cè)試的最大并發(fā)數(shù)。

當(dāng)測(cè)試使用t.Parallel()方法將測(cè)試轉(zhuǎn)為并發(fā)時(shí),將受到最大并發(fā)數(shù)的限制,默認(rèn)情況下最多有GOMAXPROCS個(gè)測(cè)試并發(fā),其他的測(cè)試只能阻塞等待。

-run regexp

跟據(jù)正則表達(dá)式執(zhí)行單元測(cè)試和示例測(cè)試。正則匹配規(guī)則與-bench 類似。

-timeout d

默認(rèn)情況下,測(cè)試執(zhí)行超過10分鐘就會(huì)超時(shí)而退出。

例時(shí),我們把超時(shí)時(shí)間設(shè)置為1s,由本來需要3s的測(cè)試就會(huì)因超時(shí)而退出:

E:\OpenSource\GitHub\RainbowMango\GoExpertProgrammingSourceCode\GoExpert\src\gotest>go test -timeout=1s TestMain setup. panic: test timed out after 1s

設(shè)置超時(shí)可以按秒、按分和按時(shí):

  • 按秒設(shè)置:-timeout xs或-timeout=xs
  • 按分設(shè)置:-timeout xm或-timeout=xm
  • 按時(shí)設(shè)置:-timeout xh或-timeout=xh

-v

默認(rèn)情況下,測(cè)試結(jié)果只打印簡(jiǎn)單的測(cè)試結(jié)果,-v 參數(shù)可以打印詳細(xì)的日志。

性能測(cè)試下,總是打印日志,因?yàn)槿罩居袝r(shí)會(huì)影響性能結(jié)果。

-benchmem

默認(rèn)情況下,性能測(cè)試結(jié)果只打印運(yùn)行次數(shù)、每個(gè)操作耗時(shí)。使用-benchmem則可以打印每個(gè)操作分配的字節(jié)數(shù)、每個(gè)操作分配的對(duì)象數(shù)。

// 沒有使用-benchmem BenchmarkMakeSliceWithoutAlloc-4 2000 971191 ns/op // 使用-benchmem BenchmarkMakeSliceWithoutAlloc-4 2000 914550 ns/op 4654335 B/op 30 allocs/op

此處,每個(gè)操作的含義是放到循環(huán)中的操作,如下示例所示:

func BenchmarkMakeSliceWithoutAlloc(b *testing.B) {for i := 0; i < b.N; i++ { gotest.MakeSliceWithoutAlloc() // 一次操作 } }

轉(zhuǎn)自:《Go專家編程》Go test 命令行參數(shù)

總結(jié)

以上是生活随笔為你收集整理的Go test 命令行参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。