Concourse CI-如何运行功能测试



我们处于从詹金斯(Jenkins)到Concourse CI的过程中间,到目前为止,一切都非常顺利。但是现在我有一个问题,我不知道如何解决。我想从社区那里得到任何建议。

我要做的是可以使用Selenium进行集成或功能(Web)测试的工作。我们的问题很少:

  1. 要运行Web测试,我需要设置数据库(以及可选的,搜索引擎,代理等...)代理,以尽可能地模仿生产环境。理想情况下,应该通过 Docker-Compose 进行设置。
  2. 此数据库服务应与我的测试并行运行
  3. 此数据库服务不应返回任何内容,既不是错误或成功,因为它仅启动数据库而没有其他任何内容
  4. 在数据库准备就绪之前,我的网络测试不应启动
  5. 当所有网络测试完成后,应停止此数据库服务

您可以看到,这是非常简单的任务。当然,我可以创建一个包含我需要的所有内容的大型Uber容器,但这是不好的解决方案。另一个选择是为此创建一个shell-script,但这还不够灵活。

有什么例子我如何实现此问题或良好的实践?

谢谢!

由于版本1.3.0,您似乎可以在任务中运行docker-compose:https://github.com/concourse/concourse/concourse/issues/sissues/324

这似乎有效:

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

这是Concourse的作者的评论:

主机上没有Docker二进制或插座 - 他们只是在花园后端(可能是监护人)。会议在Docker上方的抽象层上运行,因此提供任何形式的魔术实际上都没有意义。

缺少1.3后缺少的一件事是,Docker要求您自己设置Cgroups。我忘了那是多么烦人。我希望他们做了《卫报》所做的事情并自动配置它,但是你能做什么。

所以,完整的指令是:

使用或用docker构建图像,例如Docker:Dind。 在任务开始时运行以下内容:https://github.com/concourse/docker-image-resource/blob/master/master/assets/common.sh#l1-l1-l40 用Docker守护程序旋转Docker&。

然后您可以按照码头组合和朋友来正常运行。

不利的一面是您每次都会获取图像。#230将解决这个问题。

从长远来看,#324(注释)是我想去的方向。

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

如接受的答案,删除了松弛存档数据(由于限制限制)

docker映像专门用于用户:https://github.com/meamidos/dcind

对我来说听起来并不复杂。我写了一篇有关如何在这里启动和运行的文章。我在堆栈和测试跑步者中使用一些不同的容器,并从官方Docker:Dind Image上启动所有安装的DIND图像...

超越通常的大厅CI挑选资源等。进行测试运行将包括:

  1. 从docker-compose启动网络,休息和其他服务。
  2. 启动TestRunner服务并在与其余层进行通信的网页,这又是依赖于响应的其他服务。
  3. 测试跑者完成后,执行码头组合根据基于任务的返回代码(0 =失败,1 =成功)测试套件的返回代码。

要干净地设置并拆除堆栈和测试跑步者,您可以执行以下操作(也许您可以使用测试开始时没有启动服务的依据,对我来说,它可以使用)

# 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

最新更新