我想用gatling和mqtt做一些测试。gatling有不同的插件。我决定使用jeanadrien的插件,因为我发现的其他插件不支持订阅操作。
我在java中实现了一个“服务器端”mqtt客户机(客户机运行在与代理和数据库相同的节点上)。客户端具有订阅主题" number“中的数字的功能。订阅主题中的数字后,客户端使用mongodb中的number数据集读取。从mongodb读取数据集之后,客户端就发布主题"data“上的数据集。
我已经测试了"MQTT Box“作为用户客户端的功能,它可以很好地工作,如下面的图片所示。我将编号发送到主题" number“,并从主题" data”订阅数据。MQTT-Box
现在,我想使用gatling与插件创建相同的场景。为此,我写了一个。
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错误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
也许问题是我必须转换字节数组中的字符串?!我怎么才能修好它?
此外,我还想检查主题"data“的订阅结果。类似于我的websocket-脚本:
.check(wsAwait.within(10 seconds).until(1).regex(""".*"data_id" : 100.0.*"""))如何使用mqtt的支票?
发布于 2017-10-09 12:07:29
我解决了我的问题。插件只支持二进制数据,不支持字符串。所以我把这个添加到我的代码中:
val message = "10"
val msg = message.getBytes("utf-8")现在我使用"msg“作为发布方法的参数,它可以工作!
https://stackoverflow.com/questions/46464372
复制相似问题