云数据存储的概念、使用和测试

2024-05-29 06:38:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我对在本地尝试数据存储的方法真的很困惑。请给我一分钟解释一下。你知道吗

我正在开发一个由几个微服务组成的应用程序,就像唯一的gae应用程序一样。在应用程序的一部分,我使用数据存储。因此,当我运行我的应用程序时,我使用开发服务器,当我在数据存储中保存一些东西并调用一些方法时,我可以很好地看到gae管理门户中的实体。你知道吗

好吧,现在,我不用直接调用ndb library和他的方法,而是在ndb上构建了一个小库来抽象他的功能,然后我可以调用insertUser(),而不用直接使用ndb。所以,当我尝试测试我构建的这个小库(我写了一个测试.py文件)。 一开始,我认为这是行不通的,因为这个测试是在deveserver没有运行的情况下执行的。在我搜索了关于如何在本地模拟数据存储的信息之后,我发现了这个,但是在本地找到了带有存根的unittest,现在我什么都不懂。你知道吗

我已经尝试了(gcloud datastore emulatorstub with unittest),但我没有得到一个简单的例子: 我想测试一个实体是否保存在数据存储中,然后我想测试我是否可以读取这个实体

我假设dev_server(在SDK中)模拟数据存储(因为我可以在那里看到我的实体列表),但是,为什么要在本地dev中使用数据存储模拟器呢?,那么,如果我们有一个数据存储仿真器来做我想要的所有测试,为什么有必要使用存根到数据存储呢?我不明白。你知道吗

我明白也许我的问题更多的是概念而不是代码,但我需要真正正确地理解如何处理这个问题。你知道吗


Tags: 数据方法dev功能实体服务器应用程序门户
1条回答
网友
1楼 · 发布于 2024-05-29 06:38:17

最后我想我解决了并理解了我的问题。如果我使用的是我想连接到云数据存储的其他系统,我需要使用“模拟器”。但这不是我的案子。因此,我需要将存根与unittest一起使用,因为没有一种简单的方法(我认为这是不可能的)在dev\u服务器上实现这一点(当他运行时)。 但我发现了两个主要问题:

首先,导入google\u appengine库的方式,因为在文档中不是很清楚,(在我看来),最后搜索用户意见我发现“我的解决方案是这样的:

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

第二个问题是,当我执行一个测试(我有几个测试之一)时,下一个unittest失败了,例如,在第一个unittest中,我保存数据,在第二个unittest中,我测试数据是否用read方法正确保存。你知道吗

当我初始化datastore_v3_stub时,我使用save_changes=True来指定我希望更改是永久的,但是当我使用它时,不起作用,我看到更改可能不会被保存。你知道吗

之后,我在tesbed docs中找到了param datastore\文件,当我使用这个文件并指定一个保存临时数据库的文件时,所有测试都开始正常工作。你知道吗

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云平台是开发快速应用的一个非常好的解决方案,但我也认为他们需要修改和扩展他的文档,特别是对没有专家程序员(像我一样)的人。 我希望这个解决方案可以帮助别人,如果你认为我有一些错误,请评论它。你知道吗

相关问题 更多 >

    热门问题