如何从 python 启动测试 pubsub 模拟器进行自动化测试

How to boot up a test pubsub emulator from python for automated testing

我正在开发一个烧瓶 API,其中一个端点是接收消息并将其发布到 PubSub。目前,为了测试该端点,我必须从命令行手动启动 PubSub 模拟器,并在测试期间保持 运行。它工作得很好,但它不是自动化测试的理想选择。

我想知道是否有人知道从 python 启动测试 PubSub 模拟器的方法?或者如果有人有更好的解决方案来测试这样的 API?

据我所知,没有 Python 本机 Google Cloud PubSub 模拟器可用。

您的选择很少,所有这些都需要从 Python:

启动外部程序
  • 只需调用您提到的 gcloud 命令:gcloud beta emulators pubsub start [options] 直接从您的 python 应用程序将其作为外部程序启动。

  • 作为 Cloud SDK 一部分的 PubSub 模拟器是一个 JAR 文件,由 CLOUD_SDK_INSTALL_DIR/platform/pubsub-emulator/bin/cloud-pubsub-emulator 中存在的 bash 脚本引导。您可以直接 运行 这个 bash 脚本。

这里是Whosebug answer which covers multiple ways to launch an external program from Python.

另外,从你的问题中还不太清楚你是如何在 Python.

中调用 PubSub APIs 的
  • 对于单元测试,您可以考虑在实际调用 Cloud PubSub APIs 的代码上设置一个包装器,并为此 API 包装器注入一个假的。通过这种方式,您可以测试仅调用假 API 包装器而不是真正的 API 包装器的其余代码,而不必担心启动任何外部程序。

  • 对于集成测试,PubSub 模拟器肯定有用。

我通常是这样的:

1. 我创建了一个 python 客户端 class,它使用模拟器中使用的主题、项目和订阅进行发布和订阅。

注意:您需要在 python 项目中将 PUBSUB_EMULATOR_HOST=localhost:8085 设置为环境。

2. 我将 pubsub-emulator 作为 docker 容器旋转起来。

注意:您需要设置一些环境、挂载卷和公开端口8085

为容器设置以下环境:

  • PUBSUB_EMULATOR_HOST
  • PUBSUB_PROJECT_ID
  • PUBSUB_TOPIC_ID
  • PUBSUB_SUBSCRIPTION_ID
  1. 写任何你想写的集成测试。根据您的测试要求使用来自客户端的发布者或订阅者。