
# 在CodeArts TestPlan接口脚本中调用MQTTSubscribe关键字
#### MQTTSubscribe简介
该系统关键字支持对MQTT协议的全流程测试，用以向MQTT服务器订阅并接受消息，最后取消订阅，如果需要使用该系统关键字，需要用户将MQTT服务器开放公网访问并且将对应端口的安全组策略开启放行。
| 参数               | 是否必选 | 参数类型    | 默认值             | 描述                                                                                             |
|:---|:---|:---|:---|:---|
| MQTT连接标识(userId) | 是    | String  | ${MQTT_USER_ID} | MQTT连接标识,作为用例的局部变量，由MQTTConnect返回并存储。 详见：MQTTConnect章节响应提取。 |
| 订阅的主题            | 是    | String  | -               | 需要订阅的MQTT服务器的主题。                                                                               |
| QoS级别            | 是    | String  | 最多发送1次(0)       | MQTT QoS级别。                                                                                    |
| 响应类型             | 是    | String  | Text            | 消息响应类型：枚举值（Text和Binary）。支持文本(Text)或二进制(Binary)。                                                |
| 超时时间             | 是    | Long    | -               | 连接MQTT服务器超时时间，单位：MILLISECONDS。                                                                 |
| 接受消息总数           | 是    | Integer | 10              | APITest访问MQTT服务器之后保留的消息总数。                                                                     |
| 接受消息耗时           | 是    | Long    | 1               | 接收消息最长的等待时间，单位：second。                                                                         |
   
#### MQTTSubscribe响应
| 参数                             | 参数类型      | 描述                           |
|:---|:---|:---|
| subscribe_result               | JSON      | 订阅消息MQTT服务端返回值。              |
| unsubscribe_result             | -         | 取消订阅MQTT服务端返回值。              |
| subscribe_result.status        | String    | MQTT服务端响应状态。                 |
| subscribe_result.message       | String    | MQTT服务端返回信息。                 |
| subscribe_result.data          | JSON      | APITest定义的接口返回。              |
| data.request_begin             | Long      | 访问MQTT服务器的开始时间。              |
| data.response_time             | Long      | MQTT服务器返回响应耗费时长。             |
| data.sent_bytes                | Long      | 发送的字节数。                      |
| data.recv_bytes                | Long      | 接收的字节数。                      |
| data.return_code               | Integer   | MQTT服务器返回码。                  |
| message_result                 | JSON      | MQTT服务器订阅返回的消息，每个消息产生一条记录。   |
| message_result.status          | String    | MQTT获取订阅信息的状态结果。             |
| message_result.message         | String    | 订阅消息时MQTT服务器返回的信息。           |
| message_result.data            | JSON      | 订阅信息消息体。                     |
| message_result.data.more_msg   | Boolean   | 是否还有消息等待读取，消息订阅返回完成之后为false。 |
| message_result.data.sent_bytes | Long      | 发送字节数。                       |
| message_result.data recv_bytes | Long      | 接收字节数。                       |
| message_result.data messages   | JSONArray | 接收到的MQTT服务器消息。               |
| messages\[0\].timestamp        | Long      | 接收这条消息的时间点。                  |
| messages\[0\].topic            | String    | 订阅的Topic。                    |
| messages\[0\].message          | String    | 接收的消息内容。                     |
| messages\[0\].qos              | String    | 设置的MQTT Qos级别。               |
   
#### 默认检查点
| 名称 | 预期值 |
|:---|:---|
| 结果 | 成功  |
   
#### MQTTSubscribe使用示例
填写参数，订阅MQTT服务器：
![](https://support.huaweicloud.com/usermanual-testman/zh-cn_image_0000001964032269.png "点击放大")
#### MQTTSubscribe响应示例
![](https://support.huaweicloud.com/usermanual-testman/zh-cn_image_0000001936913686.png "点击放大")
```
{
  "subscribe_result" : {
    "status" : "success",
    "message" : "",
    "data" : {
      "request_begin" : 1656937043980,
      "response_time" : 37,
      "sent_bytes" : 13,
      "recv_bytes" : 5,
      "return_code" : 0
    }
  },
  "message_result" : {
    "status" : "success",
    "message" : "",
    "data" : {
      "more_msg" : false,
      "sent_bytes" : 0,
      "recv_bytes" : 35,
      "messages" : [ {
        "timestamp" : 1656937044017,
        "topic" : "test01",
        "message" : "This is a test message!",
        "qos" : 0
      } ]
    }
  },
  "unsubscribe_result" : {
    "status" : "success",
    "message" : "",
    "data" : {
      "request_begin" : 1656937044034,
      "response_time" : 0,
      "sent_bytes" : 10,
      "recv_bytes" : 4,
      "return_code" : 0
    }
  }
}
```
