- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在对一个函数进行单元测试,该函数将元素从 S3 对象转换为 Pandas DataFrame,并且需要模拟从 boto3 返回的 StreamingBody 对象
文件.py
def object_to_df(self, key_name, dtypes):
s3_object = self.get_object(key_name=key_name)
if s3_object is not None:
object_df = pandas.read_csv(
io.BytesIO(s3_object["Body"].read()), dtype=dtypes
)
return object_df
{
'Body': StreamingBody(),
'DeleteMarker': True|False,
'AcceptRanges': 'string',
...
}
import unittest
import pandas
from io import StringIO
from unittest.mock import patch, Mock
from path.to.file import custom_class
from botocore.response import StreamingBody
class TestS3Class(unittest.TestCase):
"""TestCase for path_to/file.py"""
def setUp(self):
"""Creates an instance of the live class for testing"""
self.s3_test_client = S3()
@patch('path.to.class.get_object')
def test_object_to_df(self, mock_get_object):
""""""
mock_response = {'Body': [{'Candidate': 'Black Panther', 'Votes': 3},
{'Candidate': 'Captain America: Civil War', 'Votes': 8},
{'Candidate': 'Guardians of the Galaxy', 'Votes': 8},
{'Candidate': "Thor: Ragnarok", 'Votes': 1}
]}
mock_stream = StreamingBody(StringIO(str(mock_response)), len(str(mock_response)))
mock_get_object.return_value = mock_stream
self.assertIsInstance(self.s3_test_client.object_to_df(key_name='key_name', dtypes=str), pandas.DataFrame)
TypeError: 'StreamingBody' object is not subscriptable
最佳答案
S3 客户端返回一个 dict,而您模拟的 S3 客户端返回一个 StreamingBody。你模拟的 S3 客户端应该返回类似的东西
body_json = {
'Body': [
{'Candidate': 'Black Panther', 'Votes': 3},
{'Candidate': 'Captain America: Civil War', 'Votes': 8},
{'Candidate': 'Guardians of the Galaxy', 'Votes': 8},
{'Candidate': "Thor: Ragnarok", 'Votes': 1}
]
}
body_encoded = json.dump(body_json).encode("utf-8")
body = StreamingBody(
StringIO(body_encoded),
len(body_encoded)
)
mocked_response = {
'Body': body,
...
}
mock_get_object.return_value = mocked_response
关于python - 如何模拟 boto3 的 StreamingBody 对象以在 Python 中使用 BytesIO 进行处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58476137/
我正在使用 Boto3 在 Python 脚本中读取 Athena 查询的结果。 我有以下代码,可以在 AWS Lambda 中正常运行。 def get_athena_results(s3_buck
我想将大型视频文件从 AWS S3 传输到 Popen 的 stdin,从 Python 的角度来看,这是一个“类文件对象”。此代码作为 AWS Lambda 函数运行,因此这些文件不适合内存或本地文
我正在尝试使用 Python 创建一个 AWS Lambda 函数,该函数将从某些 API 接收文本并返回包含 AudioStream 对象的 JSON。为此,我使用 AWS Polly。目前,我可以
我正在从另一个函数调用 lambda 函数,并希望根据响应采取不同的操作,这是非常标准的东西。然而,我得到了一些意想不到的行为,这可能是显而易见的,但它却让我望而却步。我在最简单的示例中重新创建了我的
我正在对一个函数进行单元测试,该函数将元素从 S3 对象转换为 Pandas DataFrame,并且需要模拟从 boto3 返回的 StreamingBody 对象 文件.py def object
我有一个 python 脚本,它从 S3 读取 Excel 文件,但在 AWS Batch 中触发时出现错误。该代码在另一个 Ubuntu 机器上运行良好。 AttributeError: 'Stre
Insert to Code功能使您能够在 Watson Studio 中的 Jupyter 笔记本中工作时访问存储在 Cloud Object Storage 中的数据。某些文件类型(例如 txt
我是一名优秀的程序员,十分优秀!