我需要一些帮助为Google云端点设置unittests。使用WebTest all requests应答AppError:Bad response:404 Not Found。我不确定端点是否与WebTest兼容。
以下是生成应用程序的方式:
application = endpoints.api_server([TestEndpoint], restricted=False)
然后我用WebTest的方式:
client = webtest.TestApp(application)
client.post('/_ah/api/test/v1/test', params)
使用curl测试可以很好地工作。
我应该为端点编写不同的测试吗?GAE端点团队有什么建议?
可以简化webtest以减少命名错误
对于以下TestApi
tests.py应该是这样的
经过大量的实验和对SDK代码的研究,我想出了两种在python中测试端点的方法:
一。使用webtest+testbed测试SPI端
您使用webtest的方法是正确的,但是只需要确保您正确地转换了对SPI端点的请求。
云端点API前端和
dev_appserver
中的EndpointsDispatcher
将对/_ah/api/*
的调用转换为对/_ah/spi/*
的相应“后端”调用。转变似乎是:application/json
HTTP post(即使REST端点是其他的)。POST /_ah/spi/TestEndpoint.insert_message
将调用代码中的TestEndpoint.insert_message()
。这意味着您可以使用以下设置测试端点:
这里的问题是,在调用端点之前,您可以轻松地在数据存储或其他GAE服务中设置适当的fixture,这样您就可以更充分地断言调用的预期副作用。
2。启动开发服务器进行完全集成测试
您可以在同一python环境中使用如下方法启动dev服务器:
现在,您需要向localhost:8123发出实际的HTTP请求,以便对API运行测试,但仍然可以与GAE API交互以设置fixture等。这显然很慢,因为您正在为每次测试运行创建和销毁一个新的dev服务器。
此时,我使用Google API Python client来使用API,而不是自己构建HTTP请求:
这是对CURL测试的改进,因为它让您可以直接访问gaeapi来轻松地设置fixture和检查内部状态。我怀疑有一种更好的方法可以绕过HTTP进行集成测试,方法是将实现端点分派机制的dev服务器中的最小组件缝合在一起,但这需要比现在更多的研究时间。
我想尽一切办法让它们以正常的方式测试。我尝试直接使用/uah/spi方法,甚至尝试使用服务映射创建一个新的protorpc应用程序,但都没有成功。我不是endpoints团队中的Googler,所以也许他们有一些聪明的东西可以让它工作,但似乎仅仅使用webtest是行不通的(除非我漏掉了一些明显的东西)。
同时,您可以编写一个测试脚本,用一个独立的环境启动app engine测试服务器,并向其发出http请求。
使用独立环境运行服务器的示例(bash,但您可以从python轻松运行它):
然后您可以使用请求来测试ala curl:
相关问题 更多 >
编程相关推荐