zoukankan      html  css  js  c++  java
  • Jmeter中mqtt插件使用简介

    使用MQTT-JMeter插件,可以方便地添加MQTT连接、发布、订阅取样器,构造组合的应用场景,例如背景连接、多发少收、少发多收,计算消息转发时延等。

    下面介绍一下插件的使用方法。

    安装

    github下载您需要的release版本, 解压mqtt–xmeter-jar-with-dependencies.jar.zip, 将生成的jar文件放到JMeter安装主目录的lib/ext下,重启JMeter,在取样器中就可以看到插件成功加载。

    【注】推荐在最新的JMeter5.4.1版本中安装使用本插件。

    连接操作取样器

    • Server name or IP: 指向被测MQTT服务器地址。【注】为灵活起见,属性值都可以引用JMeter的系统或自定义变量。
    • Port number: 通常TCP连接的端口时1883, SSL连接则是8883。请参照服务器的具体配置。
    • Timeout(s): 连接超时设置,以秒为单位。
    • Protocols: 客户端与服务器通过SSL加密通道连接时,可以选择单向或者双向认证(Dual)。双向认证时,您还需要指定相应的信任秘钥库(Trust Key Store), 客户端证书,以及对应的文件保护密码(Secret)。这些文件可以通过服务器的证书配置转化得到。例如,对于EMQ的安装部署,<emqttd_home>/etc/cert下就存放了自签证的CA,服务器及客户端证书,参考下面的命令就可以生成插件所需的.jks, .p12文件,secret自行指定即可。
    export PATH=$PATH:<JDK_HOME>/bin
    
    keytool -import -alias cacert -keystore emqtt.jks -file cacert.pem -storepass <Your_Secret> -trustcacerts -noprompt
    
    keytool -import -alias client -keystore emqtt.jks -file client-cert.pem -storepass <Your_Secret>
    
    keytool -import -alias server -keystore emqtt.jks -file cert.pem -storepass <Your_Secret>
    
    openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.p12 -password pass:<Your_Secret>
    • User authentication: 如果服务器配置了用户认证,您需要提供相应的用户名和口令。
    • ClientId prefix: 标识客户端的固定前缀,每个连接(虚拟用户)再添加一个uuid串,整个作为客户标识。
    • Keep alive(s): 心跳信号发送间隔。例如,300表示客户端每隔300秒向服务器发出ping请求,以保持连接活跃。
    • Connect attempt max: 第一次连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。
    • Reconnect attempt max: 后继连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。
    • Clean session: 设置为0,表示创建一个持久会话,在客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。
                                设置为1,表示创建一个新的临时会话,在客户端断开时,会话自动销毁。

    发布操作取样器

    发布(Pub)取样器的连接相关属性与连接取样器完全相同,下面只介绍Pub特有的属性。

    • Pub options: 服务质量,取值为0,1,2,分别代表MQTT协议规范里的至多一次(AT_MOST_ONCE),至少一次(AT_LEAST_ONCE),精确一次(EXACTLY_ONCE)
    • Topic name: 发布消息所属的话题 (订阅方可以根据话题不同选择订阅)
    • Add timestamp in payload:如果勾选,发布的消息体开头会附带当前时间戳,利用它可以在消息接收端计算消息达到的延时。不勾选则只发送实际的消息体。
    • Retained message: 该值为TRUE表示保留消息,保留的消息会驻留在消息服务器,后来的订阅者订阅主题时仍可以接收该消息;该值为false表示不保留消息,当payload为空且该值是true,                                     则会删除这条持久化的消息,如果当payload为空且该值是false,则不会删除这条持久化的消息。
    • Payloads: 目前支持三种消息类
      • String: 普通字符串 (如上面截图所示)
      • Hex String: 以16进制数值表示的串,比如字符串Hello, 可以表示为48656C6C6F (其中,48在ascii表中对应字母H,依次类推)。通常16进制串用来构造非文本的消息体,例如描述某些私有的协议交互和控制信息等等。
      • Random string with fixed length: 按指定长度生成随机的串作为消息体。

    订阅操作取样器

    • Sub options: 服务质量,含义与发布操作取样器相同。
    • Topic name: 订阅消息所属的话题。
    • Payload includes timestamp: 如果勾选,会从消息体开头处解析发送时间戳,用于计算消息的接收延时。
    • Debug response: 如果勾选,消息内容会打印在JMeter的响应结果中,用于调试目的。正式运行测试建议不勾选。
    • Sample on:采样方式,它控制如何采样。默认值为“elapsed with specified time(ms)”,这意味着子采样器将每指定毫秒发生一次(默认值为1000ms)。在1000 ms期间,可以接收多条消息,结果生成报告是1000 ms期间的摘要数据。如果该值设置为2000,则表示2000 ms期间的摘要报告。另一个选项是“number of received messages”,这意味着子采样器将在接收到这些指定数量的消息后发生(默认值为1)。

    断开连接操作取样器

    这个采样器非常简单,它只是清除先前创建的连接。因此,下次运行Connect sampler时,它将为您启动一个新的MQTT服务器连接。如果此时未检测到连接,则断开采样将立即失败。

    混合负载的测试场景

    运用以上3种MQTT取样器,结合JMeter灵活的测试控制,您可以制定各种类型的测试场景。下面我们举一个例子,构造一个混合负载的场景。mq客户端只连接一次,定时发布主题,以订阅到主题消息为一次测试用例结束。

    我们定义3个虚拟用户,分别进行连接,发布,订阅操作。

    • 连接者:添加一个仅一次控制器,模拟单个设备行为,仅一次连接
    • 发布者:添加一个定时器,每隔3秒发送一条主题,带时间戳
    • 订阅者:采样方式,接收到指定主题消息后发生

    在JMeter中运行该场景,4秒钟左右运行结束。可以在测试结果树中看到每个操作的详细信息。表格视图的”Sample Time”列出了操作花费的时间(毫秒)。由于这次测试在本地,并发用户数很少,所以连接、消息发送、接收时延都很短。您可以指向实际的MQTT服务器,模拟更大的并发用户数。

    本文来自博客园,作者:ReluStarry,转载请注明原文链接:https://www.cnblogs.com/relustarry/p/14703442.html

  • 相关阅读:
    路由基础、多app共存,路由分配、路由分发(将app自己的路由分发给应用自身管理)、反解
    Django项目的创建与介绍,三件套,静态文件,配置Mysql完成数据迁移,单表ORM记录的增删改查
    Django框架导读
    Flask简易版本、Ajax、DOM操作,表单操作
    JQuery
    0820-信心赛
    codeforces比赛总(吐)结(嘈)
    洛谷P3403 跳楼机(最短路)
    求逆序对的三种方法
    NKOJ 3751 扫雷游戏
  • 原文地址:https://www.cnblogs.com/relustarry/p/14703442.html
Copyright © 2011-2022 走看看