Jenkins+Coverage的代码覆盖率集成实践
Jenkins+Coverage的代码覆盖率集成实践
一、工具介绍
- Jenkins:
Jenkins是一个开源的、基于Java开发的持续集成工具,它可以帮助开发人员自动化构建、测试和部署软件项目。 - Coverage:
Coverage是一个Python代码覆盖率工具,用于测量代码执行过程中哪些代码行被执行到,从而评估测试的有效性。
二、环境准备
Jenkins服务器环境准备
- Jenkins服务安装:在目标服务器上安装并妥善配置Jenkins服务,确保其能够稳定运行,为后续开展自动化构建与测试任务奠定坚实基础。
Web服务器环境准备
- Coverage安装:在Web服务器上安装Coverage工具,这是评估测试有效性的关键一环。我们将借助该工具全面收集并分析代码覆盖率数据,从而确保测试质量。
- Web服务python项目:将Web服务的Python项目部署至Web服务器,这是Web服务正常运行的基础,同时也是测试任务的主要目标对象。
三、集成实践
流程图
前置准备工作
-
Jenkins服务器配置:
- 请确保Jenkins服务已准确无误地安装,并且当前正处于稳定的运行状态。若您在安装过程中遇到任何问题,建议参考《Linux安装Jenkins指南》进行学习或实践操作,以获取详尽的步骤指导。
-
Jenkins插件安装:
- 在Jenkins服务器上,您需要安装
HTML Publisher
和Publish over SSH
这两个关键插件。为了帮助您顺利完成安装,我们提供了详细的步骤说明及离线安装方法,请查阅《Jenkins离线安装插件》及《Jenkins插件:Publish over SSH》以获取必要的帮助或进行实战演练。
- 在Jenkins服务器上,您需要安装
-
工具下载:
- 在Web服务器上,请确保已正确安装
Coverag
工具。作为一款高效的代码覆盖率工具,Coverag
的使用详情可参考《Python代码覆盖率工具之Coverage》进行学习或实际操作,以提升您的测试效率。
- 在Web服务器上,请确保已正确安装
-
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报告路径,并进行保存。
最终效果与操作流程
- 启动与测试阶段
- 首先,我们在Jenkins中执行
Start job
项目。
- 此时,Python项目随之启动,我们可以开始对其进行功能测试等操作。
- 结束与报告生成阶段
- 测试完成后,我们在Jenkins中执行
End job
项目。
- 执行
End job
后,Python项目进程被终止,并自动生成HTML格式的覆盖率报告。
- 我们可以在
End job
的构建日志或相关界面中查看生成的HTML报告。
- 覆盖率分析与迭代测试
- 通过查看HTML报告,我们发现代码的覆盖率并未达到100%。
-
针对这一情况,我们可以再次执行
Start job
项目,重新进行一轮测试。 -
测试结束后,再次执行
End job
项目,以更新覆盖率报告。
- 结果展示
- 经过上述迭代测试后,我们得到了更新后的覆盖率报告结果。