【问题标题】:Amazon S3 standalone stub serverAmazon S3 独立存根服务器
【发布时间】:2010-09-10 14:59:27
【问题描述】:

我似乎记得读过有关 Amazon S3 兼容测试服务器的文章,您可以在自己的服务器上运行该测试服务器以进行单元测试或其他任何事情。但是,我已经用尽了我的耐心在谷歌和 AWS 上寻找这个。这样的事情存在吗?如果没有,我想我会写一个。

注意:我问的是 Amazon S3(存储系统)而不是 Amazon EC2(云计算)。

【问题讨论】:

标签: unit-testing amazon-s3 amazon-web-services stub


【解决方案1】:

Amazon 使用 Xen,因此您可以在自己的 Xen 安装中运行您的 AMI。不过,我只是启动一个实例并在那里运行测试。它不会花费太多,您通常应该可以在本地开发并且不经常在他们的系统上对其进行测试。

【讨论】:

  • 我想你说的是 EC2(云计算),而我想知道的是 S3(存储系统)。
【解决方案2】:

Eucalyptushttp://eucalyptus.cs.ucsb.edu/

EUCALYPTUS - 弹性效用计算 链接程序的架构 To Useful Systems - 是一个开源的 软件基础设施 实施“云计算” 集群。当前接口 EUCALYPTUS 与亚马逊的兼容 EC2 接口,但基础设施 旨在支持多个 客户端接口。

请注意,根据文档,Eucalypus 不仅重新实现了 EC2 接口,还重新实现了 S3 存储系统。该存储组件称为海象。 (http://open.eucalyptus.com/wiki/EucalyptusUserGuide_v1.5.2)

【讨论】:

  • 我想知道 S3(存储系统)而不是 EC2(云计算)。
【解决方案3】:

你在想Park Place吗?

仅供参考,它的old home page 现已离线。

【讨论】:

    【解决方案4】:

    Park Place 已移至 github: http://github.com/technoweenie/parkplace

    【讨论】:

      【解决方案5】:

      Fake S3 似乎是对 S3 的最新重新实现,专门设计用于测试。

      【讨论】:

        【解决方案6】:

        我认为 moto (https://github.com/spulec/moto) 是您单元测试的完美工具。 Moto 模拟对 S3、SQS 等的所有访问,并且可以使用其 Web 服务器在任何编程语言中使用。

        设置简单、轻巧且快速。

        来自 moto 的自述文件:

        假设您有以下要测试的代码:

        import boto
        from boto.s3.key import Key
        
        class MyModel(object):
            def __init__(self, name, value):
                self.name = name
                self.value = value
        
            def save(self):
                conn = boto.connect_s3()
                bucket = conn.get_bucket('mybucket')
                k = Key(bucket)
                k.key = self.name
                k.set_contents_from_string(self.value)
        

        花点时间想想你过去会如何测试它。现在看看如何使用 Moto 对其进行测试:

        import boto
        from moto import mock_s3
        from mymodule import MyModel
        
        @mock_s3
        def test_my_model_save():
            model_instance = MyModel('steve', 'is awesome')
            model_instance.save()
        
            conn = boto.connect_s3()
            assert conn.get_bucket('mybucket').get_key('steve') == 'is awesome'
        

        【讨论】:

          【解决方案7】:

          我们在本地测试基于 S3 的代码时遇到了问题,实际上实现了一个小型 Java 服务器,它模拟了 S3 对象 API。由于它可能对其他人有用,我们设置了一个 github 存储库以及一个小型网站:http://s3ninja.net - 所有开源代码都在 MIT 许可下。

          它非常小巧简单,可以在几分钟内完成设置。 (作为基于SIRIUS 的应用程序,中等服务器上的启动时间不到一秒)。

          【讨论】:

            猜你喜欢
            • 2013-06-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-09
            • 2017-03-20
            • 1970-01-01
            相关资源
            最近更新 更多