Concourse CI - 如何运行功能测试?

时间:2016-06-20 10:19:56

标签: continuous-integration docker-compose functional-testing webtest concourse

我们正处于从Jenkins迁移到Concourse CI的过程中,到目前为止一切都非常顺利。但现在我有问题,我不知道如何解决。我想从社区得到任何建议。

我想做的是可以使用Selenium运行集成或功能(Web)测试的工作。我们几乎没有问题:

  1. 要运行Web测试,我需要设置数据库(以及可选的搜索引擎,代理等)代理,尽可能地模仿生产环境。 理想情况下,它应该由 docker-compose
  2. 设置
  3. 此数据库服务应与我的测试并行运行
  4. 此数据库服务不应返回任何内容,既不会返回错误也不会成功,因为它只会启动数据库而不会启动任何其他内容
  5. 在数据库准备好之前,不应启动我的网络测试
  6. 当所有网络测试完成后,应停止此数据库服务
  7. 正如您所看到的,这是非常重要的任务。当然,我可以创建一个包含我需要的所有内容的超级容器,但这是一个糟糕的解决方案。另一种选择是为此创建一个shell脚本,但这不够灵活。

    我是否有任何示例可以为此问题实施该做法或良好做法?

    谢谢!

3 个答案:

答案 0 :(得分:6)

从版本1.3.0开始,您可以在任务中运行Docker-compose:https://concourseci.slack.com/archives/general/p1466556331001964

这似乎有效:

jobs:
  - name: docker-compose
    public: true
    serial: true
    plan:
      - do:
        - task: docker-compose
          timeout: 20m
          privileged: true
          config:
            platform: linux
            image_resource:
              type: docker-image
              source: {repository: "mumoshu/dcind", tag: "latest"}
            run:
              path: sh
              args:
                - -exc
                - |
                  source /docker-lib.sh
                  start_docker
                  docker ps
                  docker-compose version

答案 1 :(得分:3)

这是Concourse作者的评论:

  

主机上没有Docker二进制文件或套接字 - 它们只是运行Garden后端(可能是Guardian)。 Concourse在Docker上方的抽象层运行,因此提供任何类型的魔法都没有用。

     

1.3之后缺少的一件事是Docker要求你自己设置cgroup。我忘记了那是多么烦人。我希望他们做的是Guardian所做的并自动配置它,但是你可以做什么。

     

因此,完整的说明是:

     

在其中使用或构建带有泊坞窗的图像,例如泊坞窗:DIND。      在任务开始时运行以下命令:https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh#L1-L40      使用docker daemon&。

启动Docker      

然后你可以照常运行docker-compose和朋友。

     

这样做的缺点是你每次都会获取图像。 #230将解决这个问题。

     

从长远来看,#324(评论)是我想要的方向。

请参阅此处https://github.com/concourse/concourse/issues/324

在接受的答案中,Slack档案数据被删除(由于Slack限制)

专用于用例的docker镜像:https://github.com/meAmidos/dcind

答案 2 :(得分:0)

这对我来说听起来并不复杂。我写了一篇关于如何使类似的东西运行here的帖子。我使用一些不同的容器用于堆栈和测试运行器并从官方docker中启动所有内容:在其上安装了docker-compose的dind图像......

除了通常的大厅CI资源获取等。 执行测试运行包括:

  1. 使用docker-compose启动网络,休息和其他服务。
  2. 启动Testrunner服务并启动测试套件 与剩余层通信的网页,而后者又是 取决于其他服务的回复。
  3. 在测试运行器完成时执行docker-compose 基于确定任务的返回码(0 =失败,1 =成功) 测试套件的返回代码。
  4. 要干净地设置和拆除堆栈和测试运行器,您可以执行类似下面的操作(如果您的服务在测试开始时未启动,可能您可以使用depends,对我而言,它可以正常工作)< / p>

    # Setup the SUT stack:
    docker-compose up -d
    ‌‌
    # Run the test-runner container outside of the SUT to be able to teardown the SUT when testing is completed:
    docker-compose run --rm test-runner --entrypoint '/entrypoint.sh /protractor/project/conf-dev.js --baseUrl=http://web:9000/dist/ --suite=my_suite'
    ‌‌
    # Store the return-code from the tests and teardown:
    rc=$?
    docker-compose down
    echo "exit code = $rc "
    kill %1
    exit $rc