欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程语言 > java >内容正文

java

持续集成java覆盖率合并 -凯发ag旗舰厅登录网址下载

发布时间:2025/1/21 java 18 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 持续集成java覆盖率合并 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

为什么80%的码农都做不了架构师?>>>   

原来:

后来:(丑了点,但是链接进去和上图中三个一样,但直观明了)

#! /usr/bin/python # -*- coding: utf8 -*-import os import re import sys import datetime''' @author     :   u{peterguo} @凯发ag旗舰厅登录网址下载 copyright  :   tencent @date       :   2014-03-24 @version    :   1.0.0.0 @desc       :   1.统计当前目录下的覆盖率报表2.如果存在多份报表,则合并生成一个简单的总表3.支持java项目(c 后续支持)@note           1.生成的覆盖率总表为./coverage_report/index.html 点击链接失败则是因为相对路径问题4.调用时请配合如下shell脚本进行strparam=""for item in `find . -name "frame-summary.html"`dosubprjname=`echo $item | awk -f"/" '{print $2}'`strparam="$strparam $subprjname:$item"donepython ~/bin/merge_cov.py $strparam '''def recursivelistlocdir(strpath, topdown = true):'''递归扫描目录下的所有文件'''vret = []for root, dirs, files in os.walk(strpath, topdown):for name in files:vret.append(os.path.join(root, name))for name in dirs:vret.append(os.path.join(root, name)   "/")return vretclass covdata(object):'''项目覆盖率 java使用:mvn cobertura:cobertura cpp使用:gcov'''    def __init__(self, strprojectname, strhtmlfilepath):'''strhtmlfilepath: c  : index.htmljava: frame-summary.html'''self.projectmame = strprojectname                           #项目名,按照目录级别获取self.strhtmlfilepath = strhtmlfilepath                      #记录下原始html,以便拼接链接self.strtime = datetime.datetime.now().strftime("%y-%m-%d %h:%m:%s")   #生成时间self.strtype = {"index.html":"cpp", "frame-summary.html":"java"}[os.path.basename(strhtmlfilepath)]if self.strtype == "cpp":lret = covdata.getcppcovindexhtml(strhtmlfilepath)if self.strtype == "java":lret = covdata.getjavacov(strhtmlfilepath)self.dlines  = {"hit":lret[0], "total":lret[1], "cov":100.0*lret[0]/(lret[1] 0.0001)}self.dbranch = {"hit":lret[2], "total":lret[3], "cov":100.0*lret[2]/(lret[3] 0.0001)}def showresult(self):'''按照一定格式打印出来'''print self.projectmame, self.strtime, self.strtype, str(self.dlines), str(self.dbranch)@staticmethoddef getcppcovindexhtmlold(strhtmlfilepath):'''index.html'''vpath = strhtmlfilepath.split(os.sep)covdata = covdata()covdata.projectmame = vpath[-2] cov_re = r"(\d [\.]\d )"f = open(strhtmlfilepath, 'r')html_text = f.read()cov_list = re.findall(cov_re,html_text)#行覆盖率covdata.strlinescov = str(cov_list[0][1])#函数覆盖率covdata.strfunccov = str(cov_list[1][1])#分支覆盖率covdata.strbranchcov = str(cov_list[2][1])cov_re = r"(\d )"hit_total_list = re.findall(cov_re,html_text)covdata.strlineshit = str(hit_total_list[0])covdata.strlinestotal = str(hit_total_list[1])covdata.strfunchit = str(hit_total_list[2])covdata.strfunctotal = str(hit_total_list[3])covdata.strbranchhit = str(hit_total_list[4])covdata.strbranchtotal = str(hit_total_list[5])cov_re = r"(\d [-]\d [-]\d )"time_list = re.findall(cov_re,html_text)#时间covdata.strtime = (time_list[0])return covdata@staticmethod      def getcppcovindexhtml(strhtmlfilepath):'''index.html'''fp = open(strhtmlfilepath, 'r')strcovhtml = fp.read()fp.close()#c 覆盖率直接可以获取,如下代码备用lobj = re.findall(r"(\d [\.]\d )", strcovhtml)flinescov = float(str(lobj[0][1]))ffunccov = float(str(lobj[1][1]))fbranchcov = float(str(lobj[2][1]))lobj = re.findall(r"(\d )", strcovhtml)nlineshit, nlinestotal   = int(str(lobj[0])), int(str(lobj[1]))nfunchit, nfunctotal     = int(str(lobj[2])), int(str(lobj[3]))nbranchhit, nbranchtotal = int(str(lobj[4])), int(str(lobj[5]))#考虑到项目一般关注行覆盖率和分支覆盖率,这里忽略函数覆盖率return nlineshit, nlinestotal, nbranchhit, nbranchtotal@staticmethod  def getjavacov(strhtmlfilepath):'''frame-summary.html'''fp = open(strhtmlfilepath, 'r')strcovhtml = fp.read()fp.close()lobj = re.findall('''span class="text">[0-9]{1,}/[0-9]{1,}''', strcovhtml) ltmp = re.split("[>/']", str(lobj[0:2]))nlinehit, nlinestotal = int(ltmp[2]), int(ltmp[3]), nbranchhit, nbranchtotal = int(ltmp[6]), int(ltmp[7])flineper = nlinehit * 100.0 / nlinestotalfbranper = nbranchhit * 100.0 / nbranchtotal#考虑到项目一般关注行覆盖率和分支覆盖率,这里忽略函数覆盖率return nlinehit, nlinestotal, nbranchhit, nbranchtotal@staticmethoddef dumpcov(locov, strtargethtml):'''拼接一个简单的html页面,里面带链接,可以跳转到真正的html覆盖率报表'''nlineshit, nlinestotal, nbranchhit, nbranchtotal = 0, 0, 0, 0print "\nmerging ... into.......... ", strtargethtml   #生成html总报表 strreporthead = '''覆盖率报告模块名称hit/total(行)行覆盖率hit/total(分支)分支覆盖率'''strreporttail = '''''' strreportrowfmt = '''%s%d/%d%.3f%%%d/%d%.3f%%'''fp = file(strtargethtml, "wt") fp.write(strreporthead)for ocovdata in locov:ocovdata.showresult()nlineshit    = ocovdata.dlines["hit"]nlinestotal  = ocovdata.dlines["total"]            nbranchhit   = ocovdata.dbranch["hit"]            nbranchtotal = ocovdata.dbranch["total"]          #模块覆盖率情况strsourcefilename = ocovdata.strhtmlfilepathstrrow = strreportrowfmt % (ocovdata.projectmame, ocovdata.dlines["hit"], ocovdata.dlines["total"], "." strsourcefilename, ocovdata.dlines["cov"], \ocovdata.dbranch["hit"], ocovdata.dbranch["total"], "." strsourcefilename, ocovdata.dbranch["cov"] )fp.write(strrow)  flinescov   = 100.0 * nlineshit / (nlinestotal   0.0001)fbranchcov  = 100.0 * nbranchhit / (nbranchtotal   0.0001)#总体覆盖率情况strsourcefilename = strtargethtmlstrrow = strreportrowfmt % ("汇总", nlineshit, nlinestotal, "." strsourcefilename, flinescov, nbranchhit, nbranchtotal, "." strsourcefilename, fbranchcov)fp.write(strrow) fp.write(strreporttail)fp.close()print "summary: ", nlineshit, nlinestotal, flinescov, nbranchhit, nbranchtotal, fbranchcov@staticmethoddef mergecov(lparams, strtargetindexhtml):locov = []    for strparm in sys.argv[1:]:strprojectname, strcovhtml = strparm.split(":")ocovdata = covdata(strprojectname, strcovhtml)ocovdata.showresult()            locov.append(ocovdata)        covdata.dumpcov(locov, strtargetindexhtml)def usage(strscriptname):print "usage: python %s proj1:./abc/def/index.html proj2:./aab/def/index.html" % strscriptnameprint "exam : python %s cpp:/usr/local/tomcat/webapps/jenkins/workspace/helloworld-cpp/coverage_result/index.html java:/usr/local/tomcat/webapps/jenkins/workspace/helloworld-freestyle/target/site/cobertura/frame-summary.html" % strscriptnamesys.exit(0)if __name__ == "__main__":if len(sys.argv) == 1:usage(sys.argv[0])if not os.path.exists("./coverage_report"): os.mkdir("./coverage_report") covdata.mergecov(sys.argv[1:], "./coverage_report/index.html")


典型构建脚本举例:

#! /bin/bash#note   : build, ut, coverage, deploy #author : peterguo #date   : 2014.04.24#处理补丁问题 /data/home/jenkins/bin/reverse_patch.sh#findbugs html report /usr/maven/bin/mvn compile site#执行编译,ut,覆盖率 /usr/maven/bin/mvn install package assembly:assembly cobertura:cobertura findbugs:findbugs#收集所有的单元测试结果 /bin/mkdir ./xml_test_report -p; /bin/cp $(/usr/bin/find . -name "test*xml") ./xml_test_report#同时汇总出一份带链接的html汇总报表 strparam="" for item in `find . -name "frame-summary.html"` dosubprjname=`echo $item | awk -f"/" '{print $2}'`strparam="$strparam $subprjname:$item" done python ~/bin/merge_cov.py $strparam#部署到测试环境 src_pkg=`find ./target/ -name "jstorm-*tar.gz"` /data/home/jenkins/bin/md5_upload.exp storm storm 10.187.139.144 $src_pkg /data/home/storm/deploy/$(basename $src_pkg) /data/home/jenkins/bin/md5_upload.exp storm storm 10.187.139.145 $src_pkg /data/home/storm/deploy/$(basename $src_pkg)


转载于:https://my.oschina.net/sanpeterguo/blog/212771

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的持续集成java覆盖率合并的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图