Тесты Python терпят неудачу в контейнере Docker, но проходят, когда я копирую папку в другое место - PullRequest
0 голосов
/ 17 июня 2019

Запуск образа докера linux openjdk8 с Python3 и pytest и с использованием Mac OS.

Я строю свой контейнер докера с помощью команды COPY для копирования файлов в докер.Когда я запускаю свои тесты, они не могут скомпилировать тестируемый модуль python, т.е. app.py.Но если я скопирую папку приложения в контейнере в новое место, тесты пройдут в новом месте!То же самое происходит, если я просто использую том для сопоставления с каталогом хоста и запускаю тесты.

Я запустил BeyondCompare для папок (оригинал и копия, скопированная в новое местоположение), и их файлы имеют двоичный эквивалент!

ImportError while importing test module '/myapp/tests/unit/test_handler.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:

    /mypath/myapp/tests/unit/test_handler.py:12: in <module>
        ???
    E   ModuleNotFoundError: No module named 'app'

    ----------- coverage: platform linux, python 3.7.3-final-0 -----------
    Name    Stmts   Miss  Cover
    ---------------------------

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
========================================================================= 1 error in 0.28 seconds ==========================================================================
Makefile:39: recipe for target 'tests' failed
make: *** [tests] Error 2

Makefile

VENV_BIN=$(shell pwd)/${VENV_NAME}/bin
PYTHON=${VENV_BIN}/python    

${PYTHON} -m pytest --cov=app --cov-report html:cov_html --cov-report term --cov-report xml:cov.xml --cov-report annotate:cov_annotate tests/ -v -s --last-failed

Запуск напрямую (та же проблема)

./venv/bin/python3 -m pytest ./tests

Опять же, если я создаю образ с подходом "копировать в новое местоположение" вDockerfile, я могу успешно выполнить тесты.Но если я не скопирую файлы в новое место в Dockerfile, тесты не пройдут!

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

Команда ssed для его интерактивного запуска

docker run --rm -v /pathtomyapp/myapp:/myapp -it 999MyImageId /bin/bash

Вопрос: Как запустить тесты суспех, без необходимости сначала копировать папку приложения в новое место?Что вызывает проблему и почему тесты проходят в новом месте (даже если нет различий в файлах)?

Любые идеи с благодарностью приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...