這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)怎么進(jìn)行圖數(shù)據(jù)庫(kù) Nebula Graph 的代碼變更測(cè)試覆蓋率實(shí)踐,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)專注于陽(yáng)谷網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供陽(yáng)谷營(yíng)銷型網(wǎng)站建設(shè),陽(yáng)谷網(wǎng)站制作、陽(yáng)谷網(wǎng)頁(yè)設(shè)計(jì)、陽(yáng)谷網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造陽(yáng)谷網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供陽(yáng)谷網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

對(duì)于一個(gè)持續(xù)開(kāi)發(fā)的大型工程而言,足夠的測(cè)試是保證軟件行為符合預(yù)期的有效手段,而不是僅僅依靠 code review 或者開(kāi)發(fā)者自己的技術(shù)素質(zhì)。測(cè)試的編寫(xiě)理想情況下應(yīng)該完全定義軟件的行為,但是通常情況都是很難達(dá)到這樣理想的程度。而測(cè)試覆蓋率就是檢驗(yàn)測(cè)試覆蓋軟件行為的情況,通過(guò)檢查測(cè)試覆蓋情況可以幫助開(kāi)發(fā)人員發(fā)現(xiàn)沒(méi)有被覆蓋到的代碼。
Nebula Graph 主要是由 C++ 語(yǔ)言開(kāi)發(fā)的,支持大部分 Linux 環(huán)境以及 gcc/clang 編譯器,所以通過(guò)工具鏈提供的支持,我們可以非常方便地統(tǒng)計(jì)Nebula Graph的測(cè)試覆蓋率。
gcc/clang 都支持 gcov 式的測(cè)試覆蓋率功能,使用起來(lái)也是非常簡(jiǎn)單的,主要有如下幾個(gè)步驟:
添加編譯選項(xiàng) --coverage -O0 -g
添加鏈接選項(xiàng) --coverage
運(yùn)行測(cè)試
使用 lcov,整合報(bào)告,例如 lcov --capture --directory . --output-file coverage.info
去掉外部代碼統(tǒng)計(jì),例如 lcov --remove coverage.info '*/opt/vesoft/*' -o clean.info
到這里測(cè)試覆蓋信息已經(jīng)搜集完畢,接下可以通過(guò) genhtml 這樣的工具生成 html,然后通過(guò)瀏覽器查看測(cè)試覆蓋率,如下圖所示:

但是這樣是非常不方便的,因?yàn)樵诔掷m(xù)的開(kāi)發(fā)過(guò)程,如果每次都要手動(dòng)進(jìn)行這樣一套操作,那必然帶來(lái)極大的人力浪費(fèi),所以現(xiàn)在的常用做法是將測(cè)試覆蓋率寫(xiě)入 CI 并且和第三方平臺(tái)(比如 Codecov, Coveralls)集成,這樣開(kāi)發(fā)人員完全不必關(guān)心測(cè)試覆蓋信息的收集整理和展示問(wèn)題,只需要發(fā)布代碼后直接到第三方平臺(tái)上查看覆蓋情況即可,而且現(xiàn)在的第三方平臺(tái)也支持直接在 PR 上評(píng)論覆蓋情況使得查看覆蓋率的變更情況更加方便。
現(xiàn)在主流的 CI 平臺(tái)非常多,比如 Travis, azure-pipelines 以及 GitHub Action 等。Nebula Graph 選用的是 GitHub Action,對(duì)于 Action 我們?cè)谥暗? 《使用 Github Action 進(jìn)行前端自動(dòng)化發(fā)布》這篇文章里已經(jīng)做過(guò)介紹。
而 GitHub Action 相對(duì)于其他 CI 平臺(tái)來(lái)說(shuō),有和 GitHub 集成更好,Action 生態(tài)強(qiáng)大簡(jiǎn)潔易用以及支持相當(dāng)多的操作系統(tǒng)和 CPU 等優(yōu)勢(shì)。Nebula Graph 有關(guān)測(cè)試覆蓋的 CI 腳本片段如下所示:
- name: CMake with Coverage if: matrix.compiler == 'gcc-9.2' && matrix.os == 'centos7' run: | cmake -DENABLE_COVERAGE=ON -B build/
可以看到這里我們將前文介紹的 coverage 相關(guān)的編譯選項(xiàng)通過(guò)一個(gè) cmake option 進(jìn)行管理,這樣可以非常方便地啟用和禁止 coverage 信息的收集。比如在開(kāi)發(fā)人員在正常的開(kāi)發(fā)編譯測(cè)試過(guò)程中通常不會(huì)開(kāi)啟這項(xiàng)功能以避免編譯測(cè)試運(yùn)行的額外開(kāi)銷。
- name: Testing Coverage Report working-directory: build if: success() && matrix.compiler == 'gcc-9.2' && matrix.os == 'centos7' run: | set -e /usr/local/bin/lcov --version /usr/local/bin/lcov --capture --gcov-tool $GCOV --directory . --output-file coverage.info /usr/local/bin/lcov --remove coverage.info '*/opt/vesoft/*' -o clean.info bash <(curl -s https://codecov.io/bash) -Z -f clean.info
這里主要是測(cè)試報(bào)告的收集、合并以及上傳到第三方平臺(tái),這個(gè)在前文中已經(jīng)比較詳細(xì)地?cái)⑹鲞^(guò),CI 的運(yùn)行情況如下圖所示:

Nebula Graph 選擇的測(cè)試覆蓋平臺(tái)是 Codecov——一個(gè)測(cè)試結(jié)果分析工具,對(duì)于 GitHub Action 而言,主要是在 CI 中執(zhí)行上述的測(cè)試覆蓋信息搜集腳本以及將最終的測(cè)試覆蓋文件上傳到 Codecov平臺(tái)。
這里用戶給自己的 repo 注冊(cè) Codecov 后可以獲取一個(gè)訪問(wèn)的 token,通過(guò)這個(gè) token 和 Codecov 的 API 可以將測(cè)試覆蓋文件上傳到 Codecov 這個(gè)平臺(tái)上,具體的 API 可以參考 https://docs.codecov.io/reference#upload ,除了上傳報(bào)告外還有列出 pr,commit 等 API 可以讓用戶開(kāi)發(fā)自己的 bot 做一些自動(dòng)化的工具,然后就可查看各種測(cè)試覆蓋的信息,比如 Nebula Graph 的測(cè)試覆蓋情況可以查看 https://codecov.io/gh/vesoft-inc/nebula 。
比如可以通過(guò)這個(gè)餅狀圖查看不同目錄代碼的覆蓋情況:

也可以點(diǎn)開(kāi)一個(gè)具體的文件,查看哪些行被覆蓋那些行沒(méi)有被覆蓋:

當(dāng)然我們一般不會(huì)直接使用 Codecov 的 API,而是使用他提供的一個(gè) cli 工具,比如上傳報(bào)告使用 bash <(curl -s https://codecov.io/bash) -Z -t <token> -f clean.info ,這里的 token 就是 Codecov 提供的認(rèn)證 token,一般來(lái)說(shuō)作為環(huán)境變量 CODECOV_TOKEN 使用,而不是輸入明文。
通過(guò)上述操作呢就可以在 Codecov 平臺(tái)上查看你的工程的測(cè)試覆蓋情況,并且可以看到每次 pr 增加減少了多少覆蓋率,方便逐漸提高測(cè)試覆蓋率。最后的話還可以在你的 README 上貼上 Codecov 提供的測(cè)試覆蓋率 badge,就像 Nebula Graph 一樣: https://github.com/vesoft-inc/nebula。

本文中如有錯(cuò)誤或疏漏歡迎去 GitHub:
https://github.com/vesoft-inc/nebula issue 區(qū)向我們提 issue 或者前往官方論壇:
https://discuss.nebula-graph.com.cn/ 的 建議反饋 分類下提建議 ????;加入 Nebula Graph 交流群,請(qǐng)聯(lián)系 Nebula Graph 官方小助手微信號(hào):
NebulaGraphbot
應(yīng)用 AddressSanitizer 發(fā)現(xiàn)程序內(nèi)存錯(cuò)誤
Github Statistics 一個(gè)基于 React 的 GitHub 數(shù)據(jù)統(tǒng)計(jì)工具
作者有話說(shuō):Hi,我是 shylock,是 Nebula Graph 的研發(fā)工程師,希望本文對(duì)你有所幫助,如果有錯(cuò)誤或不足也請(qǐng)與我交流,不甚感激!
聲明:本文采用 CC BY-NC-ND 4.0 協(xié)議進(jìn)行授權(quán) 署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際
上述就是小編為大家分享的怎么進(jìn)行圖數(shù)據(jù)庫(kù) Nebula Graph 的代碼變更測(cè)試覆蓋率實(shí)踐了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
標(biāo)題名稱:怎么進(jìn)行圖數(shù)據(jù)庫(kù)NebulaGraph的代碼變更測(cè)試覆蓋率實(shí)踐
轉(zhuǎn)載來(lái)源:http://www.yijiale78.com/article28/gipocp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、ChatGPT、云服務(wù)器、域名注冊(cè)、網(wǎng)站收錄、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)