Stubber 没有 boto3 属性
Stubber has no boto3 attribute
self.cf_client = boto3.client('cloudformation')
self.cf_client_stubber = Stubber(self.cf_client)
print(f" cc {type(self.cf_client_stubber)}")
self.cf_client_stubber.add_response("describe_stacks", self.cf_describe_response,
self.cf_describe_params)
self.cf_client_stubber.activate()
stackList = self.cf_client_stubber.describe_stacks(StackName=self.cf_stack_name, NextToken='xyz')
每当我用 pytest 运行 这个方法时,我都会遇到以下错误:
E AttributeError: 'Stubber' object has no attribute 'describe_stacks'
python/src/example.py:26: AttributeError
是否知道主要问题是什么?
我找到了解决这个问题的方法。
- 调用方法时,不要使用stubber。使用实际的 boto3 客户端。
- 将 stubber 方法按照您要测试的方法的顺序排列,如
add_reponse
。例如,如果在delete_stack
之前调用describe_stacks
,则在测试中在delete_stack
之前添加describe_stacks
;否则找不到方法。
我要添加一个例子,因为接受的答案没有。
来自 docs。
请注意使用 s3
客户端而不是 stubber 来发出请求。
service_response = s3.list_objects(Bucket='test-bucket')
import datetime
import botocore.session
from botocore.stub import Stubber
s3 = botocore.session.get_session().create_client('s3')
stubber = Stubber(s3)
response = {
'IsTruncated': False,
'Name': 'test-bucket',
'MaxKeys': 1000, 'Prefix': '',
'Contents': [{
'Key': 'test.txt',
'ETag': '"abc123"',
'StorageClass': 'STANDARD',
'LastModified': datetime.datetime(2016, 1, 20, 22, 9),
'Owner': {'ID': 'abc123', 'DisplayName': 'myname'},
'Size': 14814
}],
'EncodingType': 'url',
'ResponseMetadata': {
'RequestId': 'abc123',
'HTTPStatusCode': 200,
'HostId': 'abc123'
},
'Marker': ''
}
expected_params = {'Bucket': 'test-bucket'}
stubber.add_response('list_objects', response, expected_params)
stubber.activate()
service_response = s3.list_objects(Bucket='test-bucket')
assert service_response == response
如果您尝试使用 stubber 发出请求,您将收到上述错误
AttributeError: 'Stubber' object has no attribute ...
self.cf_client = boto3.client('cloudformation')
self.cf_client_stubber = Stubber(self.cf_client)
print(f" cc {type(self.cf_client_stubber)}")
self.cf_client_stubber.add_response("describe_stacks", self.cf_describe_response,
self.cf_describe_params)
self.cf_client_stubber.activate()
stackList = self.cf_client_stubber.describe_stacks(StackName=self.cf_stack_name, NextToken='xyz')
每当我用 pytest 运行 这个方法时,我都会遇到以下错误:
E AttributeError: 'Stubber' object has no attribute 'describe_stacks'
python/src/example.py:26: AttributeError
是否知道主要问题是什么?
我找到了解决这个问题的方法。
- 调用方法时,不要使用stubber。使用实际的 boto3 客户端。
- 将 stubber 方法按照您要测试的方法的顺序排列,如
add_reponse
。例如,如果在delete_stack
之前调用describe_stacks
,则在测试中在delete_stack
之前添加describe_stacks
;否则找不到方法。
我要添加一个例子,因为接受的答案没有。
来自 docs。
请注意使用 s3
客户端而不是 stubber 来发出请求。
service_response = s3.list_objects(Bucket='test-bucket')
import datetime
import botocore.session
from botocore.stub import Stubber
s3 = botocore.session.get_session().create_client('s3')
stubber = Stubber(s3)
response = {
'IsTruncated': False,
'Name': 'test-bucket',
'MaxKeys': 1000, 'Prefix': '',
'Contents': [{
'Key': 'test.txt',
'ETag': '"abc123"',
'StorageClass': 'STANDARD',
'LastModified': datetime.datetime(2016, 1, 20, 22, 9),
'Owner': {'ID': 'abc123', 'DisplayName': 'myname'},
'Size': 14814
}],
'EncodingType': 'url',
'ResponseMetadata': {
'RequestId': 'abc123',
'HTTPStatusCode': 200,
'HostId': 'abc123'
},
'Marker': ''
}
expected_params = {'Bucket': 'test-bucket'}
stubber.add_response('list_objects', response, expected_params)
stubber.activate()
service_response = s3.list_objects(Bucket='test-bucket')
assert service_response == response
如果您尝试使用 stubber 发出请求,您将收到上述错误
AttributeError: 'Stubber' object has no attribute ...