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

Posted

技术标签:

【中文标题】本地 GAE java 开发服务器的 Google Pub/Sub 测试策略【英文标题】:Google Pub/Sub test strategy for local GAE java dev server 【发布时间】:2016-12-05 03:00:36 【问题描述】:

我和我的团队都非常热衷于在我们的应用程序中加入 Google Pub/Sub,因为它可以解决一些耦合问题。 我们遇到的问题是如何结合 java appengine 开发服务器进行本地集成测试。

到目前为止我做了什么:

    启动 pub sub 模拟器并设置 PUBSUB_EMULATOR_HOST 环境变量 在 java 开发服务器中启动我们的应用程序 它创建主题和订阅,然后发送一些消息 到主题。

我假设我做错了什么,因为:

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

从这里我很确定模拟器没有被开发服务器拾取。

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

更新

使用 Google Java API Client 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"

【问题讨论】:

我已经向 google 提交了错误报告:code.google.com/p/cloud-pubsub/issues/detail?id=39 【参考方案1】:

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

【讨论】:

以上是关于本地 GAE java 开发服务器的 Google Pub/Sub 测试策略的主要内容,如果未能解决你的问题,请参考以下文章

GAE 必须先调用 set*BlobStorage() 之一

SSL:GAE/Go 上的 CERTIFICATE_VERIFY_FAILED

本地开发服务器的身份验证不起作用

如何在使用 GAE Maven 插件时在 IDEA 中调试 Java Google App Engine 应用程序?

有啥方法可以访问本地网络中的 GAE 开发应用服务器吗?

Java 中的 GAE Restful Web 服务