jeanadrien/gatling-mqtt-protocol gatling 插件的发布和订阅问题

publish and subscribe problems with jeanadrien/gatling-mqtt-protocol plugin for gatling

我想用 gatling 和 mqtt 做一些测试。有不同的 gatling 插件。我决定使用 jenadrien 的插件,因为我发现的其他插件不支持订阅操作。

我在 java 中实现了一个 "serverside" mqtt 客户端(客户端与代理和数据库在同一节点上运行)。客户端具有从主题 "number" 订阅号码的功能。在订阅了主题中的数字后,客户端读取了 mongodb 中的数字数据集。从 mongodb 读取数据集后,客户端发布关于主题 "data" 的数据集。

我已经用 "MQTT Box" 作为用户客户端测试了该功能,它工作正常,如下图所示。我将号码发送到主题 "number" 并从主题 "data" 订阅数据。 MQTT-Box

现在想用gatling配合插件来做同样的场景。为此,我写了一个 scala-testscript。

package mqtt

import com.github.jeanadrien.gatling.mqtt.Predef._
import io.gatling.core.Predef._
import scala.concurrent.duration._



class Mqtt extends Simulation {


  val mqttConf = mqtt
    // MQTT broker
    .host("tcp://localhost:1883")


  val scn = scenario("MQTT")
      .exec(connect)
      .exec(subscribe("data").qosExactlyOnce)
      .exec(publish("number", "10").qosExactlyOnce)

  setUp(scn.inject(atOnceUsers(1))).protocols(mqttConf)


}

虽然 运行 测试我得到这个错误:

Simulation mqtt.Mqtt started... 10:15:37.310 [ERROR] c.g.j.g.m.a.PublishAction - 'mqttPublish-1' failed to execute: Can't cast value 10 of type class java.lang.String into class [B

但我的脚本与 git 中的考试相似: https://github.com/jeanadrien/gatling-mqtt-protocol/blob/master/src/test/scala/MqttScenarioExample.scala

也许问题是我必须将字符串转换为 [Byte] 数组?! 我该如何解决?

另外我想查看主题 "data" 的订阅结果。类似于我的 websocket 脚本:

.check(wsAwait.within(10 seconds).until(1).regex(""".*"data_id" : 100.0.*"""))

如何使用 mqtt 检查?

我解决了我的问题。该插件仅支持二进制数据,不支持字符串。 所以我将其添加到我的代码中:

  val message = "10"
  val msg = message.getBytes("utf-8")

现在我使用 "msg" 作为 publish 方法的参数并且它起作用了!