1凉夯、平臺(tái)架構(gòu)
2口予、流程
服務(wù)插樁及部署
Go為編譯時(shí)插樁,采用goc的開源方案https://github.com/qiniu/goc,goc底層是基于go原生工具go tool cover來實(shí)現(xiàn)插樁袍辞,在此基礎(chǔ)上封裝了agent服務(wù)贸宏,運(yùn)行在單獨(dú)的協(xié)程中造寝,實(shí)現(xiàn)不停服采集覆蓋率數(shù)據(jù),同時(shí)還有一套注冊(cè)中心服務(wù)管理多個(gè)agent吭练,適合于分布式服務(wù)場(chǎng)景下的測(cè)試覆蓋率采集诫龙。
Java 為啟動(dòng)時(shí)插樁,采用原生的jacoco方案https://zhuanlan.zhihu.com/p/410955562鲫咽,修改class字節(jié)碼達(dá)到插樁目的签赃,jacocoagent采集上報(bào),注意依賴的jacocoagent.jar包需要提前打包到所部署的服務(wù)器中分尸。
2. 覆蓋率數(shù)據(jù)采集與報(bào)告生成
Go和Java分別通過goc和jacoco工具指令來采集覆蓋率锦聊,并通過輔助工具將采集到的覆蓋率數(shù)據(jù)轉(zhuǎn)換為便于分析的xml格式。java生成report的時(shí)候箩绍,除源碼外還需要提供編譯產(chǎn)物的classfile孔庭。
3. 覆蓋率數(shù)據(jù)合并與報(bào)告生成
每次采集數(shù)據(jù)生成原始報(bào)告后,會(huì)依據(jù)代碼倉(cāng)庫(kù)的commitid來存儲(chǔ)報(bào)告數(shù)據(jù)材蛛,同一個(gè)commid的數(shù)據(jù)會(huì)做合并圆到。最終根據(jù)用戶界面上指定的報(bào)告配置,合并多個(gè)commid的數(shù)據(jù)生成summary報(bào)告
增量覆蓋率是依據(jù)git diff的結(jié)果找出增量行卑吭,基線版本由用戶指定芽淡,然后結(jié)合已計(jì)算出的全量覆蓋率報(bào)告數(shù)據(jù),就可以得到增量覆蓋率豆赏。
4. 后記
基于代碼版本覆蓋率數(shù)據(jù)合并的方法挣菲,在與標(biāo)準(zhǔn)流水線打通后,還可實(shí)現(xiàn)功能測(cè)試和自動(dòng)化覆蓋率報(bào)告的分別生成河绽,具體方法和流程下回分析己单。