最近在做接口测试,想通过代码覆盖率来判断一下接口用例是否缺失,但是每次通过命令来生成覆盖率报告,感觉太麻烦,所以就想着把jacoco集成到测试工具平台中,只需要点几个按钮,就能查看到覆盖率报告。

测试工具平台中只要添加一个页面即可,关键是实现下面流程的代码。

实现流程:

这里搭建了一个django服务,分别实现代码下载和编译、获取exec文件、生成报告、获取报告地址,

 def compileCode(request):

     result =JacocoModel.objects(index=request.GET['index']).first()
projectName=result.projectName
logger.debug("开始生成覆盖率的服务:"+projectName)
res=impl_compile_code(request)
return HttpResponse(res+"服务编译完成") def generateExec(request):
result = JacocoModel.objects(index=request.GET['index']).first()
projectName = result.projectName
logger.debug("开始生成exec的服务:" + projectName)
res = impl_generate_exec(request)
return HttpResponse(res + "的jacoco的exec生成完成") def generateReport(request):
result = JacocoModel.objects(index=request.GET['index']).first()
projectName = result.projectName
logger.debug("开始生成report的服务:" + projectName)
res = impl_generate_report(request)
return HttpResponse(res + "的report生成完成") def viewReport(request):
result = JacocoModel.objects(index=request.GET['index']).first()
projectName = result.projectName
logger.debug("获取report地址的服务:" + projectName)
res = impl_generate_view(request)
return HttpResponse(res)

其中数据保存在mongodb中,结构如下

下面是代码下载和编译的具体实现

 def impl_compile_code(request):

     logger.debug("获取index对应的信息")
result = JacocoModel.objects(index=request.GET['index']).first()
JacocoModel.objects(index=request.GET['index']).update(set__compileStatus='')
JacocoModel.objects(index=request.GET['index']).update(set__execStatus='')
JacocoModel.objects(index=request.GET['index']).update(set__reportStatus='')
projectName = result.projectName
gitUrl = result.gitUrl
branchName=result.branchName logger.debug('服务名:' + projectName)
logger.debug('gitUrl:' + gitUrl) logger.debug("准备下载代码")
logger.debug("删除上一次代码--开始")
dirpath=BaseImpl.jacocofile
deldircmd=''.join(['cd ',dirpath,' && rm -rf ',projectName])
logger.debug("执行命令:"+deldircmd)
baseImpl.printCmdLog(createCmd([deldircmd])())
logger.debug("删除上一次代码--结束") logger.debug("下载代码--开始")
clonecmd=''.join(['cd ',dirpath,' && git clone ',gitUrl])
logger.debug("执行命令:" + clonecmd)
baseImpl.printCmdLog(createCmd([clonecmd])())
logger.debug("下载代码--结束") logger.debug("切换代码分支--开始")
switchBranchcmd=''.join(['cd ',dirpath,projectName,' && git checkout ',branchName])
logger.debug("执行命令:" + switchBranchcmd)
baseImpl.printCmdLog(createCmd([switchBranchcmd])())
logger.debug("切换代码分支--结束") logger.debug("编译代码-开始")
compilecmd=''.join(['cd ',dirpath,projectName,' && mvn compile'])
logger.debug("编译代码命令:"+compilecmd)
pl=createCmd([compilecmd])()
logger.debug("编译代码-结束") flag=baseImpl.checkBuildStatus(pl)
JacocoModel.objects(index=request.GET['index']).update(set__compileStatus=flag)
return result.projectName

服务器的相关操作都是通过命令行实现,基于python的subprocess库,下面是执行命令的工具方法

 def createCmd(cmdList):
def _createCmd():
pl = []
for cmd in cmdList:
p=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p.wait()
pl.append(p)
return pl
return _createCmd

实现了所有方法后,可以将django服务,部署到docker中执行。docker容器中需要包含jacoco、maven、ant、python3、git

最后在生成的报告,放到宿主机上的nginx中,如下:

并在nginx.conf中修改下面的配置,当/usr/local/nginx/data下生成报告内容后,就可以查看报告了

实现结果:

这个Django服务也可以单独使用,使用浏览器访问服务即可,例如下面的获取报告地址

最新文章

  1. TFS源代码管理原则
  2. php大力力 [051节] 支付宝支付.申请支付资质,等待审核中
  3. 50个常用的JQuery代码
  4. UVa 11624 Fire!(BFS)
  5. 获取客户端的IP地址
  6. SendMessage 窗口函数
  7. Hadoop RPC简单实例
  8. [转载]大道至简!!!从SAP HANA作为SAP加速器的方式,看ERP on HANA的春天
  9. JS 禁止刷新和右键
  10. 最佳时间买入卖出股票 Best Time to Buy and Sell Stock LeetCode
  11. noip级别数论?
  12. 跟我学ASP.NET MVC之三:完整的ASP.NET MVC程序-PartyInvites
  13. 简易版本vue的实现
  14. [解决]RESTEASY003215: could not find writer for content-type text/html type: java.lang.String
  15. ps流提取H264并解码播放
  16. lettuce行为驱动总结
  17. CRTD异常案例及原因
  18. 20135239 益西拉姆 linux内核分析 读书笔记之第四章
  19. Spring—spring概述
  20. Just a Hook:线段树+区间修改

热门文章

  1. hibernate抓取策略
  2. HDU--2191 汶川地震购米(多重背包)
  3. 在HBase之上构建SQL引擎
  4. IDEA取消形参名显示
  5. 使用 QuickBI 搭建酷炫可视化分析
  6. Opencv Mat矩阵操作注意事项
  7. 软件-UlitraEdit:UIitraEdit
  8. k8s 内部各个部件运转
  9. win10x软件字体有阴影很模糊的解决方法(软件分辨率与系统分辨率不一致)
  10. Ceisum官方教程3 -- 空间数据可视化