0

我正在尝试在 google app engine、python、selenium、nose 测试等本地运行一些无头测试。我已经设法让所有东西都单独工作,但问题是我不知道当我在哪里指向 selenium运行我的测试。

一种可能的解决方案

这是我已经取得进展的一种可能的解决方案,但我欢迎使用任何允许我使用 selenium 与在测试平台中运行的模型相同的数据库进行交互的解决方案:

我可以继续运行dev_appserver8080然后将 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')

where与我的文件foo中的相同。app.yaml我什至尝试过dev~foo,因为这是管理控制台显示的内容。那也没有用。

结论

这是我所得到的。任何关于如何让 testbed 和 selenium(或 selenium 访问的服务器)与同一数据库交互的提示将不胜感激。

4

1 回答 1

2

以下代码段适用于当前 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_path=/path/to/storage使用该选项启动 dev_appserver.py 。

笔记:

  • setup_env(app_id=your_app_id)应该在之前调用activate()。Appengine文档有一个不同顺序的示例,这可能是一个文档错误。
  • 有必要在app_id.
于 2013-10-28T08:49:53.067 回答