Запуск образа докера 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
Вопрос: Как запустить тесты суспех, без необходимости сначала копировать папку приложения в новое место?Что вызывает проблему и почему тесты проходят в новом месте (даже если нет различий в файлах)?
Любые идеи с благодарностью приветствуются!