Jacoco踩坑過程

引論

之前一直想做這個(gè)覆蓋率來(lái)著霉颠,年初的時(shí)候,大佬就說(shuō)這個(gè)要做起來(lái)荆虱。
對(duì)于測(cè)試來(lái)說(shuō),覆蓋率是繞不過去的朽们。分為需求覆蓋率怀读,代碼覆蓋率。

需求覆蓋:指的是測(cè)試人員對(duì)需求的了解程度骑脱,根據(jù)需求的可測(cè)試性來(lái)拆分成各個(gè)子需求點(diǎn)菜枷,來(lái)編寫相應(yīng)的測(cè)試用例,最終建立一個(gè)需求和用例的映射關(guān)系叁丧,以用例的測(cè)試結(jié)果來(lái)驗(yàn)證需求的實(shí)現(xiàn)啤誊,可以理解為黑盒覆蓋。

代碼覆蓋:為了更加全面的覆蓋拥娄,我們可能還需要理解被測(cè)程序的邏輯蚊锹,需要考慮到每個(gè)函數(shù)的輸入與輸出,邏輯分支代碼的執(zhí)行情況稚瘾,這個(gè)時(shí)候我們的測(cè)試執(zhí)行情況就以代碼覆蓋率來(lái)衡量牡昆,可以理解為白盒覆蓋。

一個(gè)是我們的業(yè)務(wù)能力摊欠,一個(gè)是我們的技術(shù)能力丢烘。

JAVA代碼覆蓋率工具JaCoCo-原理篇 >> jacoco原理篇參考

原理

看完原理篇就會(huì)發(fā)現(xiàn),似乎是一個(gè)單元測(cè)試的工具些椒。
那我們首先就從原理上自己試試播瞳。然后打開IDE自己去寫寫demo。


demo

單元測(cè)試覆蓋率達(dá)到70%

image.png

然后發(fā)現(xiàn)免糕,只能開發(fā)單測(cè)寫全了赢乓,是不是就沒我們什么事了
但這是一個(gè)誤區(qū)忧侧,為什么呢。
有句諺語(yǔ):條條大路通羅馬骏全。
開發(fā)寫的單測(cè)是一個(gè)方式苍柏,我們走需求覆蓋,接口覆蓋也是另外一個(gè)方式姜贡。

第一步试吁,啟動(dòng)服務(wù)

方案:on-the-fly模式+ant dump+Jenkins jacoco plugs插件

On-the-fly插樁:

JVM中通過-javaagent參數(shù)指定特定的jar文件啟動(dòng)Instrumentation的代理程序,代理程序在通過Class Loader裝載一個(gè)class前判斷是否轉(zhuǎn)換修改class文件楼咳,將統(tǒng)計(jì)代碼插入class熄捍,測(cè)試覆蓋率分析可以在JVM執(zhí)行測(cè)試代碼的過程中完成。

Jenkins 配置拉源碼母怜,ant dump exec文件余耽,生成報(bào)告。

服務(wù)上我結(jié)合了docker
以我demo為例
這是dockerfile文件

FROM registry.cn-hangzhou.aliyuncs.com/mzdeveloper/base_jdk8
# 將targer目錄下的jar包復(fù)制到docker容器/home/springboot目錄下面目錄下面
ENV APP_NAME=demo
ENV C_ENVIRONMENT="dev"
ENV JAVA_OPTS="-server"
ENV PROFILE=docker

COPY ./${APP_NAME}.jar /data/${APP_NAME}.jar
COPY ./jacocoagent.jar /tmp/jacocoagent.jar

#帶java agnet參數(shù)運(yùn)行java -jar命令苹熏,注意address要寫0.0.0.0
ENTRYPOINT exec java -javaagent:/tmp/jacocoagent.jar=includes=*,output=tcpserver,port=6305,address=0.0.0.0 $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=${PROFILE} -jar /data/${APP_NAME}.jar
EXPOSE 8080
EXPOSE 6305

build完之后碟贾,推到harbor,嫌麻煩直接本機(jī)啟動(dòng)轨域。

docker run -d -p 8081:8080 -p 6305:6305 demo:1.1

啟動(dòng)完畢袱耽,用接口跑跑看看正常不。


postman調(diào)用

配置Jenkins

安裝步驟的啥的就不說(shuō)了
插件要下載

  • git
  • maven
  • jacoco

新建一個(gè)自由風(fēng)格
記得先去添加git憑證
我這邊用的gitee


拉代碼的配置
maven和ant
jacocoexecPath=$WORKSPACE/coverage/promotion.exec
reportfolderPath=$WORKSPACE/coverage/report
server_ip=your_server
server_port=6305

build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="wftestReport" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">
    <!--Jacoco 的安裝路徑-->
    <property name="jacocoantPath" value="/var/jenkins_home/jacoco/jacocoant.jar"/>
    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
        <classpath path="${jacocoantPath}" />
    </taskdef>

    <!--dump 任務(wù):
        根據(jù)前面配置的 ip 地址干发,和端口號(hào)朱巨,
        訪問目標(biāo) Tomcat 服務(wù),并生成 .exec 文件枉长。-->
    <target name="dump">
        <jacoco:dump address="${server_ip}" reset="false" destfile="${jacocoexecPath}" port="${server_port}" append="true"/>
    </target>
</project>
配置jacoco

以上Jenkins構(gòu)建配置

最終效果

這個(gè)過程不是那么容易弄冀续。我也是解決了很多問題才可以的。

以下記錄主要問題

FAQ

  1. mvn 失敗
    我Jenkins也是docker構(gòu)建的必峰。既然找不到mvn那我們自己裝上去就可以了
    主要是要在Jenkins shell里面加上
    source /etc/profile

  2. ant識(shí)別的時(shí)候 server_port問題
    注意是否打開了端口

  3. classPath怎么來(lái)的
    由于jacoco特性洪唐,我們必須要有源碼,也就是target下的class
    所以配置上我們也需要源碼上的 src 和 class吼蚁,加mvn正是如此
    才能生成報(bào)告

參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末桐罕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子桂敛,更是在濱河造成了極大的恐慌功炮,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件术唬,死亡現(xiàn)場(chǎng)離奇詭異薪伏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)粗仓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門嫁怀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)设捐,“玉大人,你說(shuō)我怎么就攤上這事塘淑÷苷校” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵存捺,是天一觀的道長(zhǎng)槐沼。 經(jīng)常有香客問我,道長(zhǎng)捌治,這世上最難降的妖魔是什么岗钩? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮肖油,結(jié)果婚禮上兼吓,老公的妹妹穿的比我還像新娘。我一直安慰自己森枪,他們只是感情好视搏,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著县袱,像睡著了一般凶朗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上显拳,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音搓萧,去河邊找鬼杂数。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瘸洛,可吹牛的內(nèi)容都是我干的揍移。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼反肋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼那伐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起石蔗,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤罕邀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后养距,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诉探,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年棍厌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肾胯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竖席。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敬肚,靈堂內(nèi)的尸體忽然破棺而出毕荐,到底是詐尸還是另有隱情,我是刑警寧澤艳馒,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布憎亚,位于F島的核電站,受9級(jí)特大地震影響鹰溜,放射性物質(zhì)發(fā)生泄漏虽填。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一曹动、第九天 我趴在偏房一處隱蔽的房頂上張望斋日。 院中可真熱鬧,春花似錦墓陈、人聲如沸恶守。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)兔港。三九已至,卻和暖如春仔拟,著一層夾襖步出監(jiān)牢的瞬間衫樊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工利花, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留科侈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓炒事,卻偏偏與公主長(zhǎng)得像臀栈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挠乳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 測(cè)試覆蓋率 測(cè)試覆蓋率是對(duì)測(cè)試完全程度的評(píng)測(cè)权薯。測(cè)試覆蓋率是由測(cè)試需求和測(cè)試用例的覆蓋或已執(zhí)行代碼的覆蓋的表示結(jié)果。...
    android老男孩閱讀 45,868評(píng)論 2 15
  • 白盒測(cè)試又稱結(jié)構(gòu)測(cè)試睡扬、透明盒測(cè)試盟蚣、邏輯驅(qū)動(dòng)測(cè)試或基于代碼的測(cè)試。白盒測(cè)試是一種測(cè)試用例設(shè)計(jì)方法卖怜,盒子指的是...
    yongliu1229閱讀 2,747評(píng)論 0 4
  • 背景 為了打通測(cè)試和開發(fā)界限刁俭,更好的保證產(chǎn)品質(zhì)量,我們決定在黑盒測(cè)試的場(chǎng)景下分析代碼的覆蓋率情況韧涨,從而分析我們現(xiàn)有...
    朱端的一坨閱讀 3,109評(píng)論 0 3
  • Java Jacoco Ant Maven 針對(duì) Jacoco[http://www.eclemma.org/ja...
    納愛斯閱讀 53,527評(píng)論 64 52
  • 目錄:1.序言2.job的基本配置---2.1 源碼管理---2.2 構(gòu)建命令配置---2.3 構(gòu)建觸發(fā)配置(何時(shí)...
    Kevin老師不遲到閱讀 10,070評(píng)論 3 15