【问题标题】:What is the best way to run selenium tests in AWS CI/CD pipeline在 AWS CI/CD 管道中运行 selenium 测试的最佳方法是什么
【发布时间】:2019-07-16 07:17:53
【问题描述】:

我被分配了一项任务,将我开发的自动化测试集成到 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

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

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

  • 在 CI/CD 管道上运行 selenium 测试的最佳方法是什么?
  • maven 项目应该单独运行还是在 docker 容器内运行?
  • docker 容器是否应该仅充当执行测试的环境?

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

【问题讨论】:

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


    【解决方案1】:

    我使用了两种方法:

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

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

    在这两种情况下,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
    

    【讨论】:

      【解决方案2】:

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

      对于希望实施频繁交付方法(如持续集成和交付)的软件开发团队来说,减少测试执行时间是关键

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

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

      Docker 有助于通过非常简单的步骤使用 Grid 设置测试实验室,同时有助于消除所有复杂性,而 Docker 专长是

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

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

      CI/CD 工具:Jenkins vs. TeamCity vs. Bamboo

      什么是詹金斯?

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

      什么是竹子?

      Bamboo 是 Atlassian 的 CI/CD 服务器。与其他 CI/CD 服务器一样,Bamboo 允许开发人员自动构建、集成和测试源代码,然后准备应用程序进行部署。 Bamboo 还可以与 Atlassian 的其他工具(例如 Jira)无缝协作

      什么是 TeamCity?

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

      因此,请根据您的应用程序和测试依赖项和要求以及您希望在一天结束时实现的目标 - 您的目标给出一个思考过程。 首先进行设计和方法的工作,然后再进行实施。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-11
        • 1970-01-01
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-24
        • 2021-09-06
        相关资源
        最近更新 更多