【问题标题】:Testing with LocalStack in a dockerized python environment在 dockerized python 环境中使用 LocalStack 进行测试
【发布时间】:2020-11-02 21:54:18
【问题描述】:

在本地开发 Docker 化的 AWS 应用程序时,一种常见的做法是使用 LocalStack 模拟 Amazon 的服务。让 Python 应用程序在测试时与 LocalStack 对话的一种方法是在 docker-compose 文件中发送 monkeypatch the Boto Client and ServiceResourceuse the "link" feature

不幸的是,Docker-Compose 参考手册建议不要这样做。看来 Docker 可能会删除链接功能。相反,他们建议我们应该使用 docker-compose 文件的内部网络功能。这意味着不是通过 localhost(例如 http://localhost:4566)访问 LocalStack 服务,而是通过类似 http://localstack:4566 的方式访问,前提是服务名称是“localstack”。

有没有办法更改猴子补丁配置以使其正常工作?这是标准的猴子补丁代码:

import localstack_client.session
import pytest


@pytest.fixture(autouse=True)
def boto3_localstack_patch(monkeypatch):
    session_ls = localstack_client.session.Session()
    monkeypatch.setattr(boto3, "client", session_ls.client)
    monkeypatch.setattr(boto3, "resource", session_ls.resource)

没有明显的方法表明测试应该使用不同的主机名,那么我该怎么做呢?

【问题讨论】:

    标签: python docker-compose pytest localstack


    【解决方案1】:

    找到答案:

    @pytest.fixture(autouse=True)
    def boto3_localstack_patch(monkeypatch):
        session_ls = localstack_client.session.Session(localstack_host="localstack")
        monkeypatch.setattr(boto3, "client", session_ls.client)
        monkeypatch.setattr(boto3, "resource", session_ls.resource)
    

    localstack_client.session.Session() 对象接受一个参数localstack_host,如果不在本地主机上,该参数可用于指定如何连接到 LocalStack。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2019-08-28
      • 2020-04-09
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多