Pytest 模拟 AWS SecurityManager
Pytest Mock AWS SecurityManager
我的项目有一个名为 config.py 的文件,其中包含以下代码:
class Secret(Enum):
DATABASE_A = 'name_of_secret_database_A'
DATABASE_A = 'name_of_secret_database_A'
def secret(self):
if self.value:
return get_secret(self.value)
return {}
def get_secret(secret_name):
session = Session()
client = session.client(
service_name='secretsmanager',
region_name='us-east-1',
)
secret_value = client.get_secret_value(SecretId=secret_name)
return loads(secret_value.get('SecretString', "{}"))
我需要以某种方式模拟 get_secret 在所有枚举调用的 pytest 测试中,例如 Secret.DATABASE_A.secret ()
您可以使用 monkeypatch
覆盖 get_secret()
的行为。我已将 get_secret()
方法设为 Secret class 的静态方法,但您可以将其作为您想要的任何模块的一部分并导入它。请确保您也在 monkeypatch.setattr()
调用中进行了更改。
import pytest
from enum import Enum
class Secret(Enum):
DATABASE_A = 'name_of_secret_database_A'
DATABASE_B = 'name_of_secret_database_B'
def secret(self):
if self.value:
return Secret.get_secret(self.value)
return {}
@staticmethod
def get_secret(secret_name):
session = Session()
client = session.client(
service_name='secretsmanager',
region_name='us-east-1',
)
secret_value = client.get_secret_value(SecretId=secret_name)
return loads(secret_value.get('SecretString', "{}"))
def test_secret_method(monkeypatch):
def get_secret(secret_name):
return "supersecret"
monkeypatch.setattr(Secret, "get_secret", get_secret)
s = Secret.DATABASE_A
assert s.secret() == "supersecret"
这 returns 中有 1 个通过了测试。
这里发生的事情是,我也在 test_secret_method 中创建了一个函数 get_secret()
,然后用那个新方法覆盖了 Secret.get_secret()
。现在,您可以在 test_method 中使用 Secret class 并确定 'get_secret()' 方法将 return 没有实际 运行 原始代码。
我的项目有一个名为 config.py 的文件,其中包含以下代码:
class Secret(Enum):
DATABASE_A = 'name_of_secret_database_A'
DATABASE_A = 'name_of_secret_database_A'
def secret(self):
if self.value:
return get_secret(self.value)
return {}
def get_secret(secret_name):
session = Session()
client = session.client(
service_name='secretsmanager',
region_name='us-east-1',
)
secret_value = client.get_secret_value(SecretId=secret_name)
return loads(secret_value.get('SecretString', "{}"))
我需要以某种方式模拟 get_secret 在所有枚举调用的 pytest 测试中,例如 Secret.DATABASE_A.secret ()
您可以使用 monkeypatch
覆盖 get_secret()
的行为。我已将 get_secret()
方法设为 Secret class 的静态方法,但您可以将其作为您想要的任何模块的一部分并导入它。请确保您也在 monkeypatch.setattr()
调用中进行了更改。
import pytest
from enum import Enum
class Secret(Enum):
DATABASE_A = 'name_of_secret_database_A'
DATABASE_B = 'name_of_secret_database_B'
def secret(self):
if self.value:
return Secret.get_secret(self.value)
return {}
@staticmethod
def get_secret(secret_name):
session = Session()
client = session.client(
service_name='secretsmanager',
region_name='us-east-1',
)
secret_value = client.get_secret_value(SecretId=secret_name)
return loads(secret_value.get('SecretString', "{}"))
def test_secret_method(monkeypatch):
def get_secret(secret_name):
return "supersecret"
monkeypatch.setattr(Secret, "get_secret", get_secret)
s = Secret.DATABASE_A
assert s.secret() == "supersecret"
这 returns 中有 1 个通过了测试。
这里发生的事情是,我也在 test_secret_method 中创建了一个函数 get_secret()
,然后用那个新方法覆盖了 Secret.get_secret()
。现在,您可以在 test_method 中使用 Secret class 并确定 'get_secret()' 方法将 return 没有实际 运行 原始代码。