• 将jacoco集成到测试工具平台


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

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

    实现流程:

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

     1 def compileCode(request):
     2     
     3     result =JacocoModel.objects(index=request.GET['index']).first()
     4     projectName=result.projectName
     5     logger.debug("开始生成覆盖率的服务:"+projectName)
     6     res=impl_compile_code(request)
     7     return HttpResponse(res+"服务编译完成")
     8 
     9 
    10 def generateExec(request):
    11     result = JacocoModel.objects(index=request.GET['index']).first()
    12     projectName = result.projectName
    13     logger.debug("开始生成exec的服务:" + projectName)
    14     res = impl_generate_exec(request)
    15     return HttpResponse(res + "的jacoco的exec生成完成")
    16 
    17 def generateReport(request):
    18     result = JacocoModel.objects(index=request.GET['index']).first()
    19     projectName = result.projectName
    20     logger.debug("开始生成report的服务:" + projectName)
    21     res = impl_generate_report(request)
    22     return HttpResponse(res + "的report生成完成")
    23 
    24 def viewReport(request):
    25     result = JacocoModel.objects(index=request.GET['index']).first()
    26     projectName = result.projectName
    27     logger.debug("获取report地址的服务:" + projectName)
    28     res = impl_generate_view(request)
    29     return HttpResponse(res)

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

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

     1 def impl_compile_code(request):
     2     
     3     logger.debug("获取index对应的信息")
     4     result = JacocoModel.objects(index=request.GET['index']).first()
     5     JacocoModel.objects(index=request.GET['index']).update(set__compileStatus='0')
     6     JacocoModel.objects(index=request.GET['index']).update(set__execStatus='0')
     7     JacocoModel.objects(index=request.GET['index']).update(set__reportStatus='0')
     8     projectName = result.projectName
     9     gitUrl = result.gitUrl
    10     branchName=result.branchName
    11 
    12     
    14 
    15     logger.debug('服务名:' + projectName)
    16     logger.debug('gitUrl:' + gitUrl)
    17 
    18     logger.debug("准备下载代码")
    19     logger.debug("删除上一次代码--开始")
    20     dirpath=BaseImpl.jacocofile
    21     deldircmd=''.join(['cd ',dirpath,' && rm -rf ',projectName])
    22     logger.debug("执行命令:"+deldircmd)
    23     baseImpl.printCmdLog(createCmd([deldircmd])())
    24     logger.debug("删除上一次代码--结束")
    25 
    26     logger.debug("下载代码--开始")
    27     clonecmd=''.join(['cd ',dirpath,' && git clone ',gitUrl])
    28     logger.debug("执行命令:" + clonecmd)
    29     baseImpl.printCmdLog(createCmd([clonecmd])())
    30     logger.debug("下载代码--结束")
    31 
    32     logger.debug("切换代码分支--开始")
    33     switchBranchcmd=''.join(['cd ',dirpath,projectName,' && git checkout ',branchName])
    34     logger.debug("执行命令:" + switchBranchcmd)
    35     baseImpl.printCmdLog(createCmd([switchBranchcmd])())
    36     logger.debug("切换代码分支--结束")
    37 
    38     logger.debug("编译代码-开始")
    39     compilecmd=''.join(['cd ',dirpath,projectName,' && mvn compile'])
    40     logger.debug("编译代码命令:"+compilecmd)
    41     pl=createCmd([compilecmd])()
    42     logger.debug("编译代码-结束")
    43 
    44     flag=baseImpl.checkBuildStatus(pl)
    45     JacocoModel.objects(index=request.GET['index']).update(set__compileStatus=flag)
    46     return result.projectName

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

    1 def createCmd(cmdList):
    2     def _createCmd():
    3         pl = []
    4         for cmd in cmdList:
    5             p=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    6             p.wait()
    7             pl.append(p)
    8         return pl
    9     return _createCmd

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

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

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

    实现结果:

     

     

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

  • 相关阅读:
    springmvc 路由
    springMVC 流程
    SqlServer中Sql语句的逻辑执行顺序
    中小型公司静态资源管理部署方案
    浅谈SQL Server中的三种物理连接操作
    Zclip复制页面内容到剪贴板兼容各浏览器
    C#中如何利用操作符重载和转换操作符
    类型构造器(静态构造函数)的执行时机你知道多少?
    容器云技术选择之kubernetes和swarm对比
    kafka入门
  • 原文地址:https://www.cnblogs.com/moonpool/p/11721703.html
Copyright © 2020-2023  润新知