在boto3中模拟特定的AWS客户端异常

时间:2018-07-16 21:20:49

标签: python-3.x mocking aws-sdk boto3

我编写了一些代码,这些代码使用在处理Cloudwatch日志时引发的特定客户端异常。不仅仅是捕获通用的ClientError异常,我还捕获了潜在的异常,因此我可以以不同的方式处理它们。

例如:

res = None
    while res is None:
        try:
            res = self.logs_client.describe_log_streams(logGroupName=self.log_group)
        except self.logs_client.exceptions.ThrottlingException:
            time.sleep(1 + random.random())

因此,如果在通话过程中发生ThrottlingException,则会处理并重试异常(可能不是最好的方法,但它“有效”:))

我在其他地方也有类似的异常处理,可以捕获客户机上引发的其他异常。现在,我想模拟这些在单元测试中引发的异常。我尝试过基于Exception创建一个伪类,并通过describe_log_streams的模拟来提出它,但是无论如何我总是得到:

TypeError: catching classes that do not inherit from BaseException is not allowed

我尝试过:

def thrower():
    raise MockCloudWatchClass.exceptions.ThrottlingException()

mock_client.describe_log_streams.side_effect = thrower

,其类定义为:

class MockCloudWatchClass:
    class exceptions(Exception):
        class ThrottlingException(Exception):
            def __init__(self):
                super().__init__()

非常感谢您的帮助

0 个答案:

没有答案