我是Robot框架和MQTT的新手。我提出了一个使用mosquito的订阅者/发布者设置。我已经编写了一个代码来发布到订阅的主题。发布的代码运行良好,我可以在订阅者窗口中看到输出。然而,订阅关键字对我不起作用。
我已经尝试了订阅、订阅和验证。对于前者,我得到Messages=[],对于后者,"预期的有效负载没有到达主题中"。附上了代码的屏幕截图。
Subscribe and get messages
Subscribe MQTTtest2 qos=2 timeout=1 limit=0
I Publish an MQTT request
${messages}= Subscribe MQTTtest2 qos=2 timeout=5 limit=0
log to console Messages=${messages}
I Publish an MQTT request
connect 127.0.0.1
publish MQTTtest2 testmessage 2 ${false}
disconnect
MQTT_SUBSCRIBE_AND_VALIDATE
[Tags] mqtt
[Setup] Connect 127.0.0.1
I SUBSCRIBE to a Topic
[Teardown] Disconnect
I SUBSCRIBE to a Topic
#connect ${MQTT.hostname}
subscribe and validate ${MQTT.topic} ${MQTT.qos} ${MQTT.message} 5
#disconnect
你能告诉我我做错了什么吗?订阅发布
订阅和验证现在似乎可以工作了。
*** Variable ***
${mqtt-server} 127.0.0.1
${mqtt-path} ABCD
${message-payload} MQTT-Test-2.robot payload1 test message from RobotFramework
${message-payload2} MQTT-Test-2.robot payload2 test message from RobotFramework
*** Keywords ***
Subscribe And Get Messages
Subscribe topic=${mqtt-path} qos=2 timeout=5 limit=0
#I Publish An MQTT Request
Publish topic=${mqtt-path} message=${message-payload}
${messages}= Subscribe topic=${mqtt-path} qos=1 timeout=5 limit=0
Log To Console Messages=${messages}
Subscribe And Validate Messages
Subscribe topic=${mqtt-path} qos=2 timeout=5 limit=0
#I Publish An MQTT Request
Publish topic=${mqtt-path} message=${message-payload2}
${messages}= Subscribe And Validate topic=${mqtt-path} qos=1 timeout=5 payload=${message-payload2}
Log To Console Messages=${messages}
Publish An MQTT Request
Publish topic=${mqtt-path} message=${message-payload}
*** Test Cases ***
MQTT test
[Tags] mqtt
[Setup] Connect 127.0.0.1
Publish An MQTT Request
Subscribe And Get Messages
Subscribe And Validate Messages
[Teardown] Disconnect
=================================================
MQTT测试-3::这是一个MQTT测试项目:MQTT测试-2.robot,它探索
MQTT测试。。Messages=["MQTT-Test-2.robot payload1来自RobotFramework的测试消息"].Messages=无
MQTT测试|通过|
MQTT测试-3::这是一个MQTT测试项目:MQTT测试-2.robot…|通行证|1次关键测试,1次通过,0次失败
共1次测试,1次通过,0次失败
如果订阅操作也使用Connect
关键字,则必须连接到代理。
当前,您尚未在任何Subscribe
关键字之前建立连接。在您的I Publish an MQTT request
中,您进行了一次连接以便成功,但随后您也进行了断开连接以便下一次订阅再次失败。
如果你这样修改你的测试:
*** Keywords ***
Subscribe And Get Messages
Subscribe topic=MQTTtest2 qos=2 timeout=5 limit=0
I Publish An MQTT Request
${messages}= Subscribe topic=MQTTtest2 qos=2 timeout=5 limit=0
Log To Console Messages=${messages}
I Publish An MQTT Request
Publish topic=MQTTtest2 testmessage 2 ${false}
*** Test Cases ***
MQTT test
[Tags] mqtt
[Setup] Connect 127.0.0.1
Subscribe And Get Messages
[Teardown] Disconnect
它应该正常工作:
==============================================================================
Robot Framework.My Test
==============================================================================
MQTT test .Messages=[b'testmessage']
MQTT test | PASS |
而且,MQTT库似乎与每个Connect
一起注册为一个新客户端,因此,如果您为每个订阅和发布分别进行连接/断开连接,那么这可能不会像您所期望的那样对您起作用。