中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言系統測試覆蓋率收集利器goc怎么用

發布時間:2021-10-12 13:41:34 來源:億速云 閱讀:238 作者:柒染 欄目:云計算

這篇文章將為大家詳細講解有關 go語言系統測試覆蓋率收集利器goc怎么用,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

工程效能領域,測試覆蓋率度量總是繞不開的話題,我們也不例外。在七牛云,我們主要使用go語言構建云服務,在考慮系統測試覆蓋率時,最早也是通過圍繞原生go test -c -cover的能力來構建。且我們已經做了很多自動化工作,能夠針對很多類型的代碼庫,自動插樁服務,自動生成TestMain()等方法,但隨著接入項目越來越多,以及后面使用場景的不斷復雜化,我們發現這套方案還是有其先天局限,會讓后面越來越難受:

  • 程序必須關閉才能收集覆蓋率。如果將這套系統僅定位在收集覆蓋率數據上,這個痛點倒也能忍受。但是如果想進一步做精準測試等方向,就很受局限。

  • 因為不想污染被測代碼庫,我們采取了自動化的方式,在編譯階段給每個服務生成類似main_test.go文件。但這種方式,其最難受的地方在于flag的處理,要知道go test命令本身會調用flag.Parse方法,所以這里需要自動化的修改源碼,保證被測程序的flag定義,要先于go test調用flag.Parse之前。但是,隨著程序自己使用flag姿勢的復雜化,我們發現越來越難有通用方案來處理這些flag,有點難受。

  • 受限于 go test-c命令的先天缺陷,它會給被測程序注入一些測試專屬的flag,比如-test.coverprofile, -test.timeout等等。這個是最難受的,因為它會破壞被測程序的啟動姿勢。我們知道系統測試面對是完整被測集群,如果你需要專門維護一套測試集群來做覆蓋率收集時,就會顯得非常浪費。好鋼就應該用在刀刃上,在七牛云,我們倡導極客文化,追求用工程師思維解決重復問題,而作為業務效率部門,我們自己更應該走在前列。

也是因為以上的種種考量,我們內部一直在優化這一套系統,到今天這一版,我們已從架構和實現原理上完成了顛覆,能夠做到無損插樁,運行時分析覆蓋率,當屬非常優雅。

Goc - A Comprehensive Coverage Testing System for The Go Programming Language

一圖勝千言:

go語言系統測試覆蓋率收集利器goc怎么用

使用 goc run.的姿勢直接運行被測程序,就能在運行時,通過 goc profile命令方便的得到覆蓋率結果。是不是很神奇?是不是很優雅?

這個系統就是goc, 設計上希望完全兼容go命令行工具核心命令(go build/install/run)。使用體驗上,也希望向go命令行工具靠攏。以下是goc 1.0版本支持的功能:

系統測試覆蓋率收集方案

有了goc,我們再來看如何收集go語言系統測試覆蓋率。整體比較簡單,大體只需要三步:

  • 首先通過 goc server命令部署一個服務注冊中心,它將會作為樞紐服務跟所有的被測服務通信。

  • 使用 goc build--center="<server>" 命令編譯被測程序。goc不會破壞被測程序的啟動方式,所以你可以直接將編譯出的二進制發布到集成測試環境。

  • 環境部署好之后,就可以做執行任意的系統測試。而在測試期間,可以在任何時間,通過 goc profile--center="<server>"拿到當前被測集群的覆蓋率結果。

是不是很優雅?

goc 核心原理及未來

goc在設計上,拋棄老的 go test-c-cover模式,而是直接與 go tool cover工具交互,避免因 go test命令引入的一系列弊端。goc同樣沒有選擇自己做插樁,也是考慮go語言的兼容性,以及性能問題,畢竟 go tool cover工具,原生采用結構體來定義counter收集器,每個文件都有單獨的結構體,性能相對比較可靠。goc旨在做go語言領域綜合性的覆蓋率工具以及精準測試系統,其還有很長的路要走:

  • 基于PR的單測/集測/系統覆蓋率增量分析

  • 精準測試方向,有一定的產品化設計體驗,方便研發與測試日常使用

  • 擁抱各種CICD系統

關于 go語言系統測試覆蓋率收集利器goc怎么用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乡县| 始兴县| 南漳县| 田东县| 明溪县| 新巴尔虎右旗| 阿尔山市| 宁城县| 福泉市| 上犹县| 通渭县| 乌拉特后旗| 磐安县| 澄迈县| 三门县| 仪陇县| 宾阳县| 会同县| 平顶山市| 高碑店市| 伊春市| 阜城县| 阳城县| 寿宁县| 新乐市| 图木舒克市| 长治县| 略阳县| 洛宁县| 灵丘县| 错那县| 苍山县| 麦盖提县| 名山县| 晋中市| 拉孜县| 都匀市| 高平市| 贵南县| 公主岭市| 开远市|