繁体   English   中英

找不到如何使用 pytest 测试此代码

[英]Can't find out how to test this code with pytest

我有以下代码,我需要使用 pytest 模拟程序对其进行测试。 我尝试了数十种不同的组合,但找不到一种有效的组合。 你能帮我吗?

    def authenticate(self, account_id, region, role, credential_file) -> dict:
        self.aws_credentials = get_credentials(credential_file)
        sts_client = boto3.client(
            "sts",
            aws_access_key_id=self.aws_credentials["key"],
            aws_secret_access_key=self.aws_credentials["value"],
            region_name=region,
        )
        assumed_role = sts_client.assume_role(
            RoleArn=f"arn:aws:iam::{account_id}:role/{role}",
            RoleSessionName="AssumeRoleSession1",
        )
        return assumed_role["Credentials"]

第一次调用 get_credentials 很容易修补。 但随后我需要模拟 STS 客户端,然后再次模拟假设角色调用。 我试过这个但得到一个断言错误

def test_authenticate(self, mocker):
    def fake_assume_role(RoleArn: str = "", RoleSessionName: str = ""):
        return {"Credentials": "Valid Credentials"}
        
    mocker.patch(
        "get_credentials",
        return_value={"value": "valid_value", "key": "valid_key"},
    )
    mock_sts_client = mocker.patch(
        "boto3.client")
    mock_sts_client.assume_role = fake_assume_role
    auth = pylib.authentication.AWSAuthentication()
    actual_creds = auth.authenticate(
        account_id="123456789012",
        region="far-west-1",
        role="Cyrano",
        credential_file="cred.json"
        )
    assert actual_creds == "Valid Credentials"

我这样做了,它对我有用:

def test_authenticate(self, mocker):
    mocker.patch(
        "get_credentials",
        return_value={"value": "valid_value", "key": "valid_key"},
    )
    mock_sts_client = mocker.Mock()
    mock_sts_client.assume_role.return_value = {"Credentials": "Valid Credentials"}
    mocker.patch('boto3.client', return_value=mock_sts_client)
    auth = AWSAuthentication()
    actual_creds = auth.authenticate(
        account_id="123456789012",
        region="far-west-1",
        role="Cyrano",
        credential_file="cred.json"
        )
    assert actual_creds == "Valid Credentials"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM