使用Maven与Docker运行Selenium测试

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

  ·使用Web应用程序构建Docker镜像

  · 在Docker容器中运行该应用程序

  · 从不同的容器中使用Maven运行Selenium测试

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

  流水线流程

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

  1. 构建Web应用程序的Docker镜像

  2. 运行3个Docker容器:

  ·上一个操作中生成镜像的容器

  · Selenium服务器容器

  · 带有将运行测试的Maven容器

  3. 根据测试,流水线将给出以下两个结果:

  [测试通过] 推送镜像至Docker注册中心 & 运行镜像于服务器

  [测试失败] 通过Slack给团队发送通知

 

流水线配置

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

 

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

 

操作

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

  构建Docker镜像

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

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

使用Maven配置Selenium测试

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

 

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

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

第一个应该是适用于您的浏览器类型的Selenium服务。在这个例子中,我们将使用Selenium Chrome: 

现在,单击+加号按钮附加另一个,然后选择Custom自定义服务。将其配置为使用我们在上一步中构建的Docker容器:

 

确保设置应用程序将在其上运行的端口(本例为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注册中心:

 

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

  发布应用

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

 

发送通知

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

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

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值