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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go test 命令行参数

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

轉自:《Go專家編程》Go test 命令行參數

前言

go test有非常豐富的參數,一些參數用于控制測試的編譯,另一些參數控制測試的執行。

有關測試覆蓋率、vet和pprof相關的參數先略過,我們在討論相關內容時再詳細介紹。

控制編譯的參數

-args

指示go test把-args后面的參數帶到測試中去。具體的測試函數會跟據此參數來控制測試流程。

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

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

執行測試時帶入參數:

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

通過參數-args指定傳遞給測試的參數。

-json

-json 參數用于指示go test將結果輸出轉換成json格式,以方便自動化測試解析使用。

示例如下:

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 參數指定生成的二進制可執行程序,并執行測試,測試結束不會刪除該程序。

沒有此參數時,go test生成的二進制可執行程序存放到臨時目錄,執行結束便刪除。

示例如下:

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 參數指定生成二進制文件"TestAdd"并存放到當前目錄,測試執行結束后,仍然可以直接執行該二進制程序。

控制測試的參數

-bench regexp

go test默認不執行性能測試,使用-bench參數才可以運行,而且只運行性能測試函數。

其中正則表達式用于篩選所要執行的性能測試。如果要執行所有的性能測試,使用參數"-bench ."或"-bench=."。

此處的正則表達式不是嚴格意義上的正則,而是種包含關系。

比如有如下三個性能測試:

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

使用參數“-bench=Slice”,那么前兩個測試因為都包含"Slice",所以都會被執行,第三個測試則不會執行。

對于包含子測試的場景下,匹配是按層匹配的。舉一個包含子測試的例子:

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

測試函數命名規則中,子測試的名字需要以父測試名字做為前綴并以"/"連接,上面的例子實際上是包含4個測試:

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

如果想執行三個子測試,那么使用參數“-bench Sub”。如果只想執行“Sub/A=1”,則使用參數"-bench Sub/A=1"。如果想執行"Sub/A=1"和“Sub/A=2”,則使用參數"-bench Sub/A="。

-benchtime <t>s

-benchtime指定每個性能測試的執行時間,如果不指定,則使用默認時間1s。

例如,執定每個性能測試執行2s,則參數為:"go test -bench Sub/A=1 -benchtime 2s"。

-cpu 1,2,4

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

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

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

測試結果中測試名后面的-2、-3、-4分別代表執行時GOMAXPROCS的數值。 如果GOMAXPROCS為1,則不顯示。

-count n

-count指定每個測試執行的次數,默認執行一次。

例如,指定測試執行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

可以看到結果中也將呈現兩次的測試結果。

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

注意,示例測試不關心-count和-cpu參數,它總是執行一次。

-failfast

默認情況下,go test將會執行所有匹配到的測試,并最后打印測試結果,無論成功或失敗。

-failfast指定如果有測試出現失敗,則立即停止測試。這在有大量的測試需要執行時,能夠更快的發現問題。

-list regexp

-list 只是列出匹配成功的測試函數,并不真正執行。而且,不會列出子函數。

例如,使用參數"-list Sub"則只會列出包含子測試的三個測試,但不會列出子測試:

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

指定測試的最大并發數。

當測試使用t.Parallel()方法將測試轉為并發時,將受到最大并發數的限制,默認情況下最多有GOMAXPROCS個測試并發,其他的測試只能阻塞等待。

-run regexp

跟據正則表達式執行單元測試和示例測試。正則匹配規則與-bench 類似。

-timeout d

默認情況下,測試執行超過10分鐘就會超時而退出。

例時,我們把超時時間設置為1s,由本來需要3s的測試就會因超時而退出:

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

設置超時可以按秒、按分和按時:

  • 按秒設置:-timeout xs或-timeout=xs
  • 按分設置:-timeout xm或-timeout=xm
  • 按時設置:-timeout xh或-timeout=xh

-v

默認情況下,測試結果只打印簡單的測試結果,-v 參數可以打印詳細的日志。

性能測試下,總是打印日志,因為日志有時會影響性能結果。

-benchmem

默認情況下,性能測試結果只打印運行次數、每個操作耗時。使用-benchmem則可以打印每個操作分配的字節數、每個操作分配的對象數。

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

此處,每個操作的含義是放到循環中的操作,如下示例所示:

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

轉自:《Go專家編程》Go test 命令行參數

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野结衣亚洲一区 | 亚洲精品美女久久久 | 国产一区二区亚洲 | 日本激情一区 | 一区国产精品 | 99ri视频 | 最新国产视频 | 精品一区二区三区在线视频 | 欧美一区二区三区激情视频 | 精品国产免费看 | 天天免费看av | 青草视频在线观看免费 | 国产精品久久久久久久久毛片 | 国产做爰全免费的视频软件 | 国产亚洲欧洲 | 欧美日韩v| 精品国产欧美日韩 | 一区二区三区日韩在线 | 精品三级av | 日韩av第一页| 免费毛片一区二区三区久久久 | 亚洲欧美日韩国产一区二区三区 | 在线免费观看一区二区三区 | 亚洲va在线 | 在线无码va中文字幕无码 | 毛片毛片毛片毛片毛片毛片 | 51吃瓜网今日吃瓜 | 少妇又紧又深又湿又爽视频 | 成人国产一区 | 毛片一二三区 | 久久青娱乐 | 嫩草在线视频 | 国产精品系列在线播放 | 成人午夜免费电影 | www.玖玖玖 | 91在线一区二区 | 在线观看你懂的网址 | 免费污污视频在线观看 | 午夜视频91 | 3d动漫精品啪啪一区二区三区免费 | 丁香亚洲 | 中文字幕一区二区在线视频 | 中文字幕在线免费视频 | 成都电影免费大全 | 精品一区在线视频 | 久久99国产精品久久99 | 奴性女会所调教 | 日批视频免费在线观看 | 国产又色又爽又黄 | 日韩精品免费在线视频 | 成人免费视频网站 | 在线黄色网| 91高清免费 | 亚洲蜜臀av一区二区三区 | 色小姐综合网 | 国产免费一区二区三区网站免费 | 男人私人影院 | 91丝袜美腿 | 国产男女视频 | 成人一区二区三区在线观看 | 秘密基地动漫在线观看免费 | 国产av人人夜夜澡人人爽麻豆 | 黄色的网站免费看 | 婷婷久久久久久 | 人妖粗暴刺激videos呻吟 | 黄色免费高清 | h片在线观看网站 | 高潮一区二区三区乱码 | 人人人超碰 | 国产精品美女www | 亚洲天堂99 | 鲁鲁狠狠狠7777一区二区 | 国产又粗又猛又黄又爽视频 | 国产一级大片在线观看 | 天天av网 | 国产丰满大乳奶水在线视频 | 精品麻豆视频 | 日本久久久久 | 九九视频免费观看 | 无码少妇一区二区三区芒果 | 欧美黑人一级爽快片淫片高清 | 天堂在线精品视频 | av先锋影音 | 99re免费视频 | 麻豆视频网站 | 国产99re| 五月婷婷色 | 精品国产乱码一区二 | 欧美日韩国产区 | 国产大学生自拍视频 | 中文字幕乱码人妻无码久久 | 亚洲一区二区 | 国产xxxxwwww | 91色综合 | 亚洲国产一二 | av色在线观看 | 老司机深夜影院 | 欧美三个黑人玩3p | 好色成人网|