Jenkins+Coverage的代码覆盖率集成实践

一、工具介绍

  • Jenkins

    Jenkins是一个开源的、基于Java开发的持续集成工具,它可以帮助开发人员自动化构建、测试和部署软件项目。
  • Coverage

    Coverage是一个Python代码覆盖率工具,用于测量代码执行过程中哪些代码行被执行到,从而评估测试的有效性。

二、环境准备

Jenkins服务器环境准备

  • Jenkins服务安装:在目标服务器上安装并妥善配置Jenkins服务,确保其能够稳定运行,为后续开展自动化构建与测试任务奠定坚实基础。

Web服务器环境准备

  • Coverage安装:在Web服务器上安装Coverage工具,这是评估测试有效性的关键一环。我们将借助该工具全面收集并分析代码覆盖率数据,从而确保测试质量。
  • Web服务python项目:将Web服务的Python项目部署至Web服务器,这是Web服务正常运行的基础,同时也是测试任务的主要目标对象。

三、集成实践

流程图

前置准备工作

  1. Jenkins服务器配置

    • 请确保Jenkins服务已准确无误地安装,并且当前正处于稳定的运行状态。若您在安装过程中遇到任何问题,建议参考《Linux安装Jenkins指南》进行学习或实践操作,以获取详尽的步骤指导。
  2. Jenkins插件安装

  3. 工具下载

    • 在Web服务器上,请确保已正确安装Coverag工具。作为一款高效的代码覆盖率工具,Coverag的使用详情可参考《Python代码覆盖率工具之Coverage》进行学习或实际操作,以提升您的测试效率。
  4. Web服务器部署

    • 在Web服务器上,请提前准备好待部署的Web服务python项目,以便后续进行便捷的部署和发布操作。

实践步骤

根据所使用框架的不同运行机制,我们需要采取相应的方法来实施插桩。为了获取更详细的指导与帮助,您可以参考《提升质量:利用Coverage分析Python Web项目的测试覆盖》一文。

flask框架为例的Jenkins项目配置指南

  • 在Jenkins中创建一个项目Start job(旨在启动Python项目)

1.在Web服务器上,我们首先需要创建一个名为start_job.sh的脚本文件,并输入以下内容:

#!/bin/sh
# 切换到Python项目所在路径
cd /home/yuegang/project
# 利用Coverage工具启动Web服务,并监控代码覆盖率
python -m coverage run --source=/home/yuegang/project --parallel-mode /home/yuegang/project/cov_flask.py

说明:

  • coverage run命令用于启动覆盖率监控。
  • --source参数指定需要监控的文件夹。
  • --parallel-mode允许在多线程环境下运行。
  • cov_flask.py是实际执行的Python文件。

2.在Jenkins项目的构建步骤中添加SSH插件

3.在SSH插件中,配置Web服务器信息,输入以下命令以执行start_job.sh脚本:

sh /home/yuegang/project/start_job.sh

  • 在Jenkins中再创建一个项目End job(用于终止Python项目)

1.在Web服务器上,创建名为end_job.sh的脚本文件,并输入以下内容:

#!/bin/sh
# 杀死python项目进程
pgrep -f /home/yuegang/project/cov_falsk.py | xargs kill -2
# 进入python项目文件夹
cd /home/yuegang/project
# -a参数,追加模式,不加-a则覆盖结果
python -m coverage combine -a
# 生成html
python -m coverage html

2.在Jenkins项目的构建步骤添加SSH插件以执行上述脚本

sh /home/yuegang/project/end_job.sh

  • 在Jenkins服务器中使用SSH密钥连接Web服务器

1.在Jenkins服务器上,执行ssh-keygen -t rsa命令生成SSH密钥对。

2.一路按回车,将在/root/.ssh目录下生成id_rsa(私钥)和id_rsa.pub(公钥)两个文件。

3.将Jenkins服务器的SSH公钥id_rsa.pub复制到Web服务器的/root/.ssh/authorized_keys文件中(若文件不存在,则新建)。

4.在Jenkins服务器上,执行ssh root@192.168.254.140命令测试SSH连接(首次连接需确认,将在/root/.ssh目录下生成known_hosts文件)。

使用exit命令退出SSH连接。

  • 将Web服务器的HTML文件夹发送至Jenkins服务器并展示

1.在Jenkins服务器上,创建名为html.sh的脚本文件,并输入以下内容:

#!/bin/sh
# 删除原有的HTML报告
rm -rf /opt/Jenkins/html
# 从Web服务器复制HTML报告至Jenkins服务器
scp -r root@192.168.254.140:/home/yuegang/project/htmlcov /opt/Jenkins/html

2.在Jenkins项目的构建步骤中,添加执行Shell步骤,并执行以下命令:

sh /opt/Jenkins/html.sh

3.在构建结束后操作中,添加Publish HTML reports步骤,以展示HTML报告。

4.配置HTML报告路径,并进行保存。

最终效果与操作流程

  1. 启动与测试阶段
  • 首先,我们在Jenkins中执行Start job项目。

  • 此时,Python项目随之启动,我们可以开始对其进行功能测试等操作。

  1. 结束与报告生成阶段
  • 测试完成后,我们在Jenkins中执行End job项目。

  • 执行End job后,Python项目进程被终止,并自动生成HTML格式的覆盖率报告。

  • 我们可以在End job的构建日志或相关界面中查看生成的HTML报告。

  1. 覆盖率分析与迭代测试
  • 通过查看HTML报告,我们发现代码的覆盖率并未达到100%。

  • 针对这一情况,我们可以再次执行Start job项目,重新进行一轮测试。

  • 测试结束后,再次执行End job项目,以更新覆盖率报告。

  1. 结果展示
  • 经过上述迭代测试后,我们得到了更新后的覆盖率报告结果。

Jenkins+Coverage的代码覆盖率集成实践的更多相关文章

  1. Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)

    原始链接:http://blog.csdn.net/a464057216/article/details/52934077 requirments OS: Ubuntu 14.04+ Gitlab 8 ...

  2. [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  3. 基于Jenkins的开发测试全流程持续集成实践

    今年一直在公司实践CI,本文将近半年来的一些实践总结一下,可能不太完善或优美,但的确初步解决了我目前所在项目组的一些痛点.当然这仅是一家之言也不够完整,后续还会深入实践和引入Kubernetes进行容 ...

  4. 「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要点

    1. 前言 随着互联网软件行业快速发展,为了抢占市场先机,企业不得不持续提高软件的交付效率.特别是现在国内越来越多企业已经在逐步引入DevOps研发模式的变迁,在这些背景催促之下,对于企业研发团队所需 ...

  5. 「持续集成实践系列 」Jenkins 2.x 构建CI自动化流水线常见技巧

    在上一篇文章中,我们介绍了Jenkins 2.x实现流水线的两种语法,以及在实际工作中该如何选择脚本式语法或声明式语法.原文可查阅:「持续集成实践系列」Jenkins 2.x 搭建CI需要掌握的硬核要 ...

  6. Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

    前言 Gitea 是一个用于代码托管的轻量级单体程序,它能与现有的经典应用集成,诸如代码分析工具 SonarQube.持续集成工具 Drone.Jenkins 以及用于工单管理的客户端插件(VSCod ...

  7. 基于 Jenkins 快速搭建持续集成环境

      什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火 ...

  8. [独孤九剑]持续集成实践(二)– MSBuild语法入门

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  9. 基于 Jenkins 快速搭建持续集成环境--转

    源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...

  10. Jenkins 快速搭建持续集成环境

    持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...

随机推荐

  1. 抓包工具之Charles(mac)

    下载地址:https://www.charlesproxy.com/download/ 因为软件是收费的,所以破解方式可以参考:https://www.zzzmode.com/mytools/char ...

  2. 一款开源、免费、美观的 Avalonia UI 原生控件库 - Semi Avalonia

    前言 最近发现DotNetGuide技术社区交流群有不少小伙伴在学习Avalonia,今天大姚给大家分享一款开源.免费.美观的 Avalonia UI 原生控件库:Semi Avalonia. Ava ...

  3. 一步步教你学会如何区域录制屏幕转换成gif图

    现在各种表情包都是gif图,包括很多可能比较短暂的操作步骤,录制gif图也要远比录制成视频要来的方便很多. 1. GIF文件通常比视频文件小,这使得它们在网络传输中更加高效,尤其是在带宽有限的情况下. ...

  4. uniapp select组件

    1.前言 官方的picker组件不能禁用某个下拉项,所以就有了这个下拉组件 组件只适配了宽屏模式,效果参照element-ui的select组件 demo地址:lianlizhou / ep-sele ...

  5. 移动端NES网页模拟器(1)

    前言 移动端浏览器是没有实体键盘的,想要操作游戏就必须为其设置虚拟按键,通过虚拟按键(按钮)的标识与实体键盘的keyCode进行绑定,来达到想要的效果. 这个随笔只封装NES游戏手柄右边的按键,不包含 ...

  6. controller返回路径问题

    项目打包后,报错template might not exist or might not be accessible by any of the configured Template Resolv ...

  7. DDCA —— 片上网络互联

    1. 路由 1.1 网络拓扑示例 Grid(网格) 网络拓扑通常是一个二维矩阵形式,每个节点(处理器)与其上下左右相邻的节点相连. 如果节点在边缘,某些方向上可能没有相邻节点(边界节点). Torus ...

  8. Java代码覆盖率super-jacoco

    开源项目地址 https://gitee.com/didiopensource/super-jacoco 项目流程 项目架构 部署步骤 注意:一定要用Linux服务器部署,不要用Windows 准备L ...

  9. Qt数据库应用22-文件编码格式识别

    一.前言 在做数据导入导出的过程中,如果应用场景多了,相信各位都会遇到一个问题就是文件编码的问题,有些文件是ANSI编码,有些是utf8编码,有些又是utf8带bom编码,不同的文件编码如果都用同一种 ...

  10. Qt编写地图综合应用53-省市轮廓图下载

    一.前言 Qt的浏览器控件的交互机制非常方便,所以在在线地图的时候可以对每个区域的经纬度坐标集合发给Qt程序,让他去存储到文件,在实际的测试过程中,发现有部分地图有多个封闭的曲线的,比如散落的岛屿和飞 ...