[英]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.