0

我真的很困惑在本地尝试数据存储的方式。请给我一分钟解释。概念,使用和测试当地的云数据存储

我正在开发一个应用程序组成一些只有gae应用程序的微服务。在应用程序的一部分中,我使用数据存储区。所以,当我运行我的应用程序时,我使用了开发服务器,当我在数据存储区中保存某些调用某种方法的东西时,我可以完全看到gae的管理门户网站中的实体。

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

我都试过(gcloud datastore emulatorstub with unittest),我不明白这样做简单的例子: 我想测试一个实体保存在数据存储后,我想测试我可以读这个实体

我假设dev_server(在SDK中)模拟数据存储(因为我可以在那里看到我的实体列表),但是为什么在本地开发中使用数据存储模拟器呢?然后,为什么需要将存根用于数据存储有一个数据存储模拟器来做我想要的所有测试?我不明白。

我明白,也许我的问题是比代码更多的概念,但我需要了解真正的权利如何处理这个最好的方式。

回答

0

最后我想我解决了并理解了我的问题。如果我正在使用其他要连接到云数据存储的系统,则需要使用“模拟器”。但不是我的情况。所以,我需要使用单元测试的存根,因为没有一个简单的方法(我认为是不可能的)对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来指定我希望这些更改是永久性的,但是当我使用它时,不工作,我发现这些更改可能不会保存。

之后,我在测试文档中发现了param datastore_file,当我用这个并指定一个文件保存暂时数据库时,所有的测试都开始正常工作。

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

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

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

我觉得GAE和所有谷歌云平台是快速发展的应用程序很好的解决方案,但我想太多,他们需要修改和扩展自己的文档,特别是对无专家程序员(像我一样)。 我希望这个解决方案可能有助于某人,如果你认为我有一些错误,请评论它。