Тестирование лямбда-функций, ссылающихся на модули, включенные в слой

#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. Я ценю ваш ответ!