t.me/atinfo_chat Telegram группа по автоматизации тестирования

Docker и CypressIO - Тесты не ранятся из-за “Cypress could not verify that the server set as your 'baseUrl' is running” ошибки

docker
cypressio
javascript
Теги: #<Tag:0x00007f9c5af8d588> #<Tag:0x00007f9c5af8d2b8> #<Tag:0x00007f9c5af8d150>

(Alex M) #1

Привет! Буду благодарен за любую помощь. Есть тесты, написанные на JS + CypressIO. Тесты ранятся локально без единой проблемы и все проходят. Пытаюсь запихнуть все это в докер, но получаю ошибку

Cypress could not verify that the server set as your 'baseUrl' is running:
cypress    |
cypress    |   > http://localhost:3000
cypress    |
cypress    | Your tests likely make requests to this 'baseUrl' and these tests will fail if you don't boot your server.
cypress    |
cypress    | Please start this server and then run Cypress again.

Все мои тесты внутри src/specs папки, что описано в cypress.json . Так как я новенький с Докером - прикрепляю и файлы, может там чего напартачил.

Dockerfile:

FROM  cypress/browsers:chrome69
WORKDIR .

COPY package.json .
COPY package-lock.json .

ENV CI=1
RUN npm ci

RUN npx cypress verify

COPY /src .
COPY /cypress .
COPY cypress.json . 

docker-compose.yml

version: '3'
services:

   cypress:
        image: cypress
        build: .
        container_name: cypress
        command: npm run test

Перепробовал уже кучу вариантов, менял уже все, что мог) Может порт нужно прописать в docker-compose.yml?

Спасибо!


(Alex M) #2

Разобрался :slight_smile:

localhost у Docker image свой, нужно было просто поменять его :man_facepalming:


#3

Все правильно, по localhost лезет у себя в контейнере.
Так нужно указывать норм адресс, если тестируемое приложение в другом контейнере - указать можно название контейнера, но прежде надо пробросить сеть докера (приложение и тесты должны быть в одной сети). Если же Вы запускаете приложение и тесты одним докер-компоуз файлом, то можно указывать только название сервиса (services).
И еще пара советов:

  • Оптимизируйте Докерфайл, там у вас много Copy комманд, можно сделать одной скопировав все содержимое папки с тестами
  • Создайте папку для тестов в контейнере, так удобней чуть-что искать потом, чем когда все файлы и папки разбросаны в корневом каталоге
  • Сделайте volume в докер-компоуз, чтоб при изменениях не перебилдживать каждый раз контейнер

Как пример:

FROM  cypress/browsers:chrome69

MKDIR /code
WORKDIR /code
COPY . ./

ENV CI=1
RUN npm ci

RUN npx cypress verify
version: '3'
services:

   cypress:
       container_name: cypress
       build:
           context: .
           dockerfile: ./Dockerfile
       volumes:
           - ./:/code 
       command: npm run test

(Alex M) #4

Спасибо большое за советы! :slight_smile: Буду пробовать.


(Alex M) #5

@Sando, а если используется volume с docker-compose, то нужно ли мне повторно все копировать еще на имедж?
Я же правильно понимаю, что volume монитрует мою локальную папку, чтобы она была доступна прям сразу с докер имеджа?
Что лучше использовать - volume или copy\add - для запуска тестов через CI?

Спасибо за ответы.


#6

Copy/add и volume у Вас на разных этапах.
Copy/add вы делаете в Dockerfile чтоб сбилдить имидж, в docker-compose volume используете для удобства, но docker-compose запускает уже сбилдженный имидж, скорей всего Вам просто на CI не понадобится docker-compose с volume ))