本地 Cloud Datastore 的概念、使用和测试

Concepts, use and testing Cloud Datastore in local

我真的很困惑在本地尝试数据存储的方式。请给我一分钟解释一下。

我正在开发一个由几个微服务组成的应用程序,就像一个唯一的 gae 应用程序。在应用程序的一部分中,我使用了数据存储区。因此,当我 运行 我的应用程序使用开发服务器时,当我调用某种方法将某些内容保存在数据存储区时,我可以在 gae 的管理门户网站中完美地看到实体。

好吧,现在,我没有直接调用 ndb 库和他的方法,而是在 ndb 上构建了一个小库来抽象他的功能,然后我可以调用 insertUser() 而不是直接使用 ndb。因此,当我尝试测试我构建的这个小型库时出现问题(我已经编写了一个 test.py 文件来执行此操作)。 起初,我认为这行不通,因为这个测试是在没有 deveserver 运行ning 的情况下执行的。在我搜索了有关如何在本地模拟数据存储的信息后,我发现了这个,但是在我发现本地的单元测试和存根之后,现在我什么都不懂了。

我都试过了 (gcloud datastore emulator and stub with unittest) 但我没有做简单的例子: 我想测试一个实体是否保存在 Datastore 中,然后我想测试我是否可以读取这个实体

我想 dev_server(在 SDK 中)模拟数据存储(因为我可以在那里看到我的实体列表),但是,为什么要在本地开发中使用数据存储模拟器?,然后,为什么如果我们有一个数据存储模拟器来做我想要的所有测试,是否有必要使用存根到数据存储?没看懂。

我知道也许我的问题更多的是概念而不是代码,但我需要真正正确地理解如何使用它的最佳方式。

我想我终于解决并理解了我的问题。如果我正在使用我想连接到 Cloud Datastore 的其他系统,我需要使用 "emulator"。但不是我的情况。所以,我需要将存根与 unittest 一起使用,因为没有一种简单的方法(我认为这是不可能的)来使用 dev_server(当他是 运行 时)。 但是我发现主要有两个问题:

第一,导入google_appengine库的方式,因为文档里说的不是很清楚,(我的看法),最后搜索网友的意见,发现"my solution was something like this":

sys.path.insert(1, '../../../../google_appengine')

if 'google' in sys.modules:
    del sys.modules['google']

from google.appengine.ext import ndb
from google.appengine.ext import testbed

第二个是,当我执行一个测试(我有过的几个测试之一)时,下一个单元测试失败了,例如,在第一个单元测试中,我保存了数据,而在第二个单元测试中,我测试了数据是否正确使用读取方法正确保存。

当我初始化 datastore_v3_stub 时,我使用 save_changes=True 指定我希望更改是永久的,但是当我使用它时,它不起作用,我发现这些更改可能没有得救了。

之后,我在 tesbed 文档中找到参数 datastore_file,当我使用它并指定一个文件 临时 数据库时,所有测试开始工作很好。

self.testbed.init_datastore_v3_stub(enable=True, save_changes=True, datastore_file='./dbFile')

此外,我添加了一个最终条件(unittest库)来删除这个文件,所以,我在测试结束时删除了这个文件。 (避免下次执行出错)

@classmethod
def tearDownClass(self):
    """
    Elimina el fichero de la bd temporal tras la ejecución de todos los tests.
    """
    os.remove('./dbFile')

我认为 GAE 和所有 Google Cloud Platform 是开发快速应用程序的非常好的解决方案,但我也认为他们需要修改和扩展他的文档,特别是对于非专家程序员(比如我) . 我希望这个解决方案可能对某人有所帮助,如果您认为我有任何错误,请发表评论。