簡體   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