Google App Engine“搜索”的测试平台

时间:2012-06-03 16:31:11

标签: google-app-engine testbed

我正在尝试使用开发应用服务器在Python中测试Google App Engine的全新全文搜索功能。

search是否存在允许用testbed本地单元测试对其进行测试的存根?

以下是抛出异常的示例代码:

#!/usr/bin/python
from google.appengine.ext import testbed

from google.appengine.api import search

def foo():
    d = search.Document(doc_id='X',
        fields=[search.TextField(name='abc', value='123')])
    s = search.Index(name='one').add(d)

tb = testbed.Testbed()
tb.activate()
# tb.init_search_stub() ## does this exist?

foo()

foo()抛出的异常是:AssertionError: No api proxy found for service "search"。是否为搜索编写了api代理?

赞赏的想法和评论。

2 个答案:

答案 0 :(得分:10)

更新这在2012年有效。2013年发生了变化:存根受到官方支持。见@ siebz0r回答。

它不在list of supported stubs(但是,我假设),但是simple_search_stub.py中有一个SearchServiceStub,看起来就像你追求的那样。

我自己没有测试过,但你可以尝试这样做:

testbed = testbed.Testbed()
testbed.activate()

stub = SearchServiceStub()
testbed._register_stub(SEARCH_SERVICE_NAME, stub)

SEARCH_SERVICE_NAME应该是"search",它也应该出现在SUPPORTED_SERVICES列表otherwise testbed will raise an exception中。

“注入”这个新服务存根的方式是修改SDK的testbed / __ init__.py或者从代码中执行。无法真正说出哪种方法更好,因为它会以任何一种方式破解,直到init_search_stub()正式出现在列表中。

此外,它不在列表中的事实可能是因为它还没准备好:)所以,请自行承担风险。

答案 1 :(得分:5)

从SDK 1.8.4开始,可以从Testbed启用搜索存根:

from google.appengine.api import search
from google.appengine.ext import testbed

try:
    tb = testbed.Testbed()
    tb.activate()
    tb.init_search_stub()
    index = search.Index(name='test')
    index.put(search.Document())
finally:
    tb.deactivate()