Запуск Pytest во время сборки докера

Структура моих проектов выглядит следующим образом.

app/
    docker-compose.yml
    test_some_pytest.py # this have some pytest code.
    tests.Dockerfile

мой tests.Dockerfile выглядит следующим образом.

from python:3.4-alpine
RUN python --version
RUN pip --version
COPY . /APP
WORKDIR /APP
RUN pip install pytest
RUN ["pytest"]

и docker-compose.yml следующим образом.

services
  tests:
    build:
      context: .
      dockerfile: tests.Dockerfile

Когда я бегу docker-compose up --build tests. pytest также запускается, но, вероятно, в другом месте. он показывает следующий вывод.

.
.
.
Removing intermediate container 96f9a8ba43d2
 ---> 82c89715d4c0
Step 7/7 : RUN ["pytest"]
 ---> Running in c30ee497e5f5
============================= test session starts ==============================
platform linux -- Python 3.4.10, pytest-4.6.11, py-1.10.0, pluggy-0.13.1
rootdir: /python-test-calculator
collected 0 items

========================= no tests ran in 0.00 seconds =========================
The command 'pytest' returned a non-zero code: 5
ERROR: Service 'tests' failed to build : Build failed

Вы намерены запускать pytest во время строить (при создании образа) или во время бежать (при запуске контейнера)?

larsks 05.05.2022 22:22

Я не могу воспроизвести описанное вами поведение. Используя ваш Dockerfile и поместив один тест в test_some_pytest.py, тесты запускаются успешно, когда pytest выполняется во время процесса сборки.

larsks 05.05.2022 22:29

@larsks, во время сборки. не могли бы вы поместить свою структуру кода и код файла в качестве ответа или, возможно, по ссылке pastebin?

shivankgtm 05.05.2022 22:32
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
3
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я использую ваш tests.Dockerfile точно так, как написано, следующее docker-compose.yaml:

version: "3"

services:
  tests:
    build:
      context: .
      dockerfile: tests.Dockerfile

И следующее test_some_pytest.py:

def test_something():
    assert True

Он успешно запускается pytest, когда я запускаю docker-compose build:

$ docker-compose build
Building tests

[...]

Step 7/7 : RUN ["pytest"]
 ---> Running in 8d8a1f44913f
============================= test session starts ==============================
platform linux -- Python 3.4.10, pytest-4.6.11, py-1.10.0, pluggy-0.13.1
rootdir: /APP
collected 1 item

test_some_pytest.py .                                                    [100%]

=========================== 1 passed in 0.01 seconds ===========================
Removing intermediate container 8d8a1f44913f
 ---> 055afd5b1f8d
Successfully built 055afd5b1f8d
Successfully tagged docker_tests:latest

Из приведенного выше вывода видно, что pytest обнаружил и успешно выполнил 1 тест.

Спасибо @larsks, кажется, я что-то пропустил. теперь, когда я попытался снова. оно работает. может быть, у вас есть идеи, почему я не могу сделать запрос на получение моего локального хоста из pytest, он говорит Connection Error/ Connection Refused?

shivankgtm 05.05.2022 22:54
localhost внутри док-контейнера означает «этот контейнер». Если вы хотите получить доступ к службе, работающей на вашем хосте, вам нужно использовать IP-адрес одного из не-localhost интерфейсов вашего хоста.
larsks 05.05.2022 22:56

Другие вопросы по теме