针对本地GAE java开发服务器的Google Pub/Sub测试策略



我和我的团队非常希望在我们的应用程序中包括Google Pub/Sub,因为它将解决一些耦合问题。我们面临的问题是如何结合java appengine dev服务器进行本地集成测试。

到目前为止我所做的:

  1. 启动发布子仿真器并设置PUBSUB_emulator_HOST环境变量
  2. 在javadev服务器中启动我们的应用程序它创建主题和订阅,然后发送一些消息到主题

我认为我做错了什么,因为:

  • 在云中创建的主题和订阅(它们肯定应该在pubsub模拟器中创建吗?)
  • 消息被推送,我们收到消息Id,但没有到达端点,也没有在云中或模拟器中报告错误

从这一点我很确定模拟器没有被开发服务器获取。

关于我们的测试策略,我还有一些更深层次的问题。随着越来越多的服务绑定到云,本地集成测试在这个时代真的可行吗。我们是否应该更多地关注针对云实例本身运行的集成测试套件?如果是这样的话,在部署到云测试环境之前,如何确保开发人员对他们的代码有信心?这不会显著增加反馈循环吗?

更新

使用Google Java API客户端PubSub构建器类,我能够从本地配置中注入一个url(localhost:8010),这使我能够成功地发布到本地模拟器。

Pubsub client = new Pubsub.Builder(httpTransport, jsonFactory, initializer)
.setApplicationName(getProjectId())
.setRootUrl(rootUrl).build();

我强制使用端口来简化团队其他成员的设置,而不必依赖于动态变化的端口。

gcloud beta emulators pubsub start --host-port localhost:8010

现在,主题、订阅和消息正在模拟器上成功创建。不幸的是,我仍然没有注册推送到端点的消息。

更新2

gcloud版本120.0.0似乎有所改进,但我现在收到以下错误:

{
  "code" : 400,
  "message" : "Payload isn't valid for request.",
  "status" : "INVALID_ARGUMENT"
}

本地pubsub服务器的gcloud实用程序的最新更新是否已修复。这个问题解决了它:https://code.google.com/p/cloud-pubsub/issues/detail?id=41

最新更新