Структура моих проектов выглядит следующим образом.
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
Я не могу воспроизвести описанное вами поведение. Используя ваш Dockerfile и поместив один тест в test_some_pytest.py
, тесты запускаются успешно, когда pytest
выполняется во время процесса сборки.
@larsks, во время сборки. не могли бы вы поместить свою структуру кода и код файла в качестве ответа или, возможно, по ссылке pastebin?
Если я использую ваш 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
?
localhost
внутри док-контейнера означает «этот контейнер». Если вы хотите получить доступ к службе, работающей на вашем хосте, вам нужно использовать IP-адрес одного из не-localhost
интерфейсов вашего хоста.
Вы намерены запускать
pytest
во время строить (при создании образа) или во время бежать (при запуске контейнера)?