Я хочу проверить ресурс s3 download_file :)
вот мой код
def logfile_downloader():
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket)
for object in bucket.objects.filter(Prefix='logs/access_2018'):
try:
bucket.download_file(object.key, 'logs/' + save_path + '/' + object.key.split('/')[-1])
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
click.echo(click.style("The object does not exist.", bg="white", fg="red"))
else:
raise
когда я тестирую с помощью макета python, тест был пройден
@mock.patch('boto3.resource')
def test_log_downloader(mock_resource):
logfinder._log_downloader()
assert mock_resource.called
но охват не 100%, потому что botocore.exceptions.ClientError не тестировался
Итак, я создаю тест
@mock.patch('s3.Bucket.download_file')
def test_log_downloader_404(mock_download_file):
mock_download_file.return_value = 404
logfinder.log_downloader()
assert mock_download_file.called
но это не удалось
ModuleNotFoundError: No module named 's3'
я думаю, что mock вызовет ошибку при запуске функции download_file
,
Итак, я нахожу путь к файлу загрузки http://boto3.readthedocs.io/en/latest/guide/s3-example-download-file.html#more-info
но тест не может импортировать модуль s3
пожалуйста, кто-нибудь, дайте мне несколько советов, спасибо