我想用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检查?
答案 0 :(得分:0)
我解决了我的问题。该插件仅支持二进制数据而不支持字符串。 所以我把它添加到我的代码中:
val message = "10"
val msg = message.getBytes("utf-8")
现在我使用" msg"作为发布方法的参数,它可以工作!