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. flask框架开启定时任务简单案例flask_apscheduler

    #所需模块flask_apscheduler #encodig=utf-8 from flask import Flask, request from flask_apscheduler import ...

  2. dotnet学习笔记-专题01-异步与多线程-01

    专题01 异步 多线程 1. Thread类 1.1 使用Thread创建线程 namespace ConsoleApp1; internal class Program { private stat ...

  3. python之日志logging

    转载:https://blog.csdn.net/weixin_43790276/article/details/101944628 logging 模块是 Python 内置的标准模块,用于输出代码 ...

  4. PHP之项目环境变量设置

    需求 在PHP开发中为了区分线上生产环境还是本地开发环境, 如果我们能通过判断$_SERVER['RUNTIME_ENVIROMENT']为 'DEV'还是'PRO'来区分该多好, 可惜的是$_SER ...

  5. element-ui季度选择组件

    1.基于elementui开发的季度选择组件 2.调用 <el-quarter-picker v-model="start_time" :size="size&qu ...

  6. winform窗体无边框拖动

    1:引用命名空间 using System.Runtime.InteropServices; 2:想要拖动窗体的控件绑定MouseDown事件 点击查看代码 //窗体移动 [DllImport(&qu ...

  7. 前后端数据传递之form-data

    前情 最近在项目开发中,跟服务端连调发现接口一直报错,服务端一直提示是数据没有传,而通过浏览器控制台发现数据是有传的. 坑 服务通过postman自测是OK的.经过和服务端一起定位发现服务端只接收以f ...

  8. windbg 调试 c++ std::exception

    由于c++ std::exception在windbg里面调用堆栈显示不正确,可以通过加载了系统pdb和软件pdb后,!analyze -v可以分析出来,所有需要配置系统pdb. 1.把exe,pdb ...

  9. C++顺序结构(1)任务

    1.下载并观看视频(照着做,多看几遍) https://www.jianguoyun.com/p/DWCNkNEQi8_wDBj5ptYFIAA 2.两项照着做的任务

  10. windows 也支持右键复制文件名了

    mac 有一个操作,alt + 右键,出现的菜单有复制路径一项.不用羡慕,现在 windows 也有这个功能了. Shift + 右键,"复制为路径":