用于从 S3 下载文件的模拟 boto3 响应

2024-01-10

我有使用以下代码从 S3 存储桶下载文件的代码boto3 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Bucket.download_file.

# foo.py
def dl(src_f, dest_f):
  s3 = boto3.resource('s3')
  s3.Bucket('mybucket').download_file(src_f, dest_f)

我现在想编写一个单元测试dl()使用 pytest 并使用中可用的存根模拟与 AWS 的交互botocore https://botocore.amazonaws.com/v1/documentation/api/latest/reference/stubber.html.

@pytest.fixture
def s3_client():
    yield boto3.client("s3")

from foo import dl
def test_dl(s3_client):

  with Stubber(s3_client) as stubber:
    params = {"Bucket": ANY, "Key": ANY}
    response = {"Body": "lorem"}
    stubber.add_response(SOME_OBJ, response, params)
    dl('bucket_file.txt', 'tmp/bucket_file.txt')
    assert os.path.isfile('tmp/bucket_file.txt')

我不确定对此的正确方法。我该如何添加bucket_file.txt到存根响应?我需要什么对象add_response()至(显示为SOME_OBJ)?


您是否考虑过使用moto3 https://github.com/spulec/moto?
您的代码可能看起来与现在相同:

# foo.py
def dl(src_f, dest_f):
  s3 = boto3.resource('s3')
  s3.Bucket('mybucket').download_file(src_f, dest_f)

和测试:

import boto3
import os
from moto import mock_s3

@mock_s3
def test_dl():
    s3 = boto3.client('s3', region_name='us-east-1')
    # We need to create the bucket since this is all in Moto's 'virtual' AWS account
    s3.create_bucket(Bucket='mybucket')
    
    s3.put_object(Bucket='mybucket', Key= 'bucket_file.txt', Body='')
    dl('bucket_file.txt', 'bucket_file.txt')

    assert os.path.isfile('bucket_file.txt')

代码的意图变得更加明显,因为您只是像往常一样使用 s3,除了方法调用背后没有真正的 s3。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于从 S3 下载文件的模拟 boto3 响应 的相关文章

  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 使用随机目录结构重命名传入的 S3 文件

    我有一个可以将文件发送到 s3 存储桶的应用程序 不幸的是 我无法更改它在 s3 中发送到的路径 因此我必须找到一种方法来获取该文件 mys3bucket apps region 020 07 14T22 24 34Z details cs
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • Pod UDP 主机端口在 Docker Desktop 中不起作用

    我正在将 Docker Desktop for Windows 与 WSL2 结合使用 并尝试将以下部署部署到我的 Docker Desktop 的 Kubernetes 集群 apiVersion apps v1 kind Deploym
  • Netbeans 8.1 上的 Javascript es6 语法支持

    有谁知道 Netbeans 8 1 是否支持 es6 javascript 语法以及如何启用它 不 它在 8 2 中 NetBeans 8 2 候选版本可在以下位置获取https netbeans org downloads 8 2 rc
  • 软键盘仅在 EditText 焦点上显示一次

    谢谢阅读 我面临一个奇怪的问题 我的应用程序行为是这样的 当Activity开始 我requestFocus on an EditText并显示软键盘 但是 当我按后退按钮关闭键盘并点击EditText我再也没有弹出键盘 唯一的出路就是从头
  • 如何将Scrapy登录cookie传递给Selenium?

    我需要 Selenium 来进行 javascript 工作 首先我使用Scrapy登录FormRequest然后我需要打开response url与硒 问题是 Selenium 没有 cookie 因此它会打开登录页面 有谁知道如何将co
  • 如何在未越狱的iOS设备上直接从浏览器安装tongbu tui应用程序?

    一个人需要做的就是拿起一个普通的 iOS 设备并访问http tui tongbu com m iphone html http tui tongbu com m iphone html然后单击带有苹果徽标的灰色大按钮 然后单击安装 然后将
  • 允许Camel上下文永远运行

    我正在为 springCamelContext 使用camel spring jar 当我启动camel context时 它运行5分钟 默认时间 我可以让我的线程休眠一段特定的时间 即 try camelContext start Thr
  • jQuery Datatables AJAX 请求未正确命中 Web API

    我正在尝试整合ASP NET Web API 2 with jQuery 数据表 1 10 7 我想在我的数据表中使用服务器端处理 所以我使用了 Nuget 包数据表 AspNet WebApi2 这是我的 JavaScript
  • C++ 向外部程序提供输入和输出管道

    我正在尝试使用一些输入调用外部程序 并在程序中检索其输出 它将看起来像 一些输入 外部程序 检索输出 我首先想到使用popen 但这似乎是不可能的 因为管道不是双向的 有没有什么简单的方法可以处理这种事情linux 我可以尝试制作一个临时文
  • Transaction TimeOut EJB 对线程的影响

    关于EJB的一个问题 假设我有一个具有无限循环的会话 bean 它在 EJB 事务下运行 现在 当EJB的事务超时时 是否会导致无限循环线程中断或者容器将停止运行无限循环的线程 现在 当EJB的事务超时时 是否会导致无限循环线程中断或者容器
  • CSS 无法选择其中包含数字的类/id? [复制]

    这个问题在这里已经有答案了 为什么不能在 CSS 中使用数字 还有其他方法可以完成这项工作吗 我有以下代码 div class center 400 width div class Header div div class Content
  • 什么是“XCopy 版本”?

    我正在尝试下载 Oracle 数据访问组件 一些组件被命名为XCopy version 我知道XCopy http en wikipedia org wiki XCOPY是一个命令 但它在这种情况下到底意味着什么 它似乎指的是同一个Xcop
  • R矩阵行选择中的多个条件[重复]

    这个问题在这里已经有答案了 可能的重复 我有一个简单的问题 但我不知道如何解决这个问题 我想选择 value 1 gt 0 和 value 2 gt 0 的所有行 现在我有这个代码 dataOnBoth lt data data value
  • 如何在Android中实现“发送反馈”功能? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions I would like this
  • Scala 中的轻量级缓存解决方案?

    我只是想知道 Scala 中是否有可用的缓存解决方案 我正在寻找类似 Java 中的 Guava 提供的东西 我应该在 Scala 中使用 Guava 吗 Scalaz 中是否有包装器 皮条客或类似的东西 还有更适合 Scala 开发人员的
  • ionic2:浏览器中的地理位置失败并出现错误:异常:未捕获(承诺):false

    我正在使用 ionic2 的地理定位插件 当应用程序在浏览器中加载时 它会请求许可 但是当调用 getcurrentposition 时它并没有获取位置 我使用火狐浏览器 控制台日志显示错误 例外 未捕获 承诺 错误 我需要根据 getcu
  • 多个适配器或一个适配器用于不同的列表和对象 - 代码性能

    就性能而言 在 Android 应用程序中实现更好的选择是什么 每个具有不同对象列表的多个适配器 布局 处理不同数据的单个适配器 假设我们需要创建 评论 Videos 问题 适配器中的列表以正确显示数据 每个列表属于不同的布局 因此我们有不
  • 如何使用 swift 为字典中的一个键添加多个值

    我一直在尝试为字典中的一个键添加多个值 在 Objective C 中我们可以这样写 NSDictionary mapping B Bear Buffalo 但是在 Swift 中我们怎么写我正在尝试这样但它没有访问 var animals
  • 在 RecyclerView 中将元素划分为组

    我需要将 RecyclerView 中的元素划分为具有标题的组 如下图的收件箱应用程序中所示 因此请帮助我找出哪种方法更适合我的情况 1 我可以使用异构布局 但在组中插入新元素不太方便 因为我需要检查是否已添加同一组的元素或者我需要添加新的
  • 如何使用 Android App Bundles - Visual Studio 2017 的动态功能

    在 Google Play Console 中我遇到了 使用 Android App Bundle 节省应用程序大小 如果您使用 Android App Bundle 您的应用程序可能会小 38 4 从应用程序包生成的 APK 可以让您的用
  • 用于从 S3 下载文件的模拟 boto3 响应

    我有使用以下代码从 S3 存储桶下载文件的代码boto3 https boto3 amazonaws com v1 documentation api latest reference services s3 html S3 Bucket