
# 在CodeArts TestPlan接口脚本中调用MQTTConnect关键字
#### MQTT协议简介
MQTT（Message Queuing Telemetry Transport，消息队列遥测传输协议），是一种基于发布/订阅（Publish/Subscribe）模式的轻量级通讯协议，MQTT 最大的优点在于以极少的代码和有限的带宽，为远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议， MQTT 在物联网、小型设备、移动应用等方面有广泛的应用。
接口测试对于MQTT协议提供全流程测试，系统关键字包括：MQTTConnect，MQTTDisconnect，MQTTPublish，MQTTSubscribe。
由于MQTT协议测试需要采用双容器方案，安全风险较高，目前只对白名单用户开放，如果需要使用MQTT相关测试请联系客服。
#### MQTTConnect简介
该系统关键字支持对MQTT协议的全流程测试，用以连接MQTT服务器，如果需要使用该系统关键字，需要用户将MQTT服务器开放公网访问并且将对应端口的安全组策略开启放行。
| 参数        | 是否必选 | 参数类型    | 默认值      | 描述                                                                         |
|:---|:---|:---|:---|:---|
| MQTT服务器协议 | 是    | String  | -        | 枚举值（tcp://和ssl://），缺省为tcp://。当前支持TCP(tcp://)和SSL(ssl://)两种协议，其余协议待扩充。      |
| MQTT服务器IP | 是    | String  | -        | MQTT服务器地址，支持写固定IP或域名。                                                      |
| MQTT服务器端口 | 是    | Integer | -        | MQTT服务器端口，用来访问MQTT服务。                                                      |
| MQTT版本    | 是    | String  | 3.1.1    | MQTT版本：目前支持3.1.1和3.1。                                                      |
| 用户名       | 是    | String  | -        | MQTT服务器用户名。                                                                |
| 密码        | 是    | String  | -        | MQTT服务器密码。                                                                 |
| 连接保活时长    | 是    | String  | 300      | MQTT协议组件与服务器在该时间段内会发送心跳。超过该连接保活时长后，客户端不再发送PINGREQ报文，不影响后续发布消息、订阅消息和关闭连接流程。 |
| 客户端ID     | 是    | String  | apitest_ | MQTT客户端ID，用来区分客户端，一般为UUID。                                                 |
| 添加随机后缀    | 是    | Boolean | true     | 支持添加随机后缀，当clientID为空时，默认打开，用户指定后缀，请关闭随机后缀。                                 |
| 清空会话      | 是    | Boolean | false    | 每次消息接收之后是否清空会话。                                                            |
   
#### MQTTConnect响应
| 参数            | 参数类型    | 描述                                                                       |
|:---|:---|:---|
| mqtt_response | JSON    | MQTT服务端返回值。                                                              |
| status        | String  | MQTT服务端响应状态。                                                             |
| message       | String  | MQTT服务端返回信息。                                                             |
| data          | JSON    | APITest定义的接口返回。                                                          |
| request_begin | Long    | 访问MQTT服务器的开始时间。                                                          |
| response_time | Long    | MQTT服务器返回响应耗费时长。                                                         |
| sent_bytes    | Long    | 发送的字节数。                                                                  |
| recv_bytes    | Long    | 接收的字节数。                                                                  |
| return_code   | Integer | MQTT服务器返回码。                                                              |
| user_id       | Integer | APITest返回的用户标识ID，详见：详见[默认响应提取]。 |
   
#### MQTT默认检查点
| 名称 | 预期值 |
|:---|:---|
| 结果 | 成功  |
   
 #### 默认响应提取
| 提取参数名称       | 提取属性    | 参数说明                                       |
|:---|:---|:---|
| MQTT_USER_ID | user_id | MQTT服务器连接成功之后，系统标记的服务用户ID，后续MQTT系统关键字需要引用。 |
   
#### MQTTConnect使用示例
填写参数，链接MQTT服务器：
![](https://support.huaweicloud.com/usermanual-testman/zh-cn_image_0000001936914006.png "点击放大")
#### MQTTConnect响应示例
```
{
  "mqtt_response" : {
    "status" : "success",
    "message" : "",
    "data" : {
      "request_begin" : 1656937043362,
      "response_time" : 73,
      "sent_bytes" : 18,
      "recv_bytes" : 4,
      "return_code" : 0
    }
  },
  "user_id" : "1"
}
```
