Google app engine 如何在本地数据库上进行GAE无头测试?
我试图在google app engine、python、selenium、nose测试等本地运行一些headless测试。我已经设法让所有测试都单独运行,但问题是,我不知道在运行测试时selenium指向何处 一个可能的解决办法 下面是一个可能的解决方案,我已经取得了进展,但欢迎使用任何允许我使用selenium与在测试床上运行的模型的同一数据库进行交互的解决方案: 我可以在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指向的
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有一个不同顺序的示例,这可能是一个文档错误
- 必须在
中使用“dev~”前缀app\u id