首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pytest模拟AWS SecurityManager

Pytest模拟AWS SecurityManager
EN

Stack Overflow用户
提问于 2020-08-05 19:25:30
回答 1查看 1.4K关注 0票数 0

我的项目有一个名为config.py的文件,其中包含以下代码:

代码语言:javascript
复制
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', "{}"))

我需要在所有枚举调用的pytest测试中以某种方式模拟get_secret,例如Secret.DATABASE_A.secret ()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-05 19:59:51

您可以使用monkeypatch覆盖get_secret()的行为。我已经将get_secret()方法变成了秘密类的静态方法,但是您可以将它作为任何模块的一部分,也可以导入它。只需确保您在monkeypatch.setattr()调用中也进行了更改。

代码语言:javascript
复制
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"

这将返回到1通过测试。

这里发生的事情是,我也在我的test_secret_method中创建了一个函数test_secret_method,然后用这个新方法覆盖Secret.get_secret()。现在,您可以在您的test_method中使用秘密类,并确保'get_secret()‘方法将返回什么而不实际运行原始代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63272253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档