我正在研究一个烧瓶API,其中一个端点是接收消息并将其发布到PubSub。目前,为了测试该端点,我将不得不从命令行手动启动PubSub仿真器,并在测试期间保持它运行。它工作得很好,但它不适合自动化测试。
我想知道是否有人知道如何从python中启动测试PubSub模拟器?或者,如果有人有更好的解决方案来测试这样的API?
答案 0 :(得分:1)
据我所知,没有可用的Python原生Google Cloud PubSub模拟器。
您没有多少选择,所有选项都需要从Python启动外部程序:
直接从你的python应用程序调用你提到的gcloud命令:gcloud beta emulators pubsub start [options]
,将其作为外部程序启动。
作为Cloud SDK的一部分提供的PubSub模拟器是由CLOUD_SDK_INSTALL_DIR/platform/pubsub-emulator/bin/cloud-pubsub-emulator
中的bash脚本引导的JAR文件。您可以直接运行此bash脚本。
这是StackOverflow answer which covers multiple ways to launch an external program from Python。
另外,从你的问题来看,你是如何用Python调用PubSub API的还不是很清楚。
对于单元测试,您可以考虑在实际调用Cloud PubSub API的代码上设置包装器,并为此API包装器注入假名。这样,您可以测试其余的代码,这些代码只调用您的假API包装器而不是真正的API包装器,而不用担心启动任何外部程序。
对于集成测试,PubSub模拟器肯定会有用。
答案 1 :(得分:0)
这是我通常的工作方式:
1。。我创建了一个python客户端类,该类确实发布并订阅了模拟器中使用的主题,项目和订阅。
注意:您需要在Python项目中将PUBSUB_EMULATOR_HOST=localhost:8085
设置为env。
2。。我启动了一个pubsub仿真器作为docker容器。
注意:您需要设置一些环境,挂载卷并公开端口8085
。
为容器设置以下环境:
PUBSUB_EMULATOR_HOST
PUBSUB_PROJECT_ID
PUBSUB_TOPIC_ID
PUBSUB_SUBSCRIPTION_ID