在AWS CI / CD管道中运行硒测试的最佳方法是什么

时间:2019-02-22 08:31:40

标签: selenium docker continuous-integration continuous-deployment aws-codepipeline

我被分配了将我开发的自动化测试集成到AWS CI / CD管道的任务,现在我正在研究如何实现此任务一段时间。经过研究后,我发现很多人都使用了诸如Jenkins / Docker之类的工具来完成此任务,即使在进行了所有研究之后,我仍然对实现此目标的最佳方法感到困惑,但其中一些文档我发现了,

http://www.testautomationguru.com/selenium-webdriver-how-to-run-automated-tests-inside-a-docker-container/

https://www.pawangaria.com/post/docker/how-to-use-docker-with-webdriver/

https://aws.amazon.com/blogs/devops/using-aws-codepipeline-aws-codebuild-and-aws-lambda-for-serverless-automated-ui-testing/

https://dzone.com/articles/qa-automation-pipeline-learn-how-to-build-your-own-1

我应该做的是,一旦开发人员正在处理的Web应用程序通过管道部署,我将不得不通过管道运行硒测试,以检查Web应用程序是否正确部署。 (这是我需要澄清实现此目标的最佳方法的地方)

我用硒脚本构建了一个maven项目,以检查Web应用程序上的内容,因为现在我已经在脚本中使用了虚拟网址,这是maven项目

https://github.com/nimeshdilshan96/pipeline-script-test.git

这是我到目前为止所做的,

在这一点上,我真的很困惑,坚持应该做什么,这是我在寻找答案的一些问题,

  • 在CI / CD管道上运行硒测试的最佳方法是什么?
  • maven项目应该单独运行还是在docker容器中运行?
  • 泊坞窗容器是否仅应作为执行测试的环境?

任何帮助将不胜感激,在此先感谢:)

2 个答案:

答案 0 :(得分:1)

理解问题陈述后,很明显,您正在寻找CI / CD工具以及测试用例的并行实现,以减少执行时间。

减少测试执行时间对于希望实施频繁交付方法(例如持续集成和交付)的软件开发团队而言至关重要。

首先,我们将了解CI / CD工具是Jenkins,Bamboo或Team City。另一方面,实现并行或分布式测试用例执行的不同方法是使用Selenium Grid和Docker

使用 Selenium Grid ,可以在多台计算机上并行运行多个测试,从而将执行时间从数天缩短至数小时。

Docker 在非常简单的步骤中为使用Grid设置测试实验室提供了很多帮助,同时帮助消除了所有复杂性和Docker Specialties。

使用预制容器启动和运行比尝试从头开始设置Selenium要快得多。您不需要安装Java #winning。

您不需要安装所有必需的浏览器。也许您不想安装Firefox或不想使用特定的较旧版本的Chrome或具有特定插件或功能的版本进行测试?

CI / CD工具:詹金斯vs. TeamCity vs. Bamboo

什么是詹金斯?

Jenkins是当今市场上最受欢迎的开源CI / CD工具。 Jenkins允许开发人员在将代码提交到源存储库后立即自动构建,集成和测试代码。这使开发人员可以迅速发现错误,并最终更快地进行部署。

什么是竹子?

Bamboo是Atlassian的CI / CD服务器。与其他CI / CD服务器一样,Bamboo允许开发人员自动构建,集成和测试源代码,然后为部署做好准备。 Bamboo还可以与Atlassian的其他工具(例如Jira)无缝配合使用

什么是TeamCity?

TeamCity是另一台商用CI / CD服务器,这次来自JetBrains公司。它以其极其简单的设置和精美的用户界面而闻名。

因此,请根据您的应用程序进行测试,并测试依赖项和要求以及最终要实现的目标-您的目标。 首先进行设计和方法方面的工作,然后再进行实施。

答案 1 :(得分:1)

我使用了两种方法:

  1. 使用测试套件设置Docker并在本地进行调试。然后使用AWS CodeBuild的“ docker”映像部署Dockerfile。

  2. CodeBuild可以使用“硒”映像https://github.com/awslabs/serverless-automated-ui-testing/blob/master/automated-ui-testing.yaml#L480,而不是Dockerfile,您可以在codebuild.yml中提供说明。

在两种情况下,CodePipeline均包含4个步骤:

  • 抓取源(代码和测试)
  • 构建项目(使用代码)
  • 部署测试项目
  • 运行硒(使用测试)

每个步骤都会产生输出,供下一步使用。部署步骤生成硒可以使用的URL。在我的情况下,“部署”正在部署CloudFormation堆栈,但它也可以将必要的文件复制到S3存储桶或使用其他方法。

我的设置与https://aws.amazon.com/blogs/devops/using-aws-codepipeline-aws-codebuild-and-aws-lambda-for-serverless-automated-ui-testing/类似,但更简单。

挑战

最大的问题是获得硒,浏览器和WebDriver的正确组合。关于如何执行有不同的指南。尝试适合您的方法,所有实现都是混乱的,但是我认为Docker更可靠。

示例docker-compose:

version: '2'
services:
  hub:
    image: selenium/hub:3.3.1
    ports: 
      - "4444:4444"
  chrome:
    image: selenium/node-chrome:3.3.1
    links: 
      - hub
    environment:
      HUB_PORT_4444_TCP_ADDR: hub
      HUB_PORT_4444_TCP_PORT: 4444
      DBUS_SESSION_BUS_ADDRESS: /dev/null

  firefox:
    image: selenium/node-firefox:3.3.1
    links:
      - hub
    environment:
      HUB_PORT_4444_TCP_ADDR: hub
      HUB_PORT_4444_TCP_PORT: 4444

  phantomjs:
    image: selenium/node-phantomjs:3.3.1
    links:
      - hub
    environment:
      HUB_PORT_4444_TCP_ADDR: hub
      HUB_PORT_4444_TCP_PORT: 4444
      PHANTOMJS_OPTS: "--ignore-ssl-errors=true"

  b3-test:
    build: .
    volumes: 
      - ./logs:/app/survey-tests/logs
      - ./screenshots:/app/survey-tests/screenshots
    environment:
      - BTEST_DRIVER=REMOTE
      - BTEST_REMOTE=http://hub:4444/wd/hub