【发布时间】:2013-08-11 10:42:59
【问题描述】:
我正在尝试在 google 应用引擎、python、selenium、nose 测试等本地运行一些无头测试。我已经设法让所有东西都单独工作,但问题是我不知道该指向哪里运行测试时的硒。
一种可能的解决方案
这是我已经取得进展的一种可能的解决方案,但我欢迎任何允许我使用 selenium 与我在测试平台中运行的模型与同一数据库进行交互的解决方案:
我可以在8080 上运行dev_appserver,然后将 selenium 指向它,但是测试台数据存储将与 selenium 指向的服务器不同。我尝试通过像这样运行dev_appserver 来统一它们:
$ dev_appserver.py --datastore_path tests/datastore --port 8080 .
在我的单元测试中setUp:
self.testbed.init_datastore_v3_stub(datastore_file='tests/datastore',use_sqlite=True)
(我设置 use_sqlite 是因为我没有设置错误。我认为dev_appserver 也在使用 sqlite,所以他们显然需要期待相同的格式)。
不幸的是,这不起作用。我可以在数据存储中创建一个实体(作为单元测试的一部分或正在运行的服务器),并通过删除文件并看到实体消失来确认它是持久的。但是,如果我使用dev_appserver 提供的数据存储查看器来查看实体,它永远不会发现那些由我的单元测试创建的实体,并且我的单元测试运行的命令也永远不会发现那些属于本地服务器的实体。
一个可能的想法是app_id 在单元测试和服务器之间是不同的,所以我手动设置app_id 使用:
self.testbed.setup_env(app_id='foo')
其中foo 与我的app.yaml 文件中的相同。我什至尝试过dev~foo,因为这是管理控制台显示的内容。那也没用。
结论
这是我所知道的。任何关于如何让 testbed 和 selenium(或 selenium 访问的服务器)与同一数据库交互的提示将不胜感激。
【问题讨论】:
-
为什么不是所有的数据存储访问都通过数据存储/服务器。为什么要在代码中的任何位置调用 init_datastore?
-
根据此链接:developers.google.com/appengine/docs/python/tools/…,我需要为我的单元测试初始化数据存储。如果我不这样做,那意味着我的单元测试要么没有可使用的数据存储,使它们无用,要么它们会共享我的开发数据存储,从而干扰我的开发过程。我希望测试拥有自己的数据存储区,它们可以在其中创建和销毁尽可能多的实体。
标签: google-app-engine testing python-2.7 google-cloud-datastore dev-appserver