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-elementui中el-table跨页选择和v-if导致列错乱/选择框无法显示

    在vue-elementui中使用el-table,当type="selection"的时候,分页数据进行不同页跳转选择 需要这种功能的时候我们需要在el-table的标签上为每个 ...

  2. select2的搜索框不能输入内容

    select2的搜索框不能输入内容 原因:原来是模态对话框强制使自己处于焦点状态,导致select2的搜索框无法获取焦点所致. 解决办法:在初始化中重写模态对话框的enforceFocus函数 $.f ...

  3. 浅析REGEXP_SUBSTR,PRIOR,CONNECT BY

    业务场景 teacher表中的tech_class字段存储的是每个老师所教授的课程,课程之间以英文逗号分隔.现在要用语句统计每个课程对应的教师数量.语句及效果如下: 语句其实很简单,各种博客或者gpt ...

  4. java——棋牌类游戏五子棋(webwzq1.0)之一(基础)

    这是本人最近一段时间写的斗地主的java代码,大体框架都实现了,一些细节还需要后续优化. package basegame; import java.awt.Button; import java.a ...

  5. 开发工具之DevToys

    DevToys 号称开发人员的瑞士军刀,可以帮助完成一些日常任务,比如格式化 JSON.比较文本.测试正则等,无需使用许多不真实的网站来处理的数据. 借助智能检测,DevToys 能够检测出可以处理在 ...

  6. Elasticsearch之基本使用

    这里大概解答下各个目录.配置文件的作用: 目录 配置文件 描述 bin   放置脚本文件,如启动脚本 elasticsearch, 插件安装脚本等. config elasticserch.yml e ...

  7. 前端每日一知之css选择器

    脑图在线链接 本文内容依据[js每日一题]公众号精彩文章总结而来

  8. 数据分层 ODS DW DM层级

    在数据仓库的设计过程中,数据分层是一种重要的组织方式,能够提高数据处理效率和数据质量.数据分层通常包括原始数据(Operational Data Store,ODS).明细数据(Data Wareho ...

  9. mysql忘记密码的终极解决方案(docker-compose)

    MYSQL8的安全性能有所提高,装好后,各种不适应,需要各种调试. 1. 首先,root密码忘记或是更改,操作步骤: vi mysql/config/my.cnf 在[mysqld]的段中加上一句:s ...

  10. GraphQL Part IV: 浏览器内的 IDE

    只是一个使用,这里不做介绍了.