#python-3.x #amazon-web-services #aws-lambda #serverless #aws-sam
Вопрос:
Я работал над приложением CRUD SAM, используя среду выполнения Python 3.8. Мои лямбда-функции ссылаются на лямбда-слой, код которого является общим для функций. Мое приложение строится/развертывается, и я могу вызывать функции локально, однако при составлении модульных тестов (с использованием pytest) я не уверен, как обойти мой импорт, ссылающийся на слой в строке, который не соответствует структуре файла.
Структура файла:
.
├── template.yaml
├── _layer-folder
│ └── _python
│ └── shared_code.py
├── _lambda
│ ├── some_function.py
│ └── _tests
│ └── test-some-function.py
При выполнении тестов для моих лямбда-функций я получаю ошибку импорта, когда ссылаюсь на модуль, который находится на общем уровне. Например:
from some_module_in_a_layer import some_layer_function
Есть ли способ настроить pytest для ссылки на правильный каталог файлов при выполнении тестов?
Ответ №1:
В итоге я решил эту проблему, добавив системный путь при тестировании или локальном запуске в моем __init__.py
файле.
if os.environ.get("ENVIRONMENT") == "test":
sys.path.append(os.getcwd() '/path/to/layer')
Ответ №2:
Действительно, правильно тестировать слои очень сложно, и это отчасти зависит от вашего метода выполнения теста (например, в Pycharm или с помощью терминала). В PyCharm вы можете добавить каталог слоев в качестве source
(щелкните правой кнопкой мыши использовать в качестве источника). Для запуска из терминала вы можете добавить его в свой PYTHONPATH перед запуском, но это довольно некрасиво. Так PYTHONPATH='/path/to/layer' python main.py
Это некрасиво, но я не знаю другого способа исправить это, тбх.
Комментарии:
1. Я ценю ваш ответ!