Google app engine 如何在本地数据库上进行GAE无头测试?

Google app engine 如何在本地数据库上进行GAE无头测试?,google-app-engine,testing,python-2.7,google-cloud-datastore,dev-appserver,Google App Engine,Testing,Python 2.7,Google Cloud Datastore,Dev Appserver,我试图在google app engine、python、selenium、nose测试等本地运行一些headless测试。我已经设法让所有测试都单独运行,但问题是,我不知道在运行测试时selenium指向何处 一个可能的解决办法 下面是一个可能的解决方案,我已经取得了进展,但欢迎使用任何允许我使用selenium与在测试床上运行的模型的同一数据库进行交互的解决方案: 我可以在8080上运行dev_appserver,然后将selenium指向它,但是测试床数据存储将不同于selenium指向的

我试图在google app engine、python、selenium、nose测试等本地运行一些headless测试。我已经设法让所有测试都单独运行,但问题是,我不知道在运行测试时selenium指向何处

一个可能的解决办法 下面是一个可能的解决方案,我已经取得了进展,但欢迎使用任何允许我使用selenium与在测试床上运行的模型的同一数据库进行交互的解决方案:

我可以在
8080
上运行
dev_appserver
,然后将selenium指向它,但是测试床数据存储将不同于selenium指向的服务器。我尝试通过运行
dev\u appserver
来统一它们,如下所示:

$ dev_appserver.py --datastore_path tests/datastore --port 8080 .
在我的单元测试的
设置中

self.testbed.init_datastore_v3_stub(datastore_file='tests/datastore',use_sqlite=True)
(我设置use_sqlite是因为我没有设置时出错。我认为
dev_appserver
也在使用sqlite,因此他们显然需要使用相同的格式)

不幸的是,这不起作用。我可以在数据存储中创建一个实体(作为单元测试的一部分或正在运行的服务器),并通过删除文件并看到实体消失来确认它是持久的。但是,如果我使用
dev_appserver
提供的数据存储查看器查看实体,它将永远不会发现由我的单元测试创建的实体,而由我的单元测试运行的命令也永远不会发现属于本地服务器的实体

一种可能的想法是,单元测试和服务器之间的
app\u id
不同,因此我使用以下方法手动设置
app\u id

  self.testbed.setup_env(app_id='foo')
其中
foo
与我的
app.yaml
文件中的相同。我甚至尝试了
dev~foo
,因为这就是管理控制台显示的内容。那也没用

结论
这就是我所能做到的。对于如何让testbed和selenium(或selenium访问的服务器)与同一数据库进行交互的任何提示,我们都将不胜感激。

以下代码片段适用于当前SDK:

    self.testbed = testbed.Testbed()
    self.testbed.setup_env(app_id='dev~foo')
    self.testbed.activate()
    self.testbed.init_datastore_v3_stub(datastore_file="/path/to/storage/datastore.db",
                                        use_sqlite=True)
    self.testbed.init_memcache_stub()
使用
--storage\u path=/path/to/storage
选项启动dev_appserver.py

注:

  • setup\u env(app\u id=your\u app\u id)
    应该在
    activate()之前调用。Appengine有一个不同顺序的示例,这可能是一个文档错误
  • 必须在
    app\u id
    中使用“dev~”前缀

为什么不是所有数据存储都可以通过数据存储/服务器访问。为什么要在代码中的任何地方调用init_数据存储?根据以下链接:,我需要为我的单元测试初始化数据存储。如果我不这样做,那就意味着我的单元测试要么没有数据存储,使它们变得无用,要么它们会共享我的开发数据存储,干扰我的开发过程。我希望测试有自己的数据存储,在那里他们可以创建和销毁尽可能多的实体。