订阅以获取在机器人框架 MQTT 库中不起作用的消息

Subscribe to get messages not working in Robot framework MQTT Library

我是机器人框架和 MQTT 的新手。我已经使用 mosquitto 进行了 subscriber/publisher 设置。我写了一个代码来发布到一个订阅的主题。 Publish 的代码运行良好,我能够在订阅者 window 中看到输出。但是,订阅关键字对​​我不起作用。

我已经尝试过订阅和订阅并验证。对于前者,我得到 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

你能告诉我我做错了什么吗? Subscribe Publish

在订阅操作的情况下,您也必须使用 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 中注册为新客户端,因此如果您为每个订阅和发布单独 connect/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-Test-3 :: 这是一个 MQTT 测试项目:MQTT-Test-2.robot 探索...

MQTT 测试..Messages=['MQTT-Test-2.robot payload1 test message from RobotFramework'] .Messages=None

MQTT 测试 |通过 |

MQTT-Test-3 :: 这是一个 MQTT 测试项目:MQTT-Test-2.robot that... |通过 | 1 项关键测试,1 项通过,0 项失败

1 次测试,1 次通过,0 次失败