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

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

一、工具介绍

  • Jenkins
    Jenkins是一个开源的、基于Java开发的持续集成工具,它可以帮助开发人员自动化构建、测试和部署软件项目。
  • Coverage
    Coverage是一个Python代码覆盖率工具,用于测量代码执行过程中哪些代码行被执行到,从而评估测试的有效性。

二、环境准备

Jenkins服务器环境准备

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

Web服务器环境准备

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

三、集成实践

流程图

image

前置准备工作

  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文件。

image

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

image

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

sh /home/yuegang/project/start_job.sh

image

  • 在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

image

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

sh /home/yuegang/project/end_job.sh

image

image

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

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

image

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

image

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

image

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

image

image

使用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

image

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

sh /opt/Jenkins/html.sh

image

image

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

image

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

image

最终效果与操作流程

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

image

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

image

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

image

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

image

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

image

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

image

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

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

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

image

posted @ 2024-10-18 15:50  测试小罡  阅读(240)  评论(0编辑  收藏  举报