Jenkins+Docker搭建持续集成测试环境

Jenkins+Docker搭建持续集成测试环境

本文将重点讨论在Jenkins管理的持续集成以及测试的环境中,我们如何通过引入Docker来优化资源的配置,提高整个环境的性能以及稳定性。

关于Jenkins

Jenkins是被广泛应用的持续集成、自动化测试、持续部署的框架,甚至有些项目组顺便将其用来做流程管理的工具。根据任务的多寡,Jenkins通常有两种典型的部署方式。

  1. 单节点(Master)部署
    这种部署适用于大多数项目,其构建任务较轻,数量较少,单个节点就足以满足日常开发所需。
  2. 多节点(Master-Slave)部署
    通常规模较大,代码提交频繁(意味着构建频繁),自动化测试压力较大的项目都会采取这种部署结构。在这种部署结构下,Master通常只充当管理者的角色,负责任务的调度,slave节点的管理,任务状态的收集等工作,而具体的构建任务则会分配给slave节点。一个Master节点理论上可以管理的slave节点数是没有上限的,但通常随着数量的增加,其性能以及稳定性就会有不同程度的下降,具体的影响则因Master硬件性能的高低而不同。

关于Docker

Docker是一款针对程序开发人员和系统管理员来开发、部署、运行应用的一款虚拟化平台。Docker 可以让你像使用集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的差异。Docker 会尽可能的缩短从代码测试到产品部署的时间。简单来说Docker提供了一种技术,可以让开发人员方便地将应用代码已经运行时的环境一并打包到一个镜像中,然后将这个镜像上传至镜像仓库。在测试或者产品环境只需要下载这个镜像然后将其启动就完成了部署(就好比打开一个集装箱那么简单)。关于Docker更详细的内容请参考官网文档

当前Jenkins遇到的困难

随着敏捷开发的普及,自动化测试成为每个项目的必须。一个经过多年开发的项目,其累积的自动化测试数量是惊人的。为了保证每次的部署都是正确的,就需要每次回归所有的自动化测试用例。根据项目的不同,有些需要每周跑一轮回归测试,而有些项目则需要每天一轮。所以我们会把所有的测试用例进行分组,同时在多台测试机上运行,以减少一轮测试所需要的时间。而这就要求我们有足够多的硬件资源来满足这需求。下图展示了一个典型的通过Jenkins来管理自动化测试的拓补结构。一台Master主机管理多台测试机,Master将测试任务分配给测试机。
当前Jenkins(Master-Slave)结构当前Jenkins(Master-Slave)结构
这种结构存在一些缺陷:

  1. 自动化的测试通常都是通过捕捉屏幕控件来模拟用户的行为以达到测试的目的,这就意味着一台测试机上只能同时运行一组测试用例,否则用例之间就会相互干扰。这就存在资源浪费,因为测试机的配置往往可以支持多组测试用例。
  2. 维护人员得确保测试机都保持在线,当测试机器数量较多的时候,比如100台甚至1000台的时候,这维护的压力就比较大。
  3. 通常回归测试是在晚上运行(如此就能在开发组第二天上班时发现前一天提交的代码是否正确),但这上百台测试机不论白天晚上都在工作状态,这是另一维度的浪费。
  4. 很重要的一点,测试机器会因为各种原因导致测试环境被污染,导致测试不能顺利进行,而此时除了维护人员手工处理外,没有特别好的方案。
  5. 之前我们提到过,当slave数量达到一定程度的时候,作为Master的节点就会出现性能变差,稳定性下降。
  6. 每个Slave节点在开始跑测试之前都需要从中央库下载最新的分发包,解压,设定运行环境。这个过程通常也占用不少时间,想象一下,突然间上百个slave开始下载最新的库,这对中央库是一个极大的冲击。

如何引入docker来解决这些问题

很自然的一个想法就是将测试机全部替换成Docker容器(container),而管理这些容器的工作交给更专业的工具,如google的Kubernetes或者Docker官方提供的Swarm。所有构建的环境都打包进Docker的镜像文件中,自动化测试是一个镜像,编译单元测试是一个镜像等等。改进后的拓扑结构如下图所示:
引入Docker以后的结构引入Docker以后的结构
在这个方案中唯一的技术问题是自动化测试需要桌面系统,而通常Docker容器中运行的都是无图形界面的应用。解决的方法也非常直接,我们在容器中提供桌面系统(VNC服务)。根据不同的linux发行版本,我们可以选择tightvnc或者tigervnc。不论选择哪种vnc服务,他们都提供一个虚拟桌面,可以通过vnc的客户端远程连接到该桌面进行操作。
对应前文提到的6个不足,在这种结构下悉数得到了解决。

  1. 每个测试机可以同时运行多组自动化测试用例,也就是说跑原来相同数量的回归测试,这种方案下可以至少节省一半的测试机。
  2. 通过Kubernetes或者swarm,我们可以实现对容器的自动化管理,从而减轻维护人员的工作。
  3. Docker容器可以根据需要动态增减,又因为构建所需的一切环境都被封装在Docker的镜像中,这些测试机器可以被方便的用于其他任务的构建,而不需要进行额外的配置。只需要下载其他构建任务的镜像,然后将其启动。
  4. 每次测试启动一个全新的容器,所以环境是完全干净的。当某个容器出现问题的时候,这个容器就会被销毁,同时新起一个容器完成相同的测试工作。
  5. 在这种结构下Jenkins只需要管理一个slave节点,而Kubernetes和swarm则可以管理成千上万个容器。
  6. 在同一个Docker环境中(同一台测试机)只需要下载一次最新的自动化测试的镜像就能起多个容器,而在这种结构下,测试机数量已经大大减少,从而对中央库(私有镜像仓库)的冲击也明显减轻了。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建一个接口自动化测试框架可以使用以下工具和技术: 1. Python:作为主要开发语言,可以使用Python来编写测试脚本和测试用例。 2. Pytest:一款功能强大的Python测试框架,可以用于编写和运行测试用例,并提供丰富的断言和报告功能。 3. Allure:一个开源的测试报告生成工具,可以生成美观且易于理解的测试报告,支持多种语言和框架。 4. Git:版本控制工具,用于管理和同步测试代码。 5. Jenkins:一个持续集成和持续交付工具,可以自动化运行测试用例并生成测试报告。 6. Docker:容器化平台,可以用于创建和管理测试环境,提供一致的运行环境。 下面是搭建接口自动化测试框架的步骤: Step 1: 创建项目结构 在本地创建一个目录作为项目根目录,然后在根目录下创建以下子目录: - `tests`:存放测试脚本和测试用例; - `reports`:存放测试报告; - `config`:存放配置文件; - `utils`:存放一些工具类和函数。 Step 2: 编写测试用例 在`tests`目录下编写测试脚本和测试用例。可以使用Pytest来组织和执行测试用例,使用断言来验证测试结果。 Step 3: 配置Allure报告 在`config`目录下创建一个`pytest.ini`文件,配置Allure报告的相关参数,例如报告保存路径、报告标题等。 Step 4: 运行测试用例 使用Pytest运行测试用例,并生成Allure报告。可以使用命令行或者集成到Jenkins中进行自动化执行。 Step 5: 集成Git和Jenkins 将项目代码托管到Git仓库中,并在Jenkins中配置相关任务,使其在代码提交后自动触发测试用例的运行和报告的生成。 Step 6: 创建Docker镜像(可选) 使用Docker测试环境打包成镜像,方便部署和维护。 一些可能出现的问题和解决方法: 1. 安装依赖:在搭建过程中,可能会遇到安装依赖包的问题。可以使用pip来安装所需的Python包,并注意版本兼容性。 2. 配置问题:在配置Allure和Jenkins时,可能会遇到配置不正确或缺少必要参数的问题。可以参考官方文档或者搜索解决方案来解决这些问题。 3. 报告生成失败:如果生成Allure报告失败,可以检查相关依赖是否安装正确,以及路径和权限是否设置正确。 4. 测试环境问题:如果测试用例在不同环境中运行时出现问题,可以考虑使用Docker来创建一致的测试环境,或者在测试用例中添加环境适配代码。 相关问题: 1. 除了Allure,还有哪些常用的测试报告生成工具? 2. 如何在Pytest中使用断言来验证测试结果? 3. 如何在Jenkins中配置任务来触发自动化测试? 4. 除了接口自动化测试,还有哪些类型的自动化测试可以使用Python实现?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值