繁体   English   中英

在本地进行概念,使用和测试Cloud Datastore

[英]Concepts, use and testing Cloud Datastore in local

我真的对在本地尝试数据存储的方式感到困惑。 请给我一点时间解释。

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

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

我已经尝试了两者( gcloud数据存储区模拟器具有unittest的存根 ),但我没有得到一个简单的示例:我想测试一个实体是否保存在数据存储区中,并且在想要测试之后我可以读取该实体

我想(在SDK中) dev_server模拟了数据存储区(因为我可以在那里看到我的实体列表),但是,为什么在本地dev中使用数据存储区模拟器呢?然后,如果我们需要使用存根到数据存储区有一个数据存储区模拟器可以执行我想要的所有测试? 我不明白

我了解也许我的问题不只是代码,而是概念,但我需要正确地理解如何使用最佳方法。

最后,我认为我已经解决并理解了我的问题。 如果我正在使用要连接到Cloud Datastore的其他系统,则需要使用“模拟器”。 但这不是我的情况。 因此,我需要将存根与unittest一起使用,因为没有简单的方法(我认为这是不可能的)对dev_server进行此操作(当他正在运行时)。 但是我发现了两个主要问题:

第一种方法是导入google_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

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

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

之后,我在tesbed文档中找到了param 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是开发快速应用程序的很好的解决方案,但我也认为他们需要修改和扩展他的文档,特别是针对像我这样的非专家程序员。 我希望此解决方案可能对某人有所帮助,如果您认为我有一些错误,请对此发表评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM