凯发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 = ''' |
|