Jenkins基础教程(6)Jenkins构建加自动化测试:Jenkins构建与自动化测试:让你的代码不再“在我这儿是好的”

  • 时间:2025-11-22 21:37 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:Jenkins就像个不知疲倦的质检员,每次代码提交后都会自动检查,专门治疗“在我这儿是好的”这种开发疑难杂症。 “在我的电脑上明明是好的!”——这句话是不是很耳熟?在软件开发领域,这句话几乎成了开发人员最怕听到的经典借口。直到Jenkins这个自动化服务器的出现,让这个借口再也站不住脚。 Jenkins究竟是什么?简单来说,它就像一个全天候无休的自动化工厂,从代码提交到测试再到部署,一条龙服务

Jenkins就像个不知疲倦的质检员,每次代码提交后都会自动检查,专门治疗“在我这儿是好的”这种开发疑难杂症。

“在我的电脑上明明是好的!”——这句话是不是很耳熟?在软件开发领域,这句话几乎成了开发人员最怕听到的经典借口。直到Jenkins这个自动化服务器的出现,让这个借口再也站不住脚。

Jenkins究竟是什么?简单来说,它就像一个全天候无休的自动化工厂,从代码提交到测试再到部署,一条龙服务,保障软件质量的同时,把开发人员从重复劳动中解放出来。

01 Jenkins的前世今生:从Hudson到自动化巨头

Jenkins的主要开发者是川口耕介,它的“出生证明”上写着一个非常开放的语言:MIT许可证,这意味着你可以自由地使用、修改和分发它。

Jenkins最初的名字是Hudson,在2011年2月2日正式以“Jenkins”的身份亮相。名字变了,但核心目标没变:让开发者的生活更轻松。

想象一下,当你的团队有多个开发人员在同一个项目上工作时,每个人都在修改代码,这些修改可能会相互冲突,导致软件无法构建或运行。

这就是Jenkins要解决的痛点:它就像一个不知疲倦的质检员,每次代码提交后都会自动检查,确保一切正常。

Jenkins的核心价值在于它支持“持续集成”和“持续交付”(简称CI/CD)。用大白话说,它就是软件开发流水线上的自动化工长,监督从代码到成品的每一个环节。

02 为什么Jenkins这么香?

作为一个自包含的开源自动化服务器,Jenkins可以用来自动化与构建、测试、交付或部署软件相关的各种任务。换句话说,它能把开发人员从重复性的苦力活中解放出来。

Jenkins的魅力在于它的灵活性。它可以安装在任何有Java运行环境(JRE)的机器上,无论是在本地服务器还是在云端。

Jenkins的强大还得益于它庞大的插件生态系统。这些插件让Jenkins能够与各种开发工具无缝对接,如版本控制系统Git、构建工具Maven等。

这意味着无论你的项目用什么技术栈,Jenkins都能很好地适应你的工作流程。

说到实际好处,Jenkins可以让开发团队更早地发现和修复问题提高软件质量减少部署风险,最终加快产品交付速度。说白了,它就是开发团队的安全网和加速器。

03 Jenkins安装:轻松搞定第一步

安装Jenkins有多种方法,包括通过原生系统包、Docker,或者直接在任何安装了JRE的机器上运行。对于初学者,使用Docker安装是一种较为简单的方式。

下面是在Linux机器上使用Docker安装Jenkins的步骤:

首先,确保你的系统已经安装了Docker。然后,只需一条命令就能启动Jenkins服务器:


docker run -p 8080:8080 -p 50000:50000 -d -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts

这条命令会下载最新的Jenkins长期支持(LTS)版本,并在后台运行它。

接下来,打开浏览器访问http://localhost:8080,你就会看到Jenkins的初始化界面。首次启动时,你需要输入初始管理员密码。

这个密码可以通过以下命令在容器内找到:


docker exec <container_id> cat /var/jenkins_home/secrets/initialAdminPassword

安装完成后,你会看到Jenkins的dashboard界面,这里就是你未来管理所有自动化任务的控制中心。

04 配置Jenkins:为自动化测试做准备

环境准备是利用Jenkins进行自动化测试的第一步。要进行自动化测试,你需要安装一些必要的插件:

Git插件:用于从版本控制系统获取代码Maven Integration插件:如果你使用Java和MavenHTML Publisher插件:用于生成漂亮的测试报告SSH Agent插件:用于远程执行命令

安装插件很简单,单击Jenkins主页左侧菜单【系统设置】,然后选择【插件管理】进入插件管理页面。在【Available plugins】可选插件下搜索你需要的插件,勾选后单击【Install】按钮进行安装。

对于自动化测试,还需要配置测试环境,比如安装Python、配置JDK等。这些都可以在Jenkins的系统设置中完成。

05 创建你的第一个自动化测试任务

好了,现在到了最有趣的部分——创建一个真实的自动化测试任务。我们将使用pytest和requests库创建一个接口自动化测试,并在Jenkins中配置它。

首先,我们编写一个测试脚本。创建一个名为test_api.py的文件,代码如下:



# test_api.py
import requests
 
BASE_URL = "https://jsonplaceholder.typicode.com"
 
def test_get_posts():
    response = requests.get(f"{BASE_URL}/posts")
    assert response.status_code == 200
    assert len(response.json()) > 0
 
def test_get_post():
    response = requests.get(f"{BASE_URL}/posts/1")
    assert response.status_code == 200
    assert response.json()['id'] == 1
 
def test_create_post():
    data = {"title": 'foo', "body": 'bar', "userId": 1}
    response = requests.post(f"{BASE_URL}/posts", data=data)
    assert response.status_code == 201
    assert response.json()['title'] == 'foo'
 
def test_update_post():
    data = {"id": 1, "title": 'updated title', "body": 'updated body', "userId": 1}
    response = requests.put(f"{BASE_URL}/posts/1", data=data)
    assert response.status_code == 200
    assert response.json()['title'] == 'updated title'
 
def test_delete_post():
    response = requests.delete(f"{BASE_URL}/posts/1")
    assert response.status_code == 200

这个测试脚本包含了针对典型REST API的五个基本测试:获取列表、获取单个资源、创建、更新和删除。

接下来,我们需要在Jenkins中创建一个任务来运行这些测试。

进入Jenkins主页,单击左侧菜单栏中的【新建任务】创建测试任务,【任务名称】填写“api_interface_test”,选择【Freestyle project】自由风格任务,然后单击【确定】按钮。

在任务配置页面,我们需要进行几个关键配置:

在【源码管理】部分,选择Git,并填写包含你测试代码的仓库地址。如果你的代码在GitHub上,可以直接复制仓库的URL到这里。

在【构建触发器】部分,你可以设置定时构建,例如填写H/15 * * * *,表示每15分钟构建一次。这样Jenkins就会定期执行你的自动化测试,确保代码质量。

在【构建】部分,添加一个【Execute shell】步骤,并输入以下命令:



pip install pytest requests
pytest test_api.py

这些命令会安装必要的Python包并运行测试。

最后,在【后构建操作】中,你可以配置如何收集测试结果和发送通知。例如,可以发布JUnit格式的测试报告,或者配置邮件通知,在测试失败时发送警报。

配置完成后,单击【保存】按钮。现在你的第一个自动化测试任务就创建完成了!

06 立即运行和查看结果

返回任务主页,单击左侧菜单栏中的【立即构建】,你会看到任务立即开始运行。

构建完成后,在任务主页可以看到构建情况。任务名称前有个绿色对勾表示构建成功,如果最近一次构建失败,则任务名称前是红色的叉叉。

要查看详细的测试结果,单击最近一次构建,然后在构建页面中单击左侧菜单栏中的【控制台输出】,这里展示了构建的详细过程。你可以看到哪些测试通过了,哪些失败了,以及失败的详细原因。

07 高级技巧:使用Pipeline作为代码

除了自由风格项目,Jenkins还支持Pipeline(流水线),这是一种更强大、更灵活的方式,允许你将整个构建、测试和部署流程定义为代码。

创建一个Jenkinsfile,内容如下:



pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-username/your-repo.git'
            }
        }
        stage('Setup') {
            steps {
                sh 'pip install pytest requests'
            }
        }
        stage('Test') {
            steps {
                sh 'pytest test_api.py'
            }
        }
    }
    post {
        always {
            publishHTML(target: [
                reportName: 'Pytest Report',
                reportDir: 'reports',
                reportFiles: 'index.html',
                keepAll: true
            ])
        }
        failure {
            mail to: 'team@example.com',
            subject: "Failed Build: ${currentBuild.fullDisplayName}",
            body: "Something is wrong with ${env.BUILD_URL}"
        }
    }
}

这个Pipeline定义了三个明确的阶段:检出代码、安装依赖和运行测试。它还包含后构建操作,总是发布HTML测试报告,并在失败时发送邮件通知。

使用Pipeline的好处是你可以将整个CI/CD流程作为代码版本化,与你的项目代码一起管理,实现真正的基础设施即代码。

08 实际案例:看看别人怎么做

为了让你更有代入感,我们来看一个真实场景中的测试案例。这是一个测试学生信息获取函数的例子:



# test_jenkins.py
import pytest
 
def get_student_info(student_id):
    students = {
        1001: {"name": "tynam", "age": "21"},
        1004: {"name": "yang", "age": "16"}
    }
    return students.get(student_id, "The student ID does not exist.")
 
def test_01():
    student = get_student_info(1001)
    assert student.get("name") == "tynam"
 
def test_02():
    student = get_student_info(1004)
    assert student.get("name") == "tynam"
 
if __name__ == "__main__":
    pytest.main(["-s", "test_jenkins.py"])

在这个测试中,test_01会通过,因为学号1001对应的名字确实是"tynam";但test_02会失败,因为学号1004对应的名字是"yang"而不是"tynam"。

当在Jenkins中运行这个测试时,你会看到一个测试失败,一个测试通过。这种结果在测试中很常见,重要的是Jenkins能够清晰地展示哪些测试失败,帮助我们快速定位问题。

09 最佳实践:让自动化测试更有效

基于多年的实践经验,我总结了一些Jenkins自动化测试的最佳实践:

保持测试独立:确保测试代码独立于项目代码之外。为了保证测试稳定可靠且便于维护,测试用例之间决不能有相互依赖,也不能依赖执行的先后次序。合理的断言:不要做无谓的断言。在测试模式下,有时会情不自禁的滥用断言。这种做法会导致维护更困难,需要极力避免。同时,应该总是优先使用assertEquals(a, b) 而不是assertTrue(a == b),因为前者会给出更有意义的测试失败信息。完善的测试数据管理:在@BeforeClass @Before中做数据准备等相关操作,加载测试类以前需要加载所有测试用例共同的场景数据。同时在@AfterClass @After中做测试数据清理等相关操作,在执行完相关测试以后清理用例现场。配置合理的触发规则:可以配置定时触发构建,也可以根据代码提交、分支合并等事件自动触发构建。这样可以在代码变更时立即得到反馈,及时发现问题和解决。利用分布式执行:Jenkins支持分布式执行,可以将测试任务分发到多个节点上并行运行,大大缩短测试时间。

10 常见问题与解决方案

在使用Jenkins进行自动化测试的过程中,你可能会遇到一些常见问题:

环境配置问题:确保Jenkins服务器上配置了正确的环境变量,如JAVA_HOME、PATH等。不同的项目可能需要不同的环境配置,可以使用Jenkins的Node和Label功能来管理不同环境。权限问题:配置Jenkins的用户权限,确保测试脚本可以正确执行。同时,确保Jenkins有访问代码仓库和所需资源的权限。测试报告不生成或显示不正确:检查测试报告的路径配置是否正确,确保安装了必要的报告插件,如JUnit插件或HTML Publisher插件。构建失败时没有通知:检查邮件通知或Slack通知的配置,确保在构建失败时能及时通知相关人员。

结语:拥抱自动化,告别“在我这儿是好的”

通过本教程,你已经掌握了如何使用Jenkins进行自动化测试的基本技能。从安装Jenkins到创建第一个测试任务,再到配置复杂的Pipeline,你已经具备了将Jenkins应用于实际项目的能力。

记住,Jenkins就像你的自动化测试机器人,不知疲倦地为你工作,确保每一次代码变更都不会破坏现有功能。它让“在我这儿是好的”这个借口成为历史,因为每一次提交都会在标准化的环境中得到验证。

自动化测试不是一蹴而就的过程,而是逐步完善的。从一个小任务开始,慢慢扩展你的测试覆盖范围和自动化流程,最终你会拥有一个强大而可靠的自动化测试体系。

现在,就去创建你的第一个Jenkins自动化测试任务吧,让你的代码真正实现“在任何地方都是好的”!

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】八股已死、场景当立(场景篇-设计模式篇)(2025-11-22 23:27)
【系统环境|】群、环、域(2025-11-22 23:26)
【系统环境|】深度解析:基于Python的分布式缓存系统实现与性能优化(2025-11-22 23:26)
【系统环境|】TP区块链下载全解析:从技术原理到代码实现(2025-11-22 23:25)
【系统环境|】大模型在急性肾衰竭预测及临床方案制定中的应用研究(2025-11-22 23:25)
【系统环境|】特价股票投资中的可持续供应链管理整合方法(2025-11-22 23:24)
【系统环境|】第193期 如何微调大语言模型(LLM)(内含源码细节)(2025-11-22 23:23)
【系统环境|】用Python构建智能推荐系统:技术赋能美好生活(2025-11-22 23:23)
【系统环境|】企业估值中的氢能源应用评估(2025-11-22 23:22)
【系统环境|】ansible 学习之路(2025-11-22 23:22)
手机二维码手机访问领取大礼包
返回顶部