4

自动化运维:使用Maven与Docker运行Selenium测试 - devops313

 1 year ago
source link: https://www.cnblogs.com/code313/p/17103316.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在这篇文章中,我们将向您展示如何创建交付流水线并实现以下目标:

  • 使用Web应用程序构建Docker镜像
  • 在Docker容器中运行该应用程序
  • 从不同的容器中使用Maven运行Selenium测试

出于本文演示目的,我们将使用托管在GitHub上的Java示例项目: github.com/buddy-red/node-maven-selenium-tests进行演示。

流水线流程

每次更改存储仓时,流水线将执行以下任务:

  1. 构建Web应用程序的Docker镜像
  2. 运行3个Docker容器:
  • 上一个操作中生成镜像的容器
  • Selenium服务器容器
  • 带有将运行测试的Maven容器
  1. 根据测试,流水线将给出以下两个结果:
  • [测试通过] 推送镜像至Docker注册中心 & 运行镜像于服务器
  • [测试失败] 通过Slack给团队发送通知
pipeline-actions-flow.png
notify-on-failed.png

流水线配置

首先,我们需要在GitHub源代码存储仓库中对Buddy系统进行帐户身份验证:

github-integration.png

接下来,我们新添一条流水线,并将其配置为在每次推送到主分支时自动运行:

test-pipeline.png

我们指定了流水线的目标分支和触发条件,是时候添加将运行任务的操作了。

构建Docker镜像

在操作列表中Docker部分找到如下图的构建镜像

build-image.png

定义Dockerfile和相关联环境(如果它与包含Dockerfile的目录不同)。在本例中是front:

dockerfile-front.png

使用Maven配置Selenium测试

随着Docker镜像的构建和等待,我们需要一个操作来运行测试。在构建工具 & 任务运行部分找到Maven操作或者在搜索框中直接搜索Maven:

maven-action.png

输入将运行测试的命令,例如:mvn clean install :

maven-run.png

现在,我们需要在服务标签页中添加两个微服务,这些本质上是附加并链接到主构建容器的Docker容器。

selenium-service-tab.png
  1. 第一个应该是适用于您的浏览器类型的Selenium服务。在这个例子中,我们将使用Selenium Chrome:
selenium-chrome.png
  1. 现在,单击+加号按钮附加另一个,然后选择Custom自定义服务。将其配置为使用我们在上一步中构建的Docker容器:
another-service.png

确保设置应用程序将在其上运行的端口(本例为80)。这样在应用程序成功启动之前,Maven不会启动测试。

配置Selenium

配置后,该操作将运行3个相互链接的容器:Maven、Selenium和一个自定义容器。为使其工作,我们需要配置测试将连接到的Selenium服务器以及将要运行的应用程序的地址。

在我们的应用程序中,分别在第23、30和第38行进行定义。主机名应映现在Maven操作服务中输入的主机名:

package works.buddy.test;

import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import org.junit.Ignore;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import static org.junit.Assert.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.concurrent.TimeUnit;

public class SeleniumTest {

    private WebDriver driver;

    @Before
    public void setUp() throws MalformedURLException {
        DesiredCapabilities capability = DesiredCapabilities.chrome();
        driver = new RemoteWebDriver(new URL("http://selenium-ch:4444/wd/hub"), capability);
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
    }

    @Test
    public void test1() throws Exception {
      driver.get("http://myapp.com");
        assertEquals("大家好!", driver.getTitle());
    }

  //Error
  @Ignore
    @Test
    public void test2() throws Exception {
      driver.get("http://myapp.com");
        assertEquals("Hello 木日夏复!", driver.getTitle());
    }

    @After
    public void tearDown() {
      driver.quit();
    }

}

主机名hostname主机名等变量可以在流水线中定义为环境变量。如果变量在运行时未解析,则可以使用查找 & 替换操作来交换其值。

推送Docker镜像至注册中心

如果所有测试都已成功通过,则可以将镜像推送到Docker注册中心:

push-image.png

Buddy与Docker Hub、Amazon ECR和Google GCR进行了原生集成。您还可以将镜像推送到您自己的私有注册中心:

push-image-config.png

您可以在我们的文档中找到有关构建推送Docker镜像的更多信息!

镜像存储在注册表中并准备在服务器上发布。使用Buddy,您可以将其部署到Kubernetes、Amazon EKS 或Azure AKS集群,或者您可以在自己的服务器上运行docker-compose

k8s-section.png

相关K8s的更多信息,请查看关于Kubernetes集群上的容器编排指南。

让您的团队知道测试失败,或者您的客户知道新版本正在等待审批,这些是任何软件开发业务的关键,基础上是一个持续构建 - 测试-发布运维。Buddy原生地与最流行的通知服务集成,包括Slack,Discord和Telegram:

notification-section.png

可以添加两个包含不同消息的通知:一个在主要部分中表示已成功完成的操作,另一个在测试或部署失败时发送于失败部分。这样,您就可以随时通知QA团队,保持信息与状态畅通。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK