Как настроить параллельные сервисы на CircleCI для тестирования? - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть приложение, которое запускает свои тесты с Jasmine и WebdriverIO, которые я хотел бы автоматизировать в CircleCI.Я новичок в тестировании в целом, поэтому я не уверен, что делать.

Вот что я знаю:

  • Для запуска тестов я вызываю npm test
  • Требуется сервер селена на порту 4444 (который я могу запустить с npm start)
  • Приложение должно работать на порту 80 (который я могу обслуживать с помощью другой команды npm)
  • Когда тесты завершены, я возвращаюсь в командную строку, но другие службы (на p4444 и p80) все еще работают

Вот что я не до конца понимаю:

  • Локально, для одновременной работы требуется 3 терминала, есть ли способ сделать это с CircleCI?
  • Если это так, как я могу узнать, когда p4444 и p80 готовы к тестированию наили отменить их по окончании тестов?
  • Моя проблема с Docker или CircleCI?

1 Ответ

0 голосов
/ 04 марта 2019

Чтобы четко ответить на ваши вопросы, я буду ссылаться на каждую из ваших команд следующим образом:

  1. Для запуска тестов вы запускаете npm test
  2. Для запускаселен вы запускаете npm start selenium
  3. Для запуска приложения вы запускаете npm start app

Вопросы / Ответы:

Локально, для одновременной работы требуется 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, когда тесты пройдены?Вам действительно не нужно.Когда тестовое задание завершится, контейнер будет удален, а вспомогательные приложения остановятся.

Однако, если вы хотите остановить эти процессы, чтобы выполнить некоторые другие шаги задания, вы можете запустить команды kill (я могу уточнитьесли это неясно)

Это моя проблема с Docker или CircleCI?

Похоже, это просто проблема в понимании того, как запустить серию команд в CircleCi

Если вы выполните описанные выше шаги, вы сможете достичь своей цели.

...