测试引用层中包含的模块的 Lambda 函数

Testing Lambda Functions that reference modules included in a layer

我一直在使用 Python 3.8 运行时开发 CRUD SAM 应用程序。我的 lambda 函数引用了一个 lambda 层,该层具有在函数之间共享的代码。我的应用程序 builds/deploys 并且我可以在本地调用这些函数,但是,在编写单元测试(使用 pytest)时,我不确定如何绕过引用行中与文件结构不匹配的层的导入.

文件结构:

.
├── template.yaml
├── _layer-folder
│   └── _python
│       └── shared_code.py 
├── _lambda
│   ├── some_function.py
│   └── _tests
│       └── test-some-function.py

当 运行 我测试我的 lambda 函数时,当我引用位于共享层中的模块时出现导入错误。例如:

from some_module_in_a_layer import some_layer_function

有没有办法配置 pytest 在 运行 测试时引用正确的文件目录?

正确测试图层确实很痛苦,这在某种程度上取决于您 运行 测试的方法(例如,在 Pycharm 中或使用终端)。在 PyCharm 中,您可以将图层目录添加为 source(右键单击用作源)。从终端 运行 你可以在 运行ning 之前将它添加到你的 PYTHONPATH,但它非常难看。 所以PYTHONPATH='/path/to/layer' python main.py

它不是很漂亮,但我不知道还有什么方法可以解决这个问题。

我最终通过在测试时附加到系统路径或 运行 在我的 __init__.py 文件中本地解决了这个问题。

if os.environ.get("ENVIRONMENT") == "test":
    sys.path.append(os.getcwd() + '/path/to/layer')