如何在 CircleCI 上设置并发服务进行测试?

How do I setup concurrent services on CircleCI for Testing?

我有一个应用程序,运行它使用 Jasmine 和 WebdriverIO 进行测试,我想在 CircleCI 中实现自动化。我是一般测试的新手,所以我不确定该怎么做。

这是我所知道的:

以下是我不完全理解的内容:

为了清楚地回答您的问题,我将按如下方式引用您的每个命令:

  1. 为了运行考验你运行npm test
  2. 致运行硒你运行npm start selenium
  3. 为了 运行 你的应用你 运行 npm start app

Questions/Answers:

在本地,这些需要 3 个终端同时 运行,有没有办法用 CircleCI 做到这一点?

是的。您只需要启动一个 background 设置为 true

的进程

即要在后台启动 Selenium,您可以 运行 以下

    - run:
        name: Start Selenium in background 
        command: |
          npm start selenium
        background: true

启动进程后,但在使用它之前,等待进程在给定端口上就绪

    - run:
        name: Waiting for Selenium server to be ready
        command: |
          for i in `seq 1 10`;
          do
            nc -z localhost 4444 && echo Success && exit 0
            echo -n .
            sleep 1
          done
          echo Failed waiting for Selenium && exit 1

注意如果你在上面的命令中替换4444,你可以在另一个端口等待一个进程

如何判断 p4444 和 p80 何时准备好进行测试,或者在测试完成后取消它们?

您的 CircleCi 命令可能如下所示

     - run:
        name: Start Selenium in background 
        command: |
          npm start selenium
        background: true
    - run:
        name: Start App in background 
        command: |
          npm start app
        background: true

    - run:
        name: Waiting for Selenium server to be ready
        command: |
          for i in `seq 1 10`;
          do
            nc -z localhost 4444 && echo Success && exit 0
            echo -n .
            sleep 1
          done
          echo Failed waiting for Selenium && exit 

      - run:
        name: Waiting for App server to be ready
        command: |
          for i in `seq 1 10`;
          do
            nc -z localhost 80 && echo Success && exit 0
            echo -n .
            sleep 1
          done
          echo Failed waiting for Selenium && exit 

   - run:
        name: Run Tests 
        command: |
          npm test 

您问了一个单独的问题 - 测试完成后如何取消端口 4444 和 80 上的进程?你真的不需要。当测试作业完成时,容器将被释放,辅助应用程序将停止。

但是,如果您想停止这些进程以便 运行 一些其他作业步骤,您可以 运行 终止命令(如果不清楚我可以详细说明)

我的问题是 Docker 还是 CircleCI?

看起来这只是理解如何 运行 CircleCi 中的一系列命令的问题

如果您按照上述步骤操作,您应该能够实现您的目标。