LoadRunner是性能测试领域最为常见的一款性能测试工具,拥有最广泛的协议支持,本文分享的是,如何通过LoadRunner对MQTT协议进行负载测试,评估系统在大规模设备连接和数据传输下的性能,以及如何实现对加密流量的测试。
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上。作为一种低开销、低带宽占用的即时通讯协议,MQTT协议在物联网、小型设备、移动应用等方面有较广泛的应用。
性能测试工具LoadRunner 支持针对MQTT协议进行负载测试,可以帮助评估评估系统在大规模设备连接和数据传输下的性能。与此同时,LoadRunner 可以通过 SSL/TLS 协议对 MQTT 消息进行加密,模拟真实的物联网安全通信。测试人员可以评估加密过程对性能的影响,例如延迟、带宽占用等。
一、通过LoadRunner测试MQTT协议
1、虚拟用户脚本编写:
使用 LoadRunner 的 VUGen 工具编写MQTT 协议的虚拟用户脚本。每个虚拟用户代表一个设备,进行连接、订阅、发布消息等操作。通过 MQTT 的 publish/subscribe 模型,可以模拟设备之间的通信行为。
可以使用 MQTT 脚本向导为脚本生成属性,也可以使用定义的MQTT 函数手动对其进行脚本编写。
脚本的客户端变量在“额外文件”> globals.h 文件中进行声明,可以从解决方案资源管理器访问该文件。
具体操作步骤:
第一步:
选择“新建脚本和解决方案”>“MQTT 协议”创建新脚本。在编辑器中打开包含了所有可用MQTT 函数的即用脚本。“脚本向导”会在单独的对话框中自动打开。
通过 MQTT 脚本向导,可以定义设置,然后在 MQTT 脚本中将其作为代码生成。
新建 MQTT 脚本时,将自动显示脚本向导 (默认设置)。也可以通过单击 VuGen 工具栏上的“设计脚本”来打开它。(在编辑器中打开 MQTT 脚本时,可使用“设计脚本”按钮。)
注: 如果要创建多协议脚本,则可以将 MQTT 步骤集成到录制的 Web - HTTP/HTML 脚本中。
第二步:配置运行时设置。
在解决方案资源管理器中,双击“运行时设置”。在“<测试名称>:运行时设置”视图中,根据需要配置运行时设置。要查看各个运行时设置的描述,将光标悬停在运行时设置字段名称上即可。
2、发布/订阅模式模拟:
在脚本中,通过订阅特定的主题(Topic)和发布消息,模拟设备之间的消息交换。LoadRunner 可以用来测试不同设备在不同负载下的性能表现,帮助企业评估系统在高并发下的处理能力。
3、MQTT 监控指标
1)可用于 MQTT 统计信息的监控器
| MQTT 消息速率 | 监控在负载测试场景运行期间的任意给定时间每秒发布 (“发布速率”) 或接收 (“接收速率”) 的消息数。 |
|---|---|
| MQTT 吞吐量 | 监控在负载测试场景运行的任意给定时间 Vuser 从 MQTT 代理接收 (“收到吞吐量”)或向其发布 (“发布吞吐量”) 的数据量 (字节)。 |
| MQTT 活动连接 | 监控在负载测试场景运行期间的任意给定时间的活动 MQTT 代理连接数 (“活动连接”)。 |
| MQTT 动态消息 | 监控在负载测试场景运行的任意给定时间 MQTT 代理上的动态消息数 (“动态消息”)。动态消息是指可能正在传输的 QoS 1 或 2 消息,其中包括当前正在通过握手传输的消息和正在重试的消息。 |
| MQTT $SYS 主题 | 监控在负载测试场景运行期间的 MQTT 代理计算机系统资源使用情况。此信息可以帮助找出服务器性能瓶颈。 |
2)MQTT 统计信息度量
| 度量 | 描述 |
|---|---|
| 发布速率 | 场景运行持续时间内每秒发布的消息数。 |
| 收到速率 | 场景运行持续时间内每秒收到的消息数。 |
| 活动连接 | 场景运行持续时间内到 MQTT 代理的活动连接数。 |
| 发布吞吐量 | 场景运行持续时间内发布消息的平均数据流量 (每秒字节数)。 |
| 收到吞吐量 | 场景运行持续时间内接收消息的平均数据流量 (每秒字节数)。 |
| 动态消息 | 场景运行持续时间内当前的动态消息数。 |
| 发布的平均持续时间 | 场景运行持续时间内发布消息的平均时间 (秒)。 |
| 连接的平均持续时间 | 场景运行持续时间内代理连接的平均持续时间 (秒)。 |
| 连接统计信息 | 成功代理连接数和失败代理连接数。 |
3)MQTT 代理的自定义系统度量
| 度量 | 描述 |
|---|---|
| 客户端/活动 | 当前连接的客户端数。(已弃用) |
| 客户端/已过期 | 已过期和已通过 persistent_client_expiration 选项移除的断开连接的永久性客户端数。 |
| 客户端数/不活动 | 已在代理注册、但当前断开连接的永久性客户端 (已启用新会话) 的总数。(已弃用) |
| 负载/字节数/... | 不同时间间隔 (1/5/15 分钟) 内由代理接收/发送的字节数的移动平均值。返回的值表示根据 1/5/15 分钟平均得出的 1 分钟内接收/发送的字节数。 |
| 负载数/连接/... | 不同时间间隔 (1/5/15 分钟) 内由代理接收的连接包数的移动平均值。返回的值表示根据 1/5/15 分钟平均得出的 1 分钟内接收的连接数。 |
| 负载数/消息数/... | 不同时间间隔 (1/5/15 分钟) 内由代理接收/发送的所有类型的 MQTT 消息数的移动平均值。返回的值表示根据 1/5/15 分钟平均得出的 1 分钟内接收/发送的消息数。 |
| 负载数/发布/发送... | 不同时间间隔 (1/5/15 分钟) 内由代理发送的发布消息数的移动平均值。返回的值表示根据 1/5/15 分钟平均得出的 1 分钟内发送的发布消息数。 |
| 负载/套接字数/... | 不同时间间隔 (1/5/15 分钟) 内打开的到代理的套接字连接数的移动平均值。返回的值表示根据 1/5/15 分钟平均得出的 1 分钟内的套接字连接数。 |
| 消息数/存储 | 当前保留在消息存储中的消息数。其中包括为持久性客户端保留的消息和排队的消息。 |
| 发布/字节数/... | 代理启动以来在发布消息中接收/发送的字节总数。 |
二、LoadRunner加密流量测试
在使用LoadRunner进行性能测试时,如果被测系统使用了加密流量要求通过 SSL/TLS 加密通道进行通信,LoadRunner通过支持SSL/TLS 协议对流量进行加密测试,可以帮助测试人员评估加密通信对系统性能的影响。
LoadRunner 支持在性能测试中配置 SSL/TLS 协议,以模拟加密流量。要启用 SSL/TLS 测试,测试人员需要进行以下配置:
1)启用SSL协议:在 VuGen 中,选择使用 HTTPS协议或其他支持 SSL/TLS 加密的协议(如 MQTT over TLS)。测试人员可以配置虚拟用户脚本,通过加密的通信通道进行数据交换。
2)设置SSL证书:测试人员需要配置有效的SSL 证书,确保模拟的通信能够通过加密通道进行。LoadRunner 支持自定义证书或使用现有证书进行加密流量测试。
1)设置 CA 和 TLS 证书
2)确定系统中哪台计算机是用于客户端服务器通信的服务器。
3)在用作服务器的计算机上激活客户端身份验证。
4)在 Controller 中配置身份验证设置。
5)在客户端计算机上激活服务器身份验证(可选)。
在进行加密流量测试时,LoadRunner 还可以结合其他安全性测试,确保系统的安全性和性能。加密流量的测试不仅仅是验证通信的安全性,还需要评估加密和解密操作对系统性能的影响。
在LoadRunner中,测试完成后,可以查看加密流量对响应时间、吞吐量、CPU 使用率等性能指标的影响。如果启用了 SSL/TLS 加密,可能会看到响应时间和带宽使用的增加,因为加密过程需要额外的计算资源。测试人员可以评估 SSL/TLS 加密所带来的性能开销,帮助优化加密设置和资源分配。
也可以模拟 SSL/TLS 协议的攻击(如中间人攻击、证书伪造等),确保系统能够抵御可能的安全威胁。通过 LoadRunner 的安全性和性能测试,企业可以在保持高安全性要求的同时,确保系统能够处理高并发和加密流量。如需产品7天试用,可私信我获取。