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. VUE 前端读取excel表格内容

    <el-upload class="upload-demo" :action="''" :show-file-list="false" ...

  2. el-upload上传文件 需要在请求之前加一个校验文件内容格式请求

    before-upload data(){ return { ... //判断是否需要做文件检查 checkFileFormat:false } }, beforeUpload(rawFile) { ...

  3. Apache 门户项目组介绍

    本文将快速浏览 Apache 门户项目组的所有项目,并着重介绍门户项目组中的核心项目-Jetspeed-2. 0 评论: 廖 健, 首席实施顾问 2006 年 11 月 02 日 内容 引言 JEE作 ...

  4. 使用 ibatis 处理复杂对象数据关系的实例

    如何使用 ibatis 处理复杂对象数据关系 iBatis 是一个开源的对象关系映射程序,其工作是将对象映射到 SQL 语句.和其它 O/R Mapping 框架不同,iBatis 开发者需要自己编写 ...

  5. pycharm之常用插件

    参考:http://pycharm.iswbm.com/zh_CN/latest/ 1. Key Promoter X 如果让我给新手推荐一个 PyCharm 必装插件,那一定是 Key Promot ...

  6. MySQL原理简介—11.优化案例介绍

    大纲 1.禁止或改写SQL避免自动半连接优化 2.指定索引避免按聚簇索引全表扫描大表 3.按聚簇索引扫描小表减少回表次数 4.避免产生长事务长时间执行 1.禁止或改写SQL避免自动半连接优化 (1)业 ...

  7. The 2023 ICPC Asia Hong Kong Regional Programming Contest

    The 2023 ICPC Asia Hong Kong Regional Programming Contest A. TreeScript 给你一个根,让你构造一棵树,每个节点被创造的时候必须知道 ...

  8. a标签与Blob下载文件的区别和获取文件下载进度

    文件下载的几种方式. 大家都做过文件下载,无非就是通过a标签给定一个href. 用户点击下载按钮. 或者使用Blob的方式进行下载. 这两种是很常见的,也是我们平时做使用最多的方式. 那么我们知道这2 ...

  9. Java日志记录几种实现方案

    在平时使用到一些软件中,比如某宝或者某书,通过记录用户的行为来构建和分析用户的行为数据,同时也能更好优化产品设计和提升用户体验.比如在一个订单系统中,需要确定追踪用户的行为,比如: 登录/登出 浏览商 ...

  10. 07C++选择结构(1)

    一.基础知识 1.关系运算符 因为我们要对条件进行判断,必然会用到关系运算符: 名称 大于 大于等于 小于 小于等于 等于 不等于 符号 > >= < <= == != 关系表 ...