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

标签 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 应用程序通过管道部署,我将不得不通过管道运行 selenium 测试以检查 Web 应用程序是否正确部署。 (这是我需要澄清实现这一目标的最佳方法的地方)

我用 selenium 脚本构建了一个 maven 项目来检查 Web 应用程序上的内容,现在我在脚本中使用了一个虚拟 url,这是 maven 项目

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

这是我迄今为止所做的,

  • 我在本地 PC 上运行了一个 docker 容器(这是我使用的 docker 镜像 https://hub.docker.com/r/selenium/standalone-chrome)
  • 我有在 docker 容器上运行测试的 maven 项目

  • 在这一点上我真的很困惑并坚持应该做什么,这里有一些我正在寻找答案的问题,
  • 在 CI/CD 管道上运行 Selenium 测试的最佳方法是什么?
  • Maven 项目应该单独运行还是在 docker 容器中运行?
  • docker 容器是否应该只作为执行测试的环境?

  • 任何帮助将不胜感激,提前致谢:)

    最佳答案

    我使用了两种方法:

  • 使用测试套件设置 Docker 并在本地进行调试。然后使用 AWS CodeBuild 的“docker”镜像部署 Dockerfile。
  • CodeBuild 可以使用“ Selenium ”图像 https://github.com/awslabs/serverless-automated-ui-testing/blob/master/automated-ui-testing.yaml#L480 , 而不是 Dockerfile 您在 codebuild.yml 中提供说明。

  • 在这两种情况下,CodePipeline 都包含 4 个步骤:
  • 获取源代码(代码和测试)
  • 构建项目(使用代码)
  • 部署测试项目
  • 运行 Selenium (使用测试)

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

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

    挑战

    最大的问题是如何获得 selenium、浏览器和 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
    

    关于selenium - 在 AWS CI/CD 管道中运行 selenium 测试的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54822954/

    相关文章:

    java - 在 Selenium WebDriver 中使用特定语言有好处吗?

    Selenium 和单点登录

    docker - 识别 docker 镜像(或应用程序依赖项)中包含的文件

    linux - 错误:2006D002:BIO routines:BIO_new_file:system lib

    jenkins - 如何使用单个作业配置在多个从站上运行 Jenkins 作业?

    python - Selenium:使用 Python 获取元素的坐标或尺寸

    selenium - 如何从 div 标签获取文本并在一行中打印

    django - 由于 “grep -v”带有尾随\r,因此在构建Django应用程序时,Docker编写失败

    git - 如何确定一个分支是否是 jenkins 文件中的默认分支?

    python - 将生菜与 TeamCity 集成