最近在做接口测试,想通过代码覆盖率来判断一下接口用例是否缺失,但是每次通过命令来生成覆盖率报告,感觉太麻烦,所以就想着把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服务也可以单独使用,使用浏览器访问服务即可,例如下面的获取报告地址

将jacoco集成到测试工具平台的更多相关文章

  1. web测试工具总结

     纯粹的手工测试早已不满足如今的项目需求,各种测试工具的应用早已成为普遍趋势.如何选取合适的工具来完成对应的测试工作?本文将针对Web测试,列举 一些推荐的测试工具,并加以简单介绍. (每个工具的实际 ...

  2. 移动应用开发测试工具Bugtags集成和使用教程

    前段时间,有很多APP突然走红,最终却都是樱花一现.作为一个创业团队,突然爆红是非常难得的机会.然并卵,由于没有经过充分的测试,再加上用户的激增,APP闪退.服务器数据异常等问题就被暴露出来,用户的流 ...

  3. 移动应用开发测试工具Bugtags集成和使用教程【转载】

    前段时间,有很多APP突然走红,最终却都是樱花一现.作为一个创业团队,突然爆红是非常难得的机会.然并卵,由于没有经过充分的测试,再加上用户的激增,APP闪退.服务器数据异常等问题就被暴露出来,用户的流 ...

  4. 移动开发测试工具——Bugtags的集成

    移动开发测试工具--Bugtags 官网:https://bugtags.com/ 注册开发者账号 注册账号并激活邮箱,都会就不多做介绍了. 创建应用 创建完账号以后会提示添加应用,点击添加 添加应用 ...

  5. Android平台下渗透测试工具大集合

    Android平台下渗透测试工具大集合 分享一个google的项目,各种Android下的渗透测试工具. Ad Network Detector (1.2): http://market.androi ...

  6. 一款类似loadRunner的优秀国产压力测试工具——kylinTOP测试与监控平台

    市面上流行的压力/负载/性能测试工具多是来自国外,近年来国内的性能测试工具也如雨后春笋般崛起,但大部分产品是基于Jmeter开源内核包装起来的性能测试工具,其中也不乏佼佼者,如:kylinTOP测试与 ...

  7. OpenStack平台功能性测试工具Tempest安装

    社区对OpenStack平台功能性的测试工具采用Tempest,性能测试采用Rally. 1.什么是Tempest tempest├── api # API的测试集├── cli # OpenStac ...

  8. Windows 平台下局域网劫持测试工具 – EvilFoca

    简介 安全测试工具可能含有攻击性,请谨慎适用于安全教学及学习用途,禁止非法利用! EvilFoca是Windows环境下基于.NET FrameWork的一款轻量级的劫持测试工具.与BackTrack ...

  9. Android高手速成--第四部分 开发工具及测试工具

    第四部分 开发工具及测试工具 主要介绍和Android开发工具和测试工具相关的开源项目. 一.开发效率工具 Json2Java根据JSon数据自动生成对应的Java实体类,还支持Parcel.Gson ...

随机推荐

  1. Android之TableLayout表格布局

    1.相关属性 1.1.常用属性 android:collapseColumns 设置需要被隐藏的列的序列号 android:shrinkColumns 设置允许被收缩的列的序列号 android:st ...

  2. FreeMarker 自定义 TemplateDirectiveModel(二)

    FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker 与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不 ...

  3. js中的继承和重载

      js中有三种继承方式:一.通过原型(prototype)实现继承 二.借用构造函数式继承,可分为通过call()方法实现继承和通过apply()方法实现继承 仅仅通过原型继承我们可以发现在实例化子 ...

  4. mac下解压bin文件

    在mac下要解压Android-ndk-r10e-darwin-x86_64.bin文件. 1.进入文件所在目录,修改文件的读取权限 chmod a+x android-ndk-r10e-darwin ...

  5. vue-cli 构建项目

    1.安装vue-cli和webpack npm install webpack -g npm install vue-cli -g 2.vue-cli初始化项目 vue init webpack-si ...

  6. 从0开始学习ssh之日志工具与配置log4j

    添加slf4j-api-1.6.1,slf4j-log4j12-1.6.1,log4j-1.2.15三个jar包到lib文件夹下就可以使用log4j日志文件.具体配置在log4j.properties ...

  7. 根据url的属性名来取属性值赋值给js

    1.方法一:js的正则表达式:请求路径:http://127.0.0.1/pec/jsp/member/refundOrder.jsp?status=4 <script> var stat ...

  8. bzoj1003物流运输 最短路+DP

    bzoj1003物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输 ...

  9. sudo apt-get update报错E: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。

    解决方案1: 将对应的PPA删除掉即可 cd /etc/apt/suorces.list.d mv **.list **.list.bak 解决方案2: 更改源 cp /etc/apt/source_ ...

  10. mysql innodb 的 逻辑存储结构

    如上图: innodb 的 逻辑存储单元分成 表空间,段,区,页 4个等级 默认情况下,一个数据库 所有变共享一个 默认的表空间(tablespan).可以指定每个表一个表空间. 一个表空间管理着 多 ...