用janling

时间:2017-09-28 08:26:18

标签: scala mqtt gatling

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

我在java中实现了“serverside”mqtt客户端(客户端在与代理和数据库相同的节点上运行)。客户端具有从主题“号码”订阅号码的功能。在订阅主题中的数字之后,客户端使用mongodb中的数字数据集进行读取。从mongodb读取数据集后,客户端会在主题“数据”上发布数据集。

我已经使用“MQTT Box”作为用户客户端测试了该功能,它可以正常工作,如下图所示。我将号码发送到主题“号码”并订阅主题“数据”中的数据。 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)


}

运行测试时出现此错误:

  

模拟mqtt.Mqtt开始... 10:15:37.310 [ERROR]   c.g.j.g.m.a.PublishAction - 'mqttPublish-1'未能执行:不能   将类java.lang.String的值10转换为类[B

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

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

此外,我想检查主题“数据”的订阅结果。与我的websocket脚本类似:

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

如何使用mqtt检查?

1 个答案:

答案 0 :(得分:0)

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

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

现在我使用" msg"作为发布方法的参数,它可以工作!